<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN"
"http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head><meta http-equiv="content-type" content="text/html; charset=utf-8" />
<title>[210024] trunk</title>
</head>
<body>

<style type="text/css"><!--
#msg dl.meta { border: 1px #006 solid; background: #369; padding: 6px; color: #fff; }
#msg dl.meta dt { float: left; width: 6em; font-weight: bold; }
#msg dt:after { content:':';}
#msg dl, #msg dt, #msg ul, #msg li, #header, #footer, #logmsg { font-family: verdana,arial,helvetica,sans-serif; font-size: 10pt;  }
#msg dl a { font-weight: bold}
#msg dl a:link    { color:#fc3; }
#msg dl a:active  { color:#ff0; }
#msg dl a:visited { color:#cc6; }
h3 { font-family: verdana,arial,helvetica,sans-serif; font-size: 10pt; font-weight: bold; }
#msg pre { overflow: auto; background: #ffc; border: 1px #fa0 solid; padding: 6px; }
#logmsg { background: #ffc; border: 1px #fa0 solid; padding: 1em 1em 0 1em; }
#logmsg p, #logmsg pre, #logmsg blockquote { margin: 0 0 1em 0; }
#logmsg p, #logmsg li, #logmsg dt, #logmsg dd { line-height: 14pt; }
#logmsg h1, #logmsg h2, #logmsg h3, #logmsg h4, #logmsg h5, #logmsg h6 { margin: .5em 0; }
#logmsg h1:first-child, #logmsg h2:first-child, #logmsg h3:first-child, #logmsg h4:first-child, #logmsg h5:first-child, #logmsg h6:first-child { margin-top: 0; }
#logmsg ul, #logmsg ol { padding: 0; list-style-position: inside; margin: 0 0 0 1em; }
#logmsg ul { text-indent: -1em; padding-left: 1em; }#logmsg ol { text-indent: -1.5em; padding-left: 1.5em; }
#logmsg > ul, #logmsg > ol { margin: 0 0 1em 0; }
#logmsg pre { background: #eee; padding: 1em; }
#logmsg blockquote { border: 1px solid #fa0; border-left-width: 10px; padding: 1em 1em 0 1em; background: white;}
#logmsg dl { margin: 0; }
#logmsg dt { font-weight: bold; }
#logmsg dd { margin: 0; padding: 0 0 0.5em 0; }
#logmsg dd:before { content:'\00bb';}
#logmsg table { border-spacing: 0px; border-collapse: collapse; border-top: 4px solid #fa0; border-bottom: 1px solid #fa0; background: #fff; }
#logmsg table th { text-align: left; font-weight: normal; padding: 0.2em 0.5em; border-top: 1px dotted #fa0; }
#logmsg table td { text-align: right; border-top: 1px dotted #fa0; padding: 0.2em 0.5em; }
#logmsg table thead th { text-align: center; border-bottom: 1px solid #fa0; }
#logmsg table th.Corner { text-align: left; }
#logmsg hr { border: none 0; border-top: 2px dashed #fa0; height: 1px; }
#header, #footer { color: #fff; background: #636; border: 1px #300 solid; padding: 6px; }
#patch { width: 100%; }
#patch h4 {font-family: verdana,arial,helvetica,sans-serif;font-size:10pt;padding:8px;background:#369;color:#fff;margin:0;}
#patch .propset h4, #patch .binary h4 {margin:0;}
#patch pre {padding:0;line-height:1.2em;margin:0;}
#patch .diff {width:100%;background:#eee;padding: 0 0 10px 0;overflow:auto;}
#patch .propset .diff, #patch .binary .diff  {padding:10px 0;}
#patch span {display:block;padding:0 10px;}
#patch .modfile, #patch .addfile, #patch .delfile, #patch .propset, #patch .binary, #patch .copfile {border:1px solid #ccc;margin:10px 0;}
#patch ins {background:#dfd;text-decoration:none;display:block;padding:0 10px;}
#patch del {background:#fdd;text-decoration:none;display:block;padding:0 10px;}
#patch .lines, .info {color:#888;background:#fff;}
--></style>
<div id="msg">
<dl class="meta">
<dt>Revision</dt> <dd><a href="http://trac.webkit.org/projects/webkit/changeset/210024">210024</a></dd>
<dt>Author</dt> <dd>wenson_hsieh@apple.com</dd>
<dt>Date</dt> <dd>2016-12-20 10:44:38 -0800 (Tue, 20 Dec 2016)</dd>
</dl>

<h3>Log Message</h3>
<pre>Implement the updated port/area-based Scroll Snap Module Level 1 Spec
https://bugs.webkit.org/show_bug.cgi?id=165317
&lt;rdar://problem/29490956&gt;

Reviewed by Dean Jackson.

Source/WebCore:

Implements the changes drafted in the latest iteration of the Scroll Snap Module Level 1 spec, which uses a
snap-area and snap-port-based method for determining snap positions in a scroll snapping container.
Additionally, removes the now-obsolete and prefixed implementation of the scroll snap spec and refactors all
affected layout tests to use the new CSS properties. Also adds new layout tests covering some behaviors detailed
in the new version of the spec, such as scroll snapping with transformed child elements.

See below for more detailed descriptions of the changes.

Tests: css3/scroll-snap/scroll-snap-2d-change-axis-type.html
       css3/scroll-snap/scroll-snap-2d-offsets-computed-independently.html
       css3/scroll-snap/scroll-snap-children-with-scroll-snap-margin.html
       css3/scroll-snap/scroll-snap-children-with-transforms.html
       css3/scroll-snap/scroll-snap-positions-mainframe.html
       css3/scroll-snap/scroll-snap-positions-overflow-resize.html
       css3/scroll-snap/scroll-snap-positions.html
       css3/scroll-snap/scroll-snap-style-changed-align.html
       css3/scroll-snap/scroll-snap-with-scroll-padding.html

* WebCore.xcodeproj/project.pbxproj:
* css/CSSCalculationValue.cpp:
(WebCore::hasDoubleValue):

Removed use of length repeat.

* css/CSSComputedStyleDeclaration.cpp:
(WebCore::valueForScrollSnapType):
(WebCore::valueForScrollSnapAlignment):
(WebCore::ComputedStyleExtractor::propertyValue):
(WebCore::scrollSnapDestination): Deleted.
(WebCore::scrollSnapPoints): Deleted.
(WebCore::scrollSnapCoordinates): Deleted.

Removed helper functions used to create CSS values for scroll snap coordinates and destination, and added
helpers for computed scroll snap type (a combination of axis and strictness values) as well as scroll snap align
(an alignment value per axis).

* css/CSSPrimitiveValue.cpp:
(WebCore::isValidCSSUnitTypeForDoubleConversion):
(WebCore::isStringType):
(WebCore::CSSPrimitiveValue::cleanup):
(WebCore::CSSPrimitiveValue::formatNumberForCustomCSSText):
(WebCore::CSSPrimitiveValue::cloneForCSSOM):
(WebCore::CSSPrimitiveValue::equals):

Removed usages of the length repeat type, since repeat(*) is no longer being used anywhere.

* css/CSSPrimitiveValue.h:
* css/CSSPrimitiveValueMappings.h:
(WebCore::CSSPrimitiveValue::CSSPrimitiveValue):
(WebCore::CSSPrimitiveValue::operator ScrollSnapStrictness):
(WebCore::CSSPrimitiveValue::operator ScrollSnapAxis):
(WebCore::CSSPrimitiveValue::operator ScrollSnapAxisAlignType):
(WebCore::CSSPrimitiveValue::operator ScrollSnapType): Deleted.

Added CSSPrimitiveValue mappings to ScrollSnapAxisAlignType, ScrollSnapStrictness, and ScrollSnapAxis. Removed
the old ScrollSnapType mapping.

* css/CSSProperties.json:

Replaced the old scroll snap CSS properties with the new ones. Note that scroll-snap-margin and scroll-padding
have 4 shorthands each, for the individual top/bottom/left/right values.

* css/CSSValueKeywords.in:

Added CSS keywords {x, y}, which are necessary to support the new scroll snapping properties.

* css/LengthRepeat.h: Removed.

Removed LengthRepeat entirely. This represented the `repeat(&lt;length&gt;)` CSS value, which was only used for the
scroll-snap-points-x and scroll-snap-points-y values.

* css/StyleBuilderConverter.h:
(WebCore::StyleBuilderConverter::convertScrollSnapType):
(WebCore::StyleBuilderConverter::convertScrollSnapAlign):
(WebCore::StyleBuilderConverter::parseSnapCoordinate): Deleted.
(WebCore::StyleBuilderConverter::convertScrollSnapPoints): Deleted.
(WebCore::StyleBuilderConverter::convertSnapCoordinatePair): Deleted.
(WebCore::StyleBuilderConverter::convertScrollSnapCoordinates): Deleted.

Added helper functions to convert scroll snap type and scroll snap alignment from parsed CSS values to their
primary representation in WebCore as ScrollSnapType and ScrollSnapAlign. These methods assume that the given
CSS values have successfully cleared the parsing step and are represented as CSSValueLists or length 1 or 2.

* css/StyleBuilderCustom.h:
(WebCore::StyleBuilderCustom::applyInitialWebkitScrollSnapPointsX): Deleted.
(WebCore::StyleBuilderCustom::applyInheritWebkitScrollSnapPointsX): Deleted.
(WebCore::StyleBuilderCustom::applyInitialWebkitScrollSnapPointsY): Deleted.
(WebCore::StyleBuilderCustom::applyInheritWebkitScrollSnapPointsY): Deleted.
* css/StyleProperties.cpp:
(WebCore::StyleProperties::getPropertyValue):
(WebCore::StyleProperties::asText):

Adds support for the scroll-snap-margin and scroll-padding.

* css/parser/CSSParser.cpp:
(WebCore::isValidKeywordPropertyAndValue):
(WebCore::CSSParser::parseValue):
(WebCore::isScrollSnapAxisAlign):
(WebCore::isScrollSnapStrictness):
(WebCore::CSSParser::parseScrollSnapAlign):
(WebCore::CSSParser::parseScrollSnapType):
(WebCore::CSSParser::parseNonElementSnapPoints): Deleted.
(WebCore::CSSParser::parseScrollSnapPositions): Deleted.
(WebCore::CSSParser::parseScrollSnapDestination): Deleted.
(WebCore::CSSParser::parseScrollSnapCoordinate): Deleted.
* css/parser/CSSParser.h:

Removed references to LengthRepeat, and added support for parsing new scroll snapping properties. Scroll snap
margin and scroll padding, along with their shorthands, are parsed using the same helper functions as normal
margin and padding. For type and align, I added new helper functions that build up lists of 1 or 2
CSSPrimitiveValues for each of the properties.

Parsing scroll-snap-align is straightforward -- we either have one or two values in the set {none, start,
center, end}. For scroll-snap-type, we allow a single axis value {x, y, inline, block, both}, or a single
strictness value {none, proximity, mandatory}, or an axis value followed by a non-'none' strictness (i.e. either
proximity or mandatory).

* css/parser/CSSParserFastPaths.cpp:
(WebCore::CSSParserFastPaths::isValidKeywordPropertyAndValue):
(WebCore::CSSParserFastPaths::isKeywordPropertyID):
* css/parser/CSSParserValues.cpp:
(WebCore::CSSParserValue::createCSSValue):

Removed references to LengthRepeat.

* css/parser/CSSPropertyParser.cpp:
(WebCore::CSSPropertyParser::parseSingleValue):
(WebCore::CSSPropertyParser::parseShorthand):
(WebCore::consumeSnapPointCoordinateList): Deleted.
(WebCore::consumeScrollSnapCoordinate): Deleted.
(WebCore::consumeScrollSnapDestination): Deleted.
(WebCore::consumeScrollSnapPoints): Deleted.
(WebCore::consumeScrollSnapAlign):
(WebCore::consumeScrollSnapType):
(WebCore::CSSPropertyParser::parseSingleValue):

Added parsing for the longhand properties of scroll-snap-margin and scroll-padding, which use the existing
consumeLength and consumeLengthOrPercent helpers, respectively. Removed code for parsing scroll snap
coordinates, destinations and points. Added parsing logic for align and type.

* page/scrolling/AxisScrollSnapOffsets.cpp:
(WebCore::computeScrollSnapPortOrAreaRect):
(WebCore::computeScrollSnapAlignOffset):
(WebCore::snapOffsetsToString):
(WebCore::snapPortOrAreaToString):
(WebCore::updateSnapOffsetsForScrollableArea):
(WebCore::appendChildSnapOffsets): Deleted.
(WebCore::destinationOffsetForViewSize): Deleted.
(WebCore::updateFromStyle): Deleted.
(WebCore::styleUsesElements): Deleted.

Overhauled updateSnapOffsetsForScrollableArea to work with the new scroll snapping model. In the new way of
computing scroll snap offsets, we:

Compute the scroll container's scroll snap port, which is the padding box inset by the scroll padding
For each child with snap positions (i.e. scroll-snap-align is not none on both axes)
  Compute the child's scroll snap area, which is the bounding box of the transformed border box
    If the container snaps along the horizontal axis and the snap area contributes a horizontal snap offset:
      Emit the distance from the alignment offset in the horizontal of the snap port to the corresponding offset
      in the snap area as a snap position.
    If the container snaps along the vertical axis and the snap area contributes a vertical snap offset:
      Emit the distance from the alignment offset in the vertical of the snap port to the corresponding offset
      in the snap area as a snap position.
For the snap offsets in each axis, if there is at least one snap offset:
  Clamp the offsets to the min and max scroll offsets
  Ensure that the offsets are sorted and do not contain duplicated offsets

* platform/cocoa/ScrollController.mm:
(WebCore::ScrollController::updateScrollSnapState):

Clear out the ScrollController's snap offsets and state along an axis when its ScrollableArea no longer has snap
offsets in that axis.

* rendering/RenderBox.cpp:
(WebCore::RenderBox::styleWillChange):
(WebCore::RenderBox::willBeRemovedFromTree):
* rendering/RenderLayerModelObject.cpp:
(WebCore::scrollSnapContainerRequiresUpdateForStyleUpdate):
(WebCore::RenderLayerModelObject::styleDidChange):
* rendering/RenderView.cpp:
(WebCore::RenderView::registerBoxWithScrollSnapPositions):
(WebCore::RenderView::unregisterBoxWithScrollSnapPositions):
(WebCore::RenderView::registerBoxWithScrollSnapCoordinates): Deleted.
(WebCore::RenderView::unregisterBoxWithScrollSnapCoordinates): Deleted.
* rendering/RenderView.h:

Tweaked the scroll snap child registration logic. registerBoxWithScrollSnapCoordinates is renamed to
unregisterBoxWithScrollSnapPositions, since the notion of scroll snap coordinates no longer exists, and instead
of checking if the list of scroll snap coordinates is empty for the absence of scroll positions, we instead
check for a computed scroll snap align that is not none on both axes.

* rendering/style/RenderStyle.cpp:
(WebCore::RenderStyle::initialScrollSnapType):
(WebCore::RenderStyle::initialScrollSnapAlign):
(WebCore::RenderStyle::scrollSnapArea):
(WebCore::RenderStyle::scrollSnapPort):
(WebCore::RenderStyle::scrollSnapType):
(WebCore::RenderStyle::scrollPadding):
(WebCore::RenderStyle::scrollPaddingTop):
(WebCore::RenderStyle::scrollPaddingBottom):
(WebCore::RenderStyle::scrollPaddingLeft):
(WebCore::RenderStyle::scrollPaddingRight):
(WebCore::RenderStyle::scrollSnapAlign):
(WebCore::RenderStyle::scrollSnapMargin):
(WebCore::RenderStyle::scrollSnapMarginTop):
(WebCore::RenderStyle::scrollSnapMarginBottom):
(WebCore::RenderStyle::scrollSnapMarginLeft):
(WebCore::RenderStyle::scrollSnapMarginRight):
(WebCore::RenderStyle::setScrollSnapType):
(WebCore::RenderStyle::setScrollPaddingTop):
(WebCore::RenderStyle::setScrollPaddingBottom):
(WebCore::RenderStyle::setScrollPaddingLeft):
(WebCore::RenderStyle::setScrollPaddingRight):
(WebCore::RenderStyle::setScrollSnapAlign):
(WebCore::RenderStyle::setScrollSnapMarginTop):
(WebCore::RenderStyle::setScrollSnapMarginBottom):
(WebCore::RenderStyle::setScrollSnapMarginLeft):
(WebCore::RenderStyle::setScrollSnapMarginRight):
(WebCore::RenderStyle::initialScrollSnapDestination): Deleted.
(WebCore::RenderStyle::initialScrollSnapCoordinates): Deleted.
(WebCore::RenderStyle::scrollSnapPointsX): Deleted.
(WebCore::RenderStyle::scrollSnapPointsY): Deleted.
(WebCore::RenderStyle::scrollSnapDestination): Deleted.
(WebCore::RenderStyle::scrollSnapCoordinates): Deleted.
(WebCore::RenderStyle::setScrollSnapPointsX): Deleted.
(WebCore::RenderStyle::setScrollSnapPointsY): Deleted.
(WebCore::RenderStyle::setScrollSnapDestination): Deleted.
(WebCore::RenderStyle::setScrollSnapCoordinates): Deleted.
* rendering/style/RenderStyle.h:
(WebCore::RenderStyle::initialScrollSnapMargin):
(WebCore::RenderStyle::initialScrollPadding):
(WebCore::RenderStyle::scrollSnapType): Deleted.
(WebCore::RenderStyle::setScrollSnapType): Deleted.
(WebCore::RenderStyle::initialScrollSnapType): Deleted.
(WebCore::RenderStyle::initialScrollSnapPointsX): Deleted.
(WebCore::RenderStyle::initialScrollSnapPointsY): Deleted.

Added boilerplate code for returning various new scroll snap style properties, and removed similar code for
handling the old scroll snap properties.

* rendering/style/RenderStyleConstants.h:

Added three new enum classes:
- ScrollSnapStrictness represents the strictness of scroll snapping along one or both axes
- ScrollSnapAxis designates the axes along which scroll snapping should occur
- ScrollSnapAxisAlignType indicates which offsets along the x or y axes of the snap port and snap area should be
  used to compute the snap position emitted by a snap area.

* rendering/style/StyleRareNonInheritedData.cpp:
(WebCore::StyleRareNonInheritedData::StyleRareNonInheritedData):
(WebCore::StyleRareNonInheritedData::operator==):
* rendering/style/StyleRareNonInheritedData.h:

Replaces the StyleScrollSnapPoints object (which, confusingly, was in charge of storing both the scroll
container's and child elements' scroll snap styles) with StyleScrollSnapPort and StyleScrollSnapArea objects,
which keep track of the style properties on the scroll container and the child element, respectively.

* rendering/style/StyleScrollSnapPoints.h:
(WebCore::operator==):
(WebCore::StyleScrollSnapPort::copy):
(WebCore::StyleScrollSnapPort::StyleScrollSnapPort):
(WebCore::StyleScrollSnapArea::copy):
(WebCore::StyleScrollSnapArea::StyleScrollSnapArea):
* rendering/style/StyleScrollSnapping.h: Added.
(WebCore::operator!=):
(WebCore::StyleScrollSnapPort::create):
(WebCore::StyleScrollSnapArea::create):
(WebCore::StyleScrollSnapArea::hasSnapPosition):

Overhauled StyleScrollSnapPoints, breaking the logic here into two classes: StyleScrollSnapPort for the scroll
container, handling the properties `scroll-snap-type` and `scroll-padding` and StyleScrollSnapArea for child
elements, handling the properties `scroll-snap-align` and `scroll-snap-margin`. The ScrollSnapType itself is
composed of an axis value and a strictness, while a ScrollSnapAlign keeps track of the alignment modes in each
axis. By default, these are initialized to {Both, None} and {None, None}, respectively. The rest of the logic is
boilerplate code for comparing these style objects to one another and copying style representations.

* testing/Internals.cpp:
(WebCore::Internals::scrollSnapOffsets):

Perform a layout on the document if needed before returning the list of computed snap offsets. The absence of
this layout pass was causing some layout tests in css3/scroll-snap/ to flake when testing that programmatic
changes to the scroll snap style properties change the computed snap offsets.

Source/WebKit2:

Remove unused code for adopting scroll snapping in the PDF plugin.

* WebProcess/Plugins/PDF/PDFPlugin.mm:
(WebKit::PDFPlugin::didCalculateSizes):

LayoutTests:

Refactors layout tests to use the new scroll snapping properties, removing any tests that only made sense in the
context of the old version of scroll snapping and adding new ones to cover behaviors that the existing tests do
not verify. See per-method descriptions for more details. In most cases, the old way of specifying scroll
snapping via repeat(&lt;container width or length&gt;) or a coordinate at (0, 0) on each child has been replaced with
`scroll-snap-type: (x|y|both) mandatory;` on the container and `scroll-snap-align: start` on each child element.
If a test below does not have an accompanying description, then this is the only change applied to it, and the
behavior it is testing is still relevant in the new scroll snapping model.

* css3/scroll-snap/improper-snap-points-crash-expected.txt: Removed.
* css3/scroll-snap/improper-snap-points-crash.html: Removed.

This test is no longer valid in the new scroll snapping model, since there is no way to specify both repeating
points along an axis and child elements with scroll snap coordinates.

* css3/scroll-snap/nested-elements-expected.txt:
* css3/scroll-snap/nested-elements.html:
* css3/scroll-snap/resources/iframe-content.html:
* css3/scroll-snap/scroll-snap-2d-change-axis-type-expected.txt: Added.
* css3/scroll-snap/scroll-snap-2d-change-axis-type.html: Added.

New layout test to check that changing the scroll-snap-type from one to both axes updates the computed snap
offsets in the container to have offsets from both axes.

* css3/scroll-snap/scroll-snap-2d-offsets-computed-independently-expected.txt: Added.
* css3/scroll-snap/scroll-snap-2d-offsets-computed-independently.html: Added.

New layout test to check that snap offsets are computed independently on each axis. In a 3x3 grid of child
elements with the child elements along the diagonal having `scroll-snap-align`s of `end`, `center` and `start`
in order from top left to bottom right, we should observe the same effect as having each child emit snap
positions in both axes.

* css3/scroll-snap/scroll-snap-children-with-scroll-snap-margin-expected.txt: Added.
* css3/scroll-snap/scroll-snap-children-with-scroll-snap-margin.html: Added.

New layout test to check that specifying a `scroll-snap-margin` correctly insets the scroll snap area of a child
element, and that changing the `scroll-snap-margin` via script also changes the computed scroll snap offsets.

* css3/scroll-snap/scroll-snap-children-with-transforms-expected.txt: Added.
* css3/scroll-snap/scroll-snap-children-with-transforms.html: Added.

New layout test to check that when computing the scroll snap areas of child elements, we take transforms into
account and use the bounding box of the transformed border box of the child element. Also verifies that we apply
the scroll offset _after_ the transform, so that scrolling the container and then recomputing snap offsets when
child elements are transformed does not result in different snap offsets.

* css3/scroll-snap/scroll-snap-coordinate-expected.txt: Removed.
* css3/scroll-snap/scroll-snap-coordinate.html: Removed.

Renamed to scroll-snap-position.html, since the notion of scroll snap coordinates no longer exists.

* css3/scroll-snap/scroll-snap-desination-lock-up-expected.txt: Removed.
* css3/scroll-snap/scroll-snap-desination-lock-up.html: Removed.

This test is no longer relevant in the new scroll snapping model. This is because the logic for computing scroll
snap offsets in AxisScrollSnapOffsets no longer has an opportunity to loop infinitely while trying to fill a
scrollable axis with snap offsets, since repeating snap points have been removed.

* css3/scroll-snap/scroll-snap-elements-container-larger-than-children.html:
* css3/scroll-snap/scroll-snap-inherit-expected.txt:
* css3/scroll-snap/scroll-snap-inherit.html:

Updated to test the new scroll snap properties.

* css3/scroll-snap/scroll-snap-initial-expected.txt:
* css3/scroll-snap/scroll-snap-initial.html:

Updated to test the new scroll snap properties.

* css3/scroll-snap/scroll-snap-mismatch.html:
* css3/scroll-snap/scroll-snap-negative-repeat-expected.txt: Removed.
* css3/scroll-snap/scroll-snap-negative-repeat.html: Removed.

Removed, since negative repeating scroll snap offsets are (thankfully) no longer possible in the new scroll
snapping model.

* css3/scroll-snap/scroll-snap-offsets-expected.txt:
* css3/scroll-snap/scroll-snap-offsets.html:

Augmented to mix in various alignment values among the scroll snap child elements as well as various levels of
nesting.

* css3/scroll-snap/scroll-snap-position-values-expected.txt: Removed.
* css3/scroll-snap/scroll-snap-position-values.html: Removed.

The behaviors tested here are covered by other similar tests: scroll-snap-initial and scroll-snap-inherit.

* css3/scroll-snap/scroll-snap-positions-expected.txt: Added.
* css3/scroll-snap/scroll-snap-positions-mainframe-expected.txt: Renamed from LayoutTests/css3/scroll-snap/scroll-snap-coordinate-mainframe-expected.txt.
* css3/scroll-snap/scroll-snap-positions-mainframe.html: Renamed from LayoutTests/css3/scroll-snap/scroll-snap-coordinate-mainframe.html.
* css3/scroll-snap/scroll-snap-positions-overflow-resize-expected.txt: Renamed from LayoutTests/css3/scroll-snap/scroll-snap-coordinate-overflow-resize-expected.txt.
* css3/scroll-snap/scroll-snap-positions-overflow-resize.html: Renamed from LayoutTests/css3/scroll-snap/scroll-snap-coordinate-overflow-resize.html.
* css3/scroll-snap/scroll-snap-positions.html: Added.

Renamed these existing tests to not use the term `scroll-snap-coordinate`. The semantics of these tests are
still the same, only using different values of `scroll-snap-align` instead of `-webkit-scroll-snap-coordinate`.

* css3/scroll-snap/scroll-snap-property-computed-style-expected.txt:
* css3/scroll-snap/scroll-snap-property-computed-style.js:
* css3/scroll-snap/scroll-snap-property-parsing-expected.txt:
* css3/scroll-snap/scroll-snap-property-parsing.js:
* css3/scroll-snap/scroll-snap-style-changed-align-expected.txt: Added.
* css3/scroll-snap/scroll-snap-style-changed-align.html: Renamed from LayoutTests/css3/scroll-snap/scroll-snap-style-changed-coordinates.html.
* css3/scroll-snap/scroll-snap-style-changed-coordinates-expected.txt: Removed.
* css3/scroll-snap/scroll-snap-style-changed-repeat-expected.txt: Removed.
* css3/scroll-snap/scroll-snap-style-changed-repeat.html: Removed.

No longer relevant, since repeating scroll snap offsets are no longer in the spec.

* css3/scroll-snap/scroll-snap-subpixel-repeat-expected.txt: Removed.
* css3/scroll-snap/scroll-snap-subpixel-repeat.html: Removed.

No longer relevant, since repeating scroll snap offsets are no longer in the spec.

* css3/scroll-snap/scroll-snap-with-scroll-padding-expected.txt: Added.
* css3/scroll-snap/scroll-snap-with-scroll-padding.html: Added.

New layout test to check that specifying scroll padding on a scroll container correctly outsets the scroll snap
port, and that changing scroll padding via script also changes the computed snap offsets.

* platform/mac-wk2/TestExpectations:

Removed tiled-drawing/scrolling/latched-div-with-scroll-snap.html from the list of failing tests.

* tiled-drawing/scrolling/latched-div-with-scroll-snap-expected.txt:
* tiled-drawing/scrolling/latched-div-with-scroll-snap.html:

This test was failing 100% of the time due to the momentum portion of the scrolling phase being invoked after
scroll snapping has ended. This has been rewritten to perform the following steps:
1. Scroll the top div with momentum and verify that the scroll 'glided' to the red box.
2. Scroll the top div without momentum and verify that the scroll snaps back to the red box.
3. Repeat (1) and (2), but for the bottom div. The same thing should occur.

* tiled-drawing/scrolling/scroll-snap/resources/horizontal-mainframe.html:
* tiled-drawing/scrolling/scroll-snap/resources/vertical-mainframe.html:
* tiled-drawing/scrolling/scroll-snap/scroll-snap-destination-lock-up-expected.txt: Removed.
* tiled-drawing/scrolling/scroll-snap/scroll-snap-destination-lock-up.html: Removed.
* tiled-drawing/scrolling/scroll-snap/scroll-snap-mandatory-2d-overflow.html:
* tiled-drawing/scrolling/scroll-snap/scroll-snap-mandatory-borders.html:
* tiled-drawing/scrolling/scroll-snap/scroll-snap-mandatory-mainframe-horizontal.html:
* tiled-drawing/scrolling/scroll-snap/scroll-snap-mandatory-mainframe-slow-horizontal.html:
* tiled-drawing/scrolling/scroll-snap/scroll-snap-mandatory-mainframe-slow-vertical.html:
* tiled-drawing/scrolling/scroll-snap/scroll-snap-mandatory-mainframe-vertical-then-horizontal.html:
* tiled-drawing/scrolling/scroll-snap/scroll-snap-mandatory-mainframe-vertical.html:
* tiled-drawing/scrolling/scroll-snap/scroll-snap-mandatory-overflow-stateless.html:
* tiled-drawing/scrolling/scroll-snap/scroll-snap-mandatory-overflow.html:
* tiled-drawing/scrolling/scroll-snap/scroll-snap-mandatory-padding.html:
* tiled-drawing/scrolling/scroll-snap/scroll-snap-mandatory-rotated.html:
* tiled-drawing/scrolling/scroll-snap/scroll-snap-scrolling-jumps-to-top.html:

All of the tests here were updated to use the new scroll-snap-* properties instead of the old versions. The
semantics of these tests have not changed.</pre>

<h3>Modified Paths</h3>
<ul>
<li><a href="#trunkLayoutTestsChangeLog">trunk/LayoutTests/ChangeLog</a></li>
<li><a href="#trunkLayoutTestscss3scrollsnapnestedelementsexpectedtxt">trunk/LayoutTests/css3/scroll-snap/nested-elements-expected.txt</a></li>
<li><a href="#trunkLayoutTestscss3scrollsnapnestedelementshtml">trunk/LayoutTests/css3/scroll-snap/nested-elements.html</a></li>
<li><a href="#trunkLayoutTestscss3scrollsnapresourcesiframecontenthtml">trunk/LayoutTests/css3/scroll-snap/resources/iframe-content.html</a></li>
<li><a href="#trunkLayoutTestscss3scrollsnapscrollsnapelementscontainerlargerthanchildrenhtml">trunk/LayoutTests/css3/scroll-snap/scroll-snap-elements-container-larger-than-children.html</a></li>
<li><a href="#trunkLayoutTestscss3scrollsnapscrollsnapinheritexpectedtxt">trunk/LayoutTests/css3/scroll-snap/scroll-snap-inherit-expected.txt</a></li>
<li><a href="#trunkLayoutTestscss3scrollsnapscrollsnapinherithtml">trunk/LayoutTests/css3/scroll-snap/scroll-snap-inherit.html</a></li>
<li><a href="#trunkLayoutTestscss3scrollsnapscrollsnapinitialexpectedtxt">trunk/LayoutTests/css3/scroll-snap/scroll-snap-initial-expected.txt</a></li>
<li><a href="#trunkLayoutTestscss3scrollsnapscrollsnapinitialhtml">trunk/LayoutTests/css3/scroll-snap/scroll-snap-initial.html</a></li>
<li><a href="#trunkLayoutTestscss3scrollsnapscrollsnapmismatchhtml">trunk/LayoutTests/css3/scroll-snap/scroll-snap-mismatch.html</a></li>
<li><a href="#trunkLayoutTestscss3scrollsnapscrollsnapoffsetsexpectedtxt">trunk/LayoutTests/css3/scroll-snap/scroll-snap-offsets-expected.txt</a></li>
<li><a href="#trunkLayoutTestscss3scrollsnapscrollsnapoffsetshtml">trunk/LayoutTests/css3/scroll-snap/scroll-snap-offsets.html</a></li>
<li><a href="#trunkLayoutTestscss3scrollsnapscrollsnappropertycomputedstyleexpectedtxt">trunk/LayoutTests/css3/scroll-snap/scroll-snap-property-computed-style-expected.txt</a></li>
<li><a href="#trunkLayoutTestscss3scrollsnapscrollsnappropertycomputedstylejs">trunk/LayoutTests/css3/scroll-snap/scroll-snap-property-computed-style.js</a></li>
<li><a href="#trunkLayoutTestscss3scrollsnapscrollsnappropertyparsingexpectedtxt">trunk/LayoutTests/css3/scroll-snap/scroll-snap-property-parsing-expected.txt</a></li>
<li><a href="#trunkLayoutTestscss3scrollsnapscrollsnappropertyparsingjs">trunk/LayoutTests/css3/scroll-snap/scroll-snap-property-parsing.js</a></li>
<li><a href="#trunkLayoutTestsplatformiossimulatorTestExpectations">trunk/LayoutTests/platform/ios-simulator/TestExpectations</a></li>
<li><a href="#trunkLayoutTestsplatformmacwk2TestExpectations">trunk/LayoutTests/platform/mac-wk2/TestExpectations</a></li>
<li><a href="#trunkLayoutTeststileddrawingscrollinglatcheddivwithscrollsnapexpectedtxt">trunk/LayoutTests/tiled-drawing/scrolling/latched-div-with-scroll-snap-expected.txt</a></li>
<li><a href="#trunkLayoutTeststileddrawingscrollinglatcheddivwithscrollsnaphtml">trunk/LayoutTests/tiled-drawing/scrolling/latched-div-with-scroll-snap.html</a></li>
<li><a href="#trunkLayoutTeststileddrawingscrollingscrollsnapresourceshorizontalmainframehtml">trunk/LayoutTests/tiled-drawing/scrolling/scroll-snap/resources/horizontal-mainframe.html</a></li>
<li><a href="#trunkLayoutTeststileddrawingscrollingscrollsnapresourcesverticalmainframehtml">trunk/LayoutTests/tiled-drawing/scrolling/scroll-snap/resources/vertical-mainframe.html</a></li>
<li><a href="#trunkLayoutTeststileddrawingscrollingscrollsnapscrollsnapmandatory2doverflowhtml">trunk/LayoutTests/tiled-drawing/scrolling/scroll-snap/scroll-snap-mandatory-2d-overflow.html</a></li>
<li><a href="#trunkLayoutTeststileddrawingscrollingscrollsnapscrollsnapmandatorybordershtml">trunk/LayoutTests/tiled-drawing/scrolling/scroll-snap/scroll-snap-mandatory-borders.html</a></li>
<li><a href="#trunkLayoutTeststileddrawingscrollingscrollsnapscrollsnapmandatorymainframehorizontalhtml">trunk/LayoutTests/tiled-drawing/scrolling/scroll-snap/scroll-snap-mandatory-mainframe-horizontal.html</a></li>
<li><a href="#trunkLayoutTeststileddrawingscrollingscrollsnapscrollsnapmandatorymainframeslowhorizontalhtml">trunk/LayoutTests/tiled-drawing/scrolling/scroll-snap/scroll-snap-mandatory-mainframe-slow-horizontal.html</a></li>
<li><a href="#trunkLayoutTeststileddrawingscrollingscrollsnapscrollsnapmandatorymainframeslowverticalhtml">trunk/LayoutTests/tiled-drawing/scrolling/scroll-snap/scroll-snap-mandatory-mainframe-slow-vertical.html</a></li>
<li><a href="#trunkLayoutTeststileddrawingscrollingscrollsnapscrollsnapmandatorymainframeverticalthenhorizontalhtml">trunk/LayoutTests/tiled-drawing/scrolling/scroll-snap/scroll-snap-mandatory-mainframe-vertical-then-horizontal.html</a></li>
<li><a href="#trunkLayoutTeststileddrawingscrollingscrollsnapscrollsnapmandatorymainframeverticalhtml">trunk/LayoutTests/tiled-drawing/scrolling/scroll-snap/scroll-snap-mandatory-mainframe-vertical.html</a></li>
<li><a href="#trunkLayoutTeststileddrawingscrollingscrollsnapscrollsnapmandatoryoverflowstatelesshtml">trunk/LayoutTests/tiled-drawing/scrolling/scroll-snap/scroll-snap-mandatory-overflow-stateless.html</a></li>
<li><a href="#trunkLayoutTeststileddrawingscrollingscrollsnapscrollsnapmandatoryoverflowhtml">trunk/LayoutTests/tiled-drawing/scrolling/scroll-snap/scroll-snap-mandatory-overflow.html</a></li>
<li><a href="#trunkLayoutTeststileddrawingscrollingscrollsnapscrollsnapmandatorypaddinghtml">trunk/LayoutTests/tiled-drawing/scrolling/scroll-snap/scroll-snap-mandatory-padding.html</a></li>
<li><a href="#trunkLayoutTeststileddrawingscrollingscrollsnapscrollsnapmandatoryrotatedhtml">trunk/LayoutTests/tiled-drawing/scrolling/scroll-snap/scroll-snap-mandatory-rotated.html</a></li>
<li><a href="#trunkLayoutTeststileddrawingscrollingscrollsnapscrollsnapscrollingjumpstotophtml">trunk/LayoutTests/tiled-drawing/scrolling/scroll-snap/scroll-snap-scrolling-jumps-to-top.html</a></li>
<li><a href="#trunkSourceWebCoreChangeLog">trunk/Source/WebCore/ChangeLog</a></li>
<li><a href="#trunkSourceWebCoreWebCorexcodeprojprojectpbxproj">trunk/Source/WebCore/WebCore.xcodeproj/project.pbxproj</a></li>
<li><a href="#trunkSourceWebCorecssCSSCalculationValuecpp">trunk/Source/WebCore/css/CSSCalculationValue.cpp</a></li>
<li><a href="#trunkSourceWebCorecssCSSComputedStyleDeclarationcpp">trunk/Source/WebCore/css/CSSComputedStyleDeclaration.cpp</a></li>
<li><a href="#trunkSourceWebCorecssCSSPrimitiveValuecpp">trunk/Source/WebCore/css/CSSPrimitiveValue.cpp</a></li>
<li><a href="#trunkSourceWebCorecssCSSPrimitiveValueh">trunk/Source/WebCore/css/CSSPrimitiveValue.h</a></li>
<li><a href="#trunkSourceWebCorecssCSSPrimitiveValueMappingsh">trunk/Source/WebCore/css/CSSPrimitiveValueMappings.h</a></li>
<li><a href="#trunkSourceWebCorecssCSSPropertiesjson">trunk/Source/WebCore/css/CSSProperties.json</a></li>
<li><a href="#trunkSourceWebCorecssCSSValueKeywordsin">trunk/Source/WebCore/css/CSSValueKeywords.in</a></li>
<li><a href="#trunkSourceWebCorecssStyleBuilderConverterh">trunk/Source/WebCore/css/StyleBuilderConverter.h</a></li>
<li><a href="#trunkSourceWebCorecssStyleBuilderCustomh">trunk/Source/WebCore/css/StyleBuilderCustom.h</a></li>
<li><a href="#trunkSourceWebCorecssStylePropertiescpp">trunk/Source/WebCore/css/StyleProperties.cpp</a></li>
<li><a href="#trunkSourceWebCorecssStyleResolvercpp">trunk/Source/WebCore/css/StyleResolver.cpp</a></li>
<li><a href="#trunkSourceWebCorecssparserCSSParserFastPathscpp">trunk/Source/WebCore/css/parser/CSSParserFastPaths.cpp</a></li>
<li><a href="#trunkSourceWebCorecssparserCSSPropertyParsercpp">trunk/Source/WebCore/css/parser/CSSPropertyParser.cpp</a></li>
<li><a href="#trunkSourceWebCorepagescrollingAxisScrollSnapOffsetscpp">trunk/Source/WebCore/page/scrolling/AxisScrollSnapOffsets.cpp</a></li>
<li><a href="#trunkSourceWebCoreplatformcocoaScrollControllermm">trunk/Source/WebCore/platform/cocoa/ScrollController.mm</a></li>
<li><a href="#trunkSourceWebCorerenderingRenderBoxcpp">trunk/Source/WebCore/rendering/RenderBox.cpp</a></li>
<li><a href="#trunkSourceWebCorerenderingRenderLayerModelObjectcpp">trunk/Source/WebCore/rendering/RenderLayerModelObject.cpp</a></li>
<li><a href="#trunkSourceWebCorerenderingRenderViewcpp">trunk/Source/WebCore/rendering/RenderView.cpp</a></li>
<li><a href="#trunkSourceWebCorerenderingRenderViewh">trunk/Source/WebCore/rendering/RenderView.h</a></li>
<li><a href="#trunkSourceWebCorerenderingstyleRenderStylecpp">trunk/Source/WebCore/rendering/style/RenderStyle.cpp</a></li>
<li><a href="#trunkSourceWebCorerenderingstyleRenderStyleh">trunk/Source/WebCore/rendering/style/RenderStyle.h</a></li>
<li><a href="#trunkSourceWebCorerenderingstyleRenderStyleConstantsh">trunk/Source/WebCore/rendering/style/RenderStyleConstants.h</a></li>
<li><a href="#trunkSourceWebCorerenderingstyleStyleRareNonInheritedDatacpp">trunk/Source/WebCore/rendering/style/StyleRareNonInheritedData.cpp</a></li>
<li><a href="#trunkSourceWebCorerenderingstyleStyleRareNonInheritedDatah">trunk/Source/WebCore/rendering/style/StyleRareNonInheritedData.h</a></li>
<li><a href="#trunkSourceWebCorerenderingstyleStyleScrollSnapPointscpp">trunk/Source/WebCore/rendering/style/StyleScrollSnapPoints.cpp</a></li>
<li><a href="#trunkSourceWebCorerenderingstyleStyleScrollSnapPointsh">trunk/Source/WebCore/rendering/style/StyleScrollSnapPoints.h</a></li>
<li><a href="#trunkSourceWebCoretestingInternalscpp">trunk/Source/WebCore/testing/Internals.cpp</a></li>
<li><a href="#trunkSourceWebKit2ChangeLog">trunk/Source/WebKit2/ChangeLog</a></li>
<li><a href="#trunkSourceWebKit2WebProcessPluginsPDFPDFPluginmm">trunk/Source/WebKit2/WebProcess/Plugins/PDF/PDFPlugin.mm</a></li>
</ul>

<h3>Added Paths</h3>
<ul>
<li><a href="#trunkLayoutTestscss3scrollsnapscrollsnap2dchangeaxistypeexpectedtxt">trunk/LayoutTests/css3/scroll-snap/scroll-snap-2d-change-axis-type-expected.txt</a></li>
<li><a href="#trunkLayoutTestscss3scrollsnapscrollsnap2dchangeaxistypehtml">trunk/LayoutTests/css3/scroll-snap/scroll-snap-2d-change-axis-type.html</a></li>
<li><a href="#trunkLayoutTestscss3scrollsnapscrollsnap2doffsetscomputedindependentlyexpectedtxt">trunk/LayoutTests/css3/scroll-snap/scroll-snap-2d-offsets-computed-independently-expected.txt</a></li>
<li><a href="#trunkLayoutTestscss3scrollsnapscrollsnap2doffsetscomputedindependentlyhtml">trunk/LayoutTests/css3/scroll-snap/scroll-snap-2d-offsets-computed-independently.html</a></li>
<li><a href="#trunkLayoutTestscss3scrollsnapscrollsnapchildrenwithscrollsnapmarginexpectedtxt">trunk/LayoutTests/css3/scroll-snap/scroll-snap-children-with-scroll-snap-margin-expected.txt</a></li>
<li><a href="#trunkLayoutTestscss3scrollsnapscrollsnapchildrenwithscrollsnapmarginhtml">trunk/LayoutTests/css3/scroll-snap/scroll-snap-children-with-scroll-snap-margin.html</a></li>
<li><a href="#trunkLayoutTestscss3scrollsnapscrollsnapchildrenwithtransformsexpectedtxt">trunk/LayoutTests/css3/scroll-snap/scroll-snap-children-with-transforms-expected.txt</a></li>
<li><a href="#trunkLayoutTestscss3scrollsnapscrollsnapchildrenwithtransformshtml">trunk/LayoutTests/css3/scroll-snap/scroll-snap-children-with-transforms.html</a></li>
<li><a href="#trunkLayoutTestscss3scrollsnapscrollsnappositionsexpectedtxt">trunk/LayoutTests/css3/scroll-snap/scroll-snap-positions-expected.txt</a></li>
<li><a href="#trunkLayoutTestscss3scrollsnapscrollsnappositionsmainframeexpectedtxt">trunk/LayoutTests/css3/scroll-snap/scroll-snap-positions-mainframe-expected.txt</a></li>
<li><a href="#trunkLayoutTestscss3scrollsnapscrollsnappositionsmainframehtml">trunk/LayoutTests/css3/scroll-snap/scroll-snap-positions-mainframe.html</a></li>
<li><a href="#trunkLayoutTestscss3scrollsnapscrollsnappositionsoverflowresizeexpectedtxt">trunk/LayoutTests/css3/scroll-snap/scroll-snap-positions-overflow-resize-expected.txt</a></li>
<li><a href="#trunkLayoutTestscss3scrollsnapscrollsnappositionsoverflowresizehtml">trunk/LayoutTests/css3/scroll-snap/scroll-snap-positions-overflow-resize.html</a></li>
<li><a href="#trunkLayoutTestscss3scrollsnapscrollsnappositionshtml">trunk/LayoutTests/css3/scroll-snap/scroll-snap-positions.html</a></li>
<li><a href="#trunkLayoutTestscss3scrollsnapscrollsnapstylechangedalignexpectedtxt">trunk/LayoutTests/css3/scroll-snap/scroll-snap-style-changed-align-expected.txt</a></li>
<li><a href="#trunkLayoutTestscss3scrollsnapscrollsnapstylechangedalignhtml">trunk/LayoutTests/css3/scroll-snap/scroll-snap-style-changed-align.html</a></li>
<li><a href="#trunkLayoutTestscss3scrollsnapscrollsnapwithscrollpaddingexpectedtxt">trunk/LayoutTests/css3/scroll-snap/scroll-snap-with-scroll-padding-expected.txt</a></li>
<li><a href="#trunkLayoutTestscss3scrollsnapscrollsnapwithscrollpaddinghtml">trunk/LayoutTests/css3/scroll-snap/scroll-snap-with-scroll-padding.html</a></li>
</ul>

<h3>Removed Paths</h3>
<ul>
<li><a href="#trunkLayoutTestscss3scrollsnapimpropersnappointscrashexpectedtxt">trunk/LayoutTests/css3/scroll-snap/improper-snap-points-crash-expected.txt</a></li>
<li><a href="#trunkLayoutTestscss3scrollsnapimpropersnappointscrashhtml">trunk/LayoutTests/css3/scroll-snap/improper-snap-points-crash.html</a></li>
<li><a href="#trunkLayoutTestscss3scrollsnapscrollsnapcoordinateexpectedtxt">trunk/LayoutTests/css3/scroll-snap/scroll-snap-coordinate-expected.txt</a></li>
<li><a href="#trunkLayoutTestscss3scrollsnapscrollsnapcoordinatemainframeexpectedtxt">trunk/LayoutTests/css3/scroll-snap/scroll-snap-coordinate-mainframe-expected.txt</a></li>
<li><a href="#trunkLayoutTestscss3scrollsnapscrollsnapcoordinatemainframehtml">trunk/LayoutTests/css3/scroll-snap/scroll-snap-coordinate-mainframe.html</a></li>
<li><a href="#trunkLayoutTestscss3scrollsnapscrollsnapcoordinateoverflowresizeexpectedtxt">trunk/LayoutTests/css3/scroll-snap/scroll-snap-coordinate-overflow-resize-expected.txt</a></li>
<li><a href="#trunkLayoutTestscss3scrollsnapscrollsnapcoordinateoverflowresizehtml">trunk/LayoutTests/css3/scroll-snap/scroll-snap-coordinate-overflow-resize.html</a></li>
<li><a href="#trunkLayoutTestscss3scrollsnapscrollsnapcoordinatehtml">trunk/LayoutTests/css3/scroll-snap/scroll-snap-coordinate.html</a></li>
<li><a href="#trunkLayoutTestscss3scrollsnapscrollsnapdesinationlockupexpectedtxt">trunk/LayoutTests/css3/scroll-snap/scroll-snap-desination-lock-up-expected.txt</a></li>
<li><a href="#trunkLayoutTestscss3scrollsnapscrollsnapdesinationlockuphtml">trunk/LayoutTests/css3/scroll-snap/scroll-snap-desination-lock-up.html</a></li>
<li><a href="#trunkLayoutTestscss3scrollsnapscrollsnapnegativerepeatexpectedtxt">trunk/LayoutTests/css3/scroll-snap/scroll-snap-negative-repeat-expected.txt</a></li>
<li><a href="#trunkLayoutTestscss3scrollsnapscrollsnapnegativerepeathtml">trunk/LayoutTests/css3/scroll-snap/scroll-snap-negative-repeat.html</a></li>
<li><a href="#trunkLayoutTestscss3scrollsnapscrollsnappositionvaluesexpectedtxt">trunk/LayoutTests/css3/scroll-snap/scroll-snap-position-values-expected.txt</a></li>
<li><a href="#trunkLayoutTestscss3scrollsnapscrollsnappositionvalueshtml">trunk/LayoutTests/css3/scroll-snap/scroll-snap-position-values.html</a></li>
<li><a href="#trunkLayoutTestscss3scrollsnapscrollsnapstylechangedcoordinatesexpectedtxt">trunk/LayoutTests/css3/scroll-snap/scroll-snap-style-changed-coordinates-expected.txt</a></li>
<li><a href="#trunkLayoutTestscss3scrollsnapscrollsnapstylechangedcoordinateshtml">trunk/LayoutTests/css3/scroll-snap/scroll-snap-style-changed-coordinates.html</a></li>
<li><a href="#trunkLayoutTestscss3scrollsnapscrollsnapstylechangedrepeatexpectedtxt">trunk/LayoutTests/css3/scroll-snap/scroll-snap-style-changed-repeat-expected.txt</a></li>
<li><a href="#trunkLayoutTestscss3scrollsnapscrollsnapstylechangedrepeathtml">trunk/LayoutTests/css3/scroll-snap/scroll-snap-style-changed-repeat.html</a></li>
<li><a href="#trunkLayoutTestscss3scrollsnapscrollsnapsubpixelrepeatexpectedtxt">trunk/LayoutTests/css3/scroll-snap/scroll-snap-subpixel-repeat-expected.txt</a></li>
<li><a href="#trunkLayoutTestscss3scrollsnapscrollsnapsubpixelrepeathtml">trunk/LayoutTests/css3/scroll-snap/scroll-snap-subpixel-repeat.html</a></li>
<li><a href="#trunkLayoutTeststileddrawingscrollingscrollsnapscrollsnapdestinationlockupexpectedtxt">trunk/LayoutTests/tiled-drawing/scrolling/scroll-snap/scroll-snap-destination-lock-up-expected.txt</a></li>
<li><a href="#trunkLayoutTeststileddrawingscrollingscrollsnapscrollsnapdestinationlockuphtml">trunk/LayoutTests/tiled-drawing/scrolling/scroll-snap/scroll-snap-destination-lock-up.html</a></li>
<li><a href="#trunkSourceWebCorecssLengthRepeath">trunk/Source/WebCore/css/LengthRepeat.h</a></li>
</ul>

</div>
<div id="patch">
<h3>Diff</h3>
<a id="trunkLayoutTestsChangeLog"></a>
<div class="modfile"><h4>Modified: trunk/LayoutTests/ChangeLog (210023 => 210024)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/ChangeLog        2016-12-20 18:26:10 UTC (rev 210023)
+++ trunk/LayoutTests/ChangeLog        2016-12-20 18:44:38 UTC (rev 210024)
</span><span class="lines">@@ -1,3 +1,163 @@
</span><ins>+2016-12-20  Wenson Hsieh  &lt;wenson_hsieh@apple.com&gt;
+
+        Implement the updated port/area-based Scroll Snap Module Level 1 Spec
+        https://bugs.webkit.org/show_bug.cgi?id=165317
+        &lt;rdar://problem/29490956&gt;
+
+        Reviewed by Dean Jackson.
+
+        Refactors layout tests to use the new scroll snapping properties, removing any tests that only made sense in the
+        context of the old version of scroll snapping and adding new ones to cover behaviors that the existing tests do
+        not verify. See per-method descriptions for more details. In most cases, the old way of specifying scroll
+        snapping via repeat(&lt;container width or length&gt;) or a coordinate at (0, 0) on each child has been replaced with
+        `scroll-snap-type: (x|y|both) mandatory;` on the container and `scroll-snap-align: start` on each child element.
+        If a test below does not have an accompanying description, then this is the only change applied to it, and the
+        behavior it is testing is still relevant in the new scroll snapping model.
+
+        * css3/scroll-snap/improper-snap-points-crash-expected.txt: Removed.
+        * css3/scroll-snap/improper-snap-points-crash.html: Removed.
+
+        This test is no longer valid in the new scroll snapping model, since there is no way to specify both repeating
+        points along an axis and child elements with scroll snap coordinates.
+
+        * css3/scroll-snap/nested-elements-expected.txt:
+        * css3/scroll-snap/nested-elements.html:
+        * css3/scroll-snap/resources/iframe-content.html:
+        * css3/scroll-snap/scroll-snap-2d-change-axis-type-expected.txt: Added.
+        * css3/scroll-snap/scroll-snap-2d-change-axis-type.html: Added.
+
+        New layout test to check that changing the scroll-snap-type from one to both axes updates the computed snap
+        offsets in the container to have offsets from both axes.
+
+        * css3/scroll-snap/scroll-snap-2d-offsets-computed-independently-expected.txt: Added.
+        * css3/scroll-snap/scroll-snap-2d-offsets-computed-independently.html: Added.
+
+        New layout test to check that snap offsets are computed independently on each axis. In a 3x3 grid of child
+        elements with the child elements along the diagonal having `scroll-snap-align`s of `end`, `center` and `start`
+        in order from top left to bottom right, we should observe the same effect as having each child emit snap
+        positions in both axes.
+
+        * css3/scroll-snap/scroll-snap-children-with-scroll-snap-margin-expected.txt: Added.
+        * css3/scroll-snap/scroll-snap-children-with-scroll-snap-margin.html: Added.
+
+        New layout test to check that specifying a `scroll-snap-margin` correctly insets the scroll snap area of a child
+        element, and that changing the `scroll-snap-margin` via script also changes the computed scroll snap offsets.
+
+        * css3/scroll-snap/scroll-snap-children-with-transforms-expected.txt: Added.
+        * css3/scroll-snap/scroll-snap-children-with-transforms.html: Added.
+
+        New layout test to check that when computing the scroll snap areas of child elements, we take transforms into
+        account and use the bounding box of the transformed border box of the child element. Also verifies that we apply
+        the scroll offset _after_ the transform, so that scrolling the container and then recomputing snap offsets when
+        child elements are transformed does not result in different snap offsets.
+
+        * css3/scroll-snap/scroll-snap-coordinate-expected.txt: Removed.
+        * css3/scroll-snap/scroll-snap-coordinate.html: Removed.
+
+        Renamed to scroll-snap-position.html, since the notion of scroll snap coordinates no longer exists.
+
+        * css3/scroll-snap/scroll-snap-desination-lock-up-expected.txt: Removed.
+        * css3/scroll-snap/scroll-snap-desination-lock-up.html: Removed.
+
+        This test is no longer relevant in the new scroll snapping model. This is because the logic for computing scroll
+        snap offsets in AxisScrollSnapOffsets no longer has an opportunity to loop infinitely while trying to fill a
+        scrollable axis with snap offsets, since repeating snap points have been removed.
+
+        * css3/scroll-snap/scroll-snap-elements-container-larger-than-children.html:
+        * css3/scroll-snap/scroll-snap-inherit-expected.txt:
+        * css3/scroll-snap/scroll-snap-inherit.html:
+
+        Updated to test the new scroll snap properties.
+
+        * css3/scroll-snap/scroll-snap-initial-expected.txt:
+        * css3/scroll-snap/scroll-snap-initial.html:
+
+        Updated to test the new scroll snap properties.
+
+        * css3/scroll-snap/scroll-snap-mismatch.html:
+        * css3/scroll-snap/scroll-snap-negative-repeat-expected.txt: Removed.
+        * css3/scroll-snap/scroll-snap-negative-repeat.html: Removed.
+
+        Removed, since negative repeating scroll snap offsets are (thankfully) no longer possible in the new scroll
+        snapping model.
+
+        * css3/scroll-snap/scroll-snap-offsets-expected.txt:
+        * css3/scroll-snap/scroll-snap-offsets.html:
+
+        Augmented to mix in various alignment values among the scroll snap child elements as well as various levels of
+        nesting.
+
+        * css3/scroll-snap/scroll-snap-position-values-expected.txt: Removed.
+        * css3/scroll-snap/scroll-snap-position-values.html: Removed.
+
+        The behaviors tested here are covered by other similar tests: scroll-snap-initial and scroll-snap-inherit.
+
+        * css3/scroll-snap/scroll-snap-positions-expected.txt: Added.
+        * css3/scroll-snap/scroll-snap-positions-mainframe-expected.txt: Renamed from LayoutTests/css3/scroll-snap/scroll-snap-coordinate-mainframe-expected.txt.
+        * css3/scroll-snap/scroll-snap-positions-mainframe.html: Renamed from LayoutTests/css3/scroll-snap/scroll-snap-coordinate-mainframe.html.
+        * css3/scroll-snap/scroll-snap-positions-overflow-resize-expected.txt: Renamed from LayoutTests/css3/scroll-snap/scroll-snap-coordinate-overflow-resize-expected.txt.
+        * css3/scroll-snap/scroll-snap-positions-overflow-resize.html: Renamed from LayoutTests/css3/scroll-snap/scroll-snap-coordinate-overflow-resize.html.
+        * css3/scroll-snap/scroll-snap-positions.html: Added.
+
+        Renamed these existing tests to not use the term `scroll-snap-coordinate`. The semantics of these tests are
+        still the same, only using different values of `scroll-snap-align` instead of `-webkit-scroll-snap-coordinate`.
+
+        * css3/scroll-snap/scroll-snap-property-computed-style-expected.txt:
+        * css3/scroll-snap/scroll-snap-property-computed-style.js:
+        * css3/scroll-snap/scroll-snap-property-parsing-expected.txt:
+        * css3/scroll-snap/scroll-snap-property-parsing.js:
+        * css3/scroll-snap/scroll-snap-style-changed-align-expected.txt: Added.
+        * css3/scroll-snap/scroll-snap-style-changed-align.html: Renamed from LayoutTests/css3/scroll-snap/scroll-snap-style-changed-coordinates.html.
+        * css3/scroll-snap/scroll-snap-style-changed-coordinates-expected.txt: Removed.
+        * css3/scroll-snap/scroll-snap-style-changed-repeat-expected.txt: Removed.
+        * css3/scroll-snap/scroll-snap-style-changed-repeat.html: Removed.
+
+        No longer relevant, since repeating scroll snap offsets are no longer in the spec.
+
+        * css3/scroll-snap/scroll-snap-subpixel-repeat-expected.txt: Removed.
+        * css3/scroll-snap/scroll-snap-subpixel-repeat.html: Removed.
+
+        No longer relevant, since repeating scroll snap offsets are no longer in the spec.
+
+        * css3/scroll-snap/scroll-snap-with-scroll-padding-expected.txt: Added.
+        * css3/scroll-snap/scroll-snap-with-scroll-padding.html: Added.
+
+        New layout test to check that specifying scroll padding on a scroll container correctly outsets the scroll snap
+        port, and that changing scroll padding via script also changes the computed snap offsets.
+
+        * platform/mac-wk2/TestExpectations:
+
+        Removed tiled-drawing/scrolling/latched-div-with-scroll-snap.html from the list of failing tests.
+
+        * tiled-drawing/scrolling/latched-div-with-scroll-snap-expected.txt:
+        * tiled-drawing/scrolling/latched-div-with-scroll-snap.html:
+
+        This test was failing 100% of the time due to the momentum portion of the scrolling phase being invoked after
+        scroll snapping has ended. This has been rewritten to perform the following steps:
+        1. Scroll the top div with momentum and verify that the scroll 'glided' to the red box.
+        2. Scroll the top div without momentum and verify that the scroll snaps back to the red box.
+        3. Repeat (1) and (2), but for the bottom div. The same thing should occur.
+
+        * tiled-drawing/scrolling/scroll-snap/resources/horizontal-mainframe.html:
+        * tiled-drawing/scrolling/scroll-snap/resources/vertical-mainframe.html:
+        * tiled-drawing/scrolling/scroll-snap/scroll-snap-destination-lock-up-expected.txt: Removed.
+        * tiled-drawing/scrolling/scroll-snap/scroll-snap-destination-lock-up.html: Removed.
+        * tiled-drawing/scrolling/scroll-snap/scroll-snap-mandatory-2d-overflow.html:
+        * tiled-drawing/scrolling/scroll-snap/scroll-snap-mandatory-borders.html:
+        * tiled-drawing/scrolling/scroll-snap/scroll-snap-mandatory-mainframe-horizontal.html:
+        * tiled-drawing/scrolling/scroll-snap/scroll-snap-mandatory-mainframe-slow-horizontal.html:
+        * tiled-drawing/scrolling/scroll-snap/scroll-snap-mandatory-mainframe-slow-vertical.html:
+        * tiled-drawing/scrolling/scroll-snap/scroll-snap-mandatory-mainframe-vertical-then-horizontal.html:
+        * tiled-drawing/scrolling/scroll-snap/scroll-snap-mandatory-mainframe-vertical.html:
+        * tiled-drawing/scrolling/scroll-snap/scroll-snap-mandatory-overflow-stateless.html:
+        * tiled-drawing/scrolling/scroll-snap/scroll-snap-mandatory-overflow.html:
+        * tiled-drawing/scrolling/scroll-snap/scroll-snap-mandatory-padding.html:
+        * tiled-drawing/scrolling/scroll-snap/scroll-snap-mandatory-rotated.html:
+        * tiled-drawing/scrolling/scroll-snap/scroll-snap-scrolling-jumps-to-top.html:
+
+        All of the tests here were updated to use the new scroll-snap-* properties instead of the old versions. The
+        semantics of these tests have not changed.
+
</ins><span class="cx"> 2016-12-20  Megan Gardner  &lt;megan_gardner@apple.com&gt;
</span><span class="cx"> 
</span><span class="cx">         Fix memory leak in malformed test
</span></span></pre></div>
<a id="trunkLayoutTestscss3scrollsnapimpropersnappointscrashexpectedtxt"></a>
<div class="delfile"><h4>Deleted: trunk/LayoutTests/css3/scroll-snap/improper-snap-points-crash-expected.txt (210023 => 210024)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/css3/scroll-snap/improper-snap-points-crash-expected.txt        2016-12-20 18:26:10 UTC (rev 210023)
+++ trunk/LayoutTests/css3/scroll-snap/improper-snap-points-crash-expected.txt        2016-12-20 18:44:38 UTC (rev 210024)
</span><span class="lines">@@ -1,15 +0,0 @@
</span><del>-The test passes if this page renders without crashing.
-
-
-
-PASS successfullyParsed is true
-
-TEST COMPLETE
-Scroll-snap offsets for horizontalTarget: horizontal = { 0, 100, 200, 300, 400, 500 }
-Scroll-snap offsets for first: 
-Scroll-snap offsets for second: 
-Scroll-snap offsets for third: 
-PASS successfullyParsed is true
-
-TEST COMPLETE
-
</del></span></pre></div>
<a id="trunkLayoutTestscss3scrollsnapimpropersnappointscrashhtml"></a>
<div class="delfile"><h4>Deleted: trunk/LayoutTests/css3/scroll-snap/improper-snap-points-crash.html (210023 => 210024)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/css3/scroll-snap/improper-snap-points-crash.html        2016-12-20 18:26:10 UTC (rev 210023)
+++ trunk/LayoutTests/css3/scroll-snap/improper-snap-points-crash.html        2016-12-20 18:44:38 UTC (rev 210024)
</span><span class="lines">@@ -1,80 +0,0 @@
</span><del>-&lt;!DOCTYPE html&gt;
-&lt;html&gt;
-    &lt;head&gt;
-        &lt;style&gt;
-            .horizontalGallery {
-                width: 100px;
-                height: 100px;
-                overflow-y: hidden;
-                overflow-x: auto;
-                margin: 2px;
-                -webkit-overflow-scrolling: touch;
-                -webkit-scroll-snap-points-x: repeat(100%);
-                -webkit-scroll-snap-type: mandatory;
-                -webkit-scroll-snap-coordinate: 50% 50%;
-            }
-            .horizontalGalleryDrawer {
-                width: 600px;
-                height: 100px;
-            }
-            .colorBox {
-                height: 100px;
-                width: 100px;
-                float: left;
-            }
-            #item0 { background-color: red; }
-            #item1 { background-color: green; }
-            #item2 { background-color: blue; }
-            #item3 { background-color: aqua; }
-            #item4 { background-color: yellow; }
-            #item5 { background-color: fuchsia; }
-        &lt;/style&gt;
-        &lt;script src=&quot;../../resources/js-test-pre.js&quot;&gt;&lt;/script&gt;
-        &lt;script&gt;
-        function reportResult(horizontalTargetID)
-        {
-            var horizontalTarget = document.getElementById(horizontalTargetID);
-
-            debug(&quot;Scroll-snap offsets for &quot; + horizontalTargetID + &quot;: &quot; + window.internals.scrollSnapOffsets(horizontalTarget));
-        }
-
-        function runTest()
-        {
-            reportResult('horizontalTarget');
-            reportResult('first');
-            reportResult('second');
-            reportResult('third');
-
-            finishJSTest();
-            testRunner.notifyDone();
-        }
-
-        function onLoad()
-        {
-            if (window.testRunner) {
-                window.jsTestIsAsync = true;
-                testRunner.dumpAsText();
-                testRunner.waitUntilDone();
-                setTimeout(runTest, 0);
-            }
-        }
-        &lt;/script&gt;
-    &lt;/head&gt;
-    &lt;body onload=&quot;onLoad();&quot;&gt;
-        &lt;div style=&quot;position: relative; width: 300px&quot;&gt;
-            &lt;div&gt;The test passes if this page renders without crashing.&lt;/div&gt;
-            &lt;div class=&quot;horizontalGallery&quot; id=&quot;horizontalTarget&quot;&gt;
-                &lt;div class=&quot;horizontalGalleryDrawer&quot;&gt;
-                    &lt;div id=&quot;item0&quot; class=&quot;colorBox&quot;&gt;&lt;/div&gt;
-                    &lt;div id=&quot;item1&quot; class=&quot;colorBox&quot;&gt;&lt;/div&gt;
-                    &lt;div id=&quot;item2&quot; class=&quot;colorBox&quot;&gt;&lt;/div&gt;
-                    &lt;br id=&quot;first&quot; /&gt;
-                    &lt;br class=&quot;horizontalGallery&quot; id=&quot;second&quot; /&gt;
-                &lt;/div&gt;
-            &lt;/div&gt;
-            &lt;br class=&quot;horizontalGallery&quot; id=&quot;third&quot; /&gt;
-            &lt;div id=&quot;console&quot;&gt;&lt;/div&gt;
-        &lt;/div&gt;
-        &lt;script src=&quot;../../resources/js-test-post.js&quot;&gt;&lt;/script&gt;
-    &lt;/body&gt;
-&lt;/html&gt;
</del></span></pre></div>
<a id="trunkLayoutTestscss3scrollsnapnestedelementsexpectedtxt"></a>
<div class="modfile"><h4>Modified: trunk/LayoutTests/css3/scroll-snap/nested-elements-expected.txt (210023 => 210024)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/css3/scroll-snap/nested-elements-expected.txt        2016-12-20 18:26:10 UTC (rev 210023)
+++ trunk/LayoutTests/css3/scroll-snap/nested-elements-expected.txt        2016-12-20 18:44:38 UTC (rev 210024)
</span><span class="lines">@@ -1,7 +1,7 @@
</span><span class="cx"> PASS successfullyParsed is true
</span><span class="cx"> 
</span><span class="cx"> TEST COMPLETE
</span><del>-Scroll-snap offsets for 'container': vertical = { 0, 101, 218, 335, 452, 569, 686, 803, 920, 1037, 1154, 1271, 1388, 1505, 1622, 1739, 1856, 1973, 2090, 2207, 4938 }
</del><ins>+Scroll-snap offsets for 'container': vertical = { 0, 100, 215, 330, 445, 560, 675, 790, 905, 1020, 1135, 1250, 1365, 1480, 1595, 1710, 1825, 1940, 2055, 2170, 4900 }
</ins><span class="cx"> PASS Scroll-snap offsets for 'invalidContainer': UNDEFINED
</span><span class="cx"> PASS successfullyParsed is true
</span><span class="cx"> 
</span></span></pre></div>
<a id="trunkLayoutTestscss3scrollsnapnestedelementshtml"></a>
<div class="modfile"><h4>Modified: trunk/LayoutTests/css3/scroll-snap/nested-elements.html (210023 => 210024)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/css3/scroll-snap/nested-elements.html        2016-12-20 18:26:10 UTC (rev 210023)
+++ trunk/LayoutTests/css3/scroll-snap/nested-elements.html        2016-12-20 18:44:38 UTC (rev 210024)
</span><span class="lines">@@ -6,14 +6,12 @@
</span><span class="cx">         .scrollable {
</span><span class="cx">             overflow: scroll;
</span><span class="cx">             -webkit-overflow-scrolling: touch;
</span><del>-            border: 1px dashed black;
</del><span class="cx">             height: 300px;
</span><span class="cx">             margin: 0 10px;
</span><span class="cx">         }
</span><span class="cx">     
</span><span class="cx">         .center-snap-receiver {
</span><del>-            -webkit-scroll-snap-type: mandatory;
-            -webkit-scroll-snap-destination: 0 0;
</del><ins>+            scroll-snap-type: y mandatory;
</ins><span class="cx">         }
</span><span class="cx">     
</span><span class="cx">         .snap-point {
</span><span class="lines">@@ -20,8 +18,8 @@
</span><span class="cx">             margin-top: 100px;
</span><span class="cx">             width: 15px;
</span><span class="cx">             height: 15px;
</span><del>-            border: 1px solid black;
-            -webkit-scroll-snap-coordinate: 0 0px;
</del><ins>+            background-color: blue;
+            scroll-snap-align: start;
</ins><span class="cx">         }
</span><span class="cx">     
</span><span class="cx">         .snap-point::after {
</span><span class="lines">@@ -32,11 +30,12 @@
</span><span class="cx">     
</span><span class="cx">         .nested &gt; .snap-point {
</span><span class="cx">             margin-left: 50px;
</span><del>-            border: 1px solid red;
</del><ins>+            background-color: red;
</ins><span class="cx">         }
</span><span class="cx">         .nested &gt; .nested &gt; .snap-point {
</span><span class="cx">             margin-left: 100px;
</span><del>-            border: 1px solid blue;
</del><ins>+            background-color: blue;
+            opacity: 0.1;
</ins><span class="cx">         }
</span><span class="cx">     
</span><span class="cx">         .large-content {
</span><span class="lines">@@ -50,7 +49,6 @@
</span><span class="cx">         }
</span><span class="cx"> 
</span><span class="cx">         .invalidContainer {
</span><del>-            border: 1px dashed black;
</del><span class="cx">             height: 300px;
</span><span class="cx">             margin: 0 10px;
</span><span class="cx">             opacity: 0.5;
</span></span></pre></div>
<a id="trunkLayoutTestscss3scrollsnapresourcesiframecontenthtml"></a>
<div class="modfile"><h4>Modified: trunk/LayoutTests/css3/scroll-snap/resources/iframe-content.html (210023 => 210024)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/css3/scroll-snap/resources/iframe-content.html        2016-12-20 18:26:10 UTC (rev 210023)
+++ trunk/LayoutTests/css3/scroll-snap/resources/iframe-content.html        2016-12-20 18:44:38 UTC (rev 210024)
</span><span class="lines">@@ -16,13 +16,11 @@
</span><span class="cx">                 height: 50px;
</span><span class="cx">                 width: 400px;
</span><span class="cx">                 float: left;
</span><ins>+                scroll-snap-align: start;
</ins><span class="cx">             }
</span><span class="cx"> 
</span><span class="cx">             .noInitial {
</span><del>-                -webkit-scroll-snap-type: mandatory;
-                -webkit-scroll-snap-points-x: repeat(100%);
-                -webkit-scroll-snap-points-y: repeat(100%);
-                -webkit-scroll-snap-coordinate: left top;
</del><ins>+                scroll-snap-type: x mandatory;
</ins><span class="cx">             }
</span><span class="cx"> 
</span><span class="cx">             #item0 { background-color: red; }
</span><span class="lines">@@ -38,7 +36,7 @@
</span><span class="cx">     &lt;/head&gt;
</span><span class="cx">     &lt;body&gt;
</span><span class="cx">         &lt;div style=&quot;width: 400px&quot;&gt;
</span><del>-            &lt;div id=&quot;noInitial&quot; class=&quot;horizontalGallery noInitial&quot; style=&quot;-webkit-scroll-snap-destination: right bottom; -webkit-scroll-snap-coordinate: left top;&quot;&gt;
</del><ins>+            &lt;div id=&quot;noInitial&quot; class=&quot;horizontalGallery noInitial&quot;&gt;
</ins><span class="cx">                 &lt;div class=&quot;horizontalGalleryDrawer&quot;&gt;
</span><span class="cx">                     &lt;div id=&quot;item0&quot; class=&quot;colorBox&quot;&gt;&lt;/div&gt;
</span><span class="cx">                     &lt;div id=&quot;item1&quot; class=&quot;colorBox&quot;&gt;&lt;/div&gt;
</span><span class="lines">@@ -68,12 +66,11 @@
</span><span class="cx">         }
</span><span class="cx"> 
</span><span class="cx">         var noInitial = document.getElementById('noInitial');
</span><del>-        top.succeeded = shouldMatch(&quot;window.getComputedStyle(noInitial).getPropertyValue('-webkit-scroll-snap-type')&quot;, &quot;mandatory&quot;);
-        top.succeeded = top.succeeded &amp;&amp; shouldMatch(&quot;window.getComputedStyle(noInitial).getPropertyValue('-webkit-scroll-snap-points-x')&quot;, &quot;repeat(100%)&quot;);
-        top.succeeded = top.succeeded &amp;&amp; shouldMatch(&quot;window.getComputedStyle(noInitial).getPropertyValue('-webkit-scroll-snap-points-y')&quot;, &quot;repeat(100%)&quot;);
-        top.succeeded = top.succeeded &amp;&amp; shouldMatch(&quot;noInitial.style['-webkit-scroll-snap-coordinate']&quot;, &quot;0% 0%&quot;);
-        top.succeeded = top.succeeded &amp;&amp; shouldMatch(&quot;window.getComputedStyle(noInitial).getPropertyValue('-webkit-scroll-snap-coordinate')&quot;, &quot;0% 0%&quot;);
-
</del><ins>+        top.succeeded = shouldMatch(&quot;window.getComputedStyle(noInitial).getPropertyValue('scroll-snap-type')&quot;, &quot;both mandatory&quot;);
+        document.querySelectorAll(&quot;.colorBox&quot;).forEach(colorBox =&gt; {
+            window.colorBox = colorBox;
+            top.succeeded = shouldMatch(&quot;getComputedStyle(colorBox).getPropertyValue('scroll-snap-align')&quot;, &quot;start start&quot;);
+        });
</ins><span class="cx">         if (top.succeeded)
</span><span class="cx">             top.debug(&quot;iframe processed all tests successfully.&quot;);
</span><span class="cx">         else
</span></span></pre></div>
<a id="trunkLayoutTestscss3scrollsnapscrollsnap2dchangeaxistypeexpectedtxt"></a>
<div class="addfile"><h4>Added: trunk/LayoutTests/css3/scroll-snap/scroll-snap-2d-change-axis-type-expected.txt (0 => 210024)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/css3/scroll-snap/scroll-snap-2d-change-axis-type-expected.txt                                (rev 0)
+++ trunk/LayoutTests/css3/scroll-snap/scroll-snap-2d-change-axis-type-expected.txt        2016-12-20 18:44:38 UTC (rev 210024)
</span><span class="lines">@@ -0,0 +1,4 @@
</span><ins>+
+
+The scroll offsets are: horizontal = { 0, 400, 800 }, vertical = { 0, 400, 800 }
+
</ins></span></pre></div>
<a id="trunkLayoutTestscss3scrollsnapscrollsnap2dchangeaxistypehtml"></a>
<div class="addfile"><h4>Added: trunk/LayoutTests/css3/scroll-snap/scroll-snap-2d-change-axis-type.html (0 => 210024)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/css3/scroll-snap/scroll-snap-2d-change-axis-type.html                                (rev 0)
+++ trunk/LayoutTests/css3/scroll-snap/scroll-snap-2d-change-axis-type.html        2016-12-20 18:44:38 UTC (rev 210024)
</span><span class="lines">@@ -0,0 +1,77 @@
</span><ins>+&lt;!DOCTYPE HTML&gt;
+&lt;html&gt;
+    &lt;head&gt;
+        &lt;style&gt;
+            #container {
+                width: 400px;
+                height: 400px;
+                overflow: auto;
+                scroll-snap-type: x mandatory;
+                position: absolute;
+                left: 0px;
+                top: 0px;
+                margin: 0;
+                padding: 0;
+            }
+
+            ::-webkit-scrollbar {
+                display: none;
+            }
+
+            .cell {
+                width: 400px;
+                height: 400px;
+                margin: 0px;
+                padding: 0px;
+                position: absolute;
+                scroll-snap-align: center;
+            }
+
+            .green {
+                background-color: green;
+            }
+
+            .red {
+                background-color: red;
+            }
+        &lt;/style&gt;
+        &lt;script src=&quot;../../../resources/js-test.js&quot;&gt;&lt;/script&gt;
+        &lt;script&gt;
+        let write = s =&gt; output.innerHTML += s + &quot;&lt;br&gt;&quot;;
+        if (window.testRunner) {
+            testRunner.dumpAsText();
+            testRunner.waitUntilDone();
+        }
+
+        function run() {
+            if (!window.testRunner || !window.internals) {
+                write(`To manually test, verify that scrolling in the container snaps so that each colored box can fill
+                    the scroll container.`);
+                return;
+            }
+
+            setTimeout(() =&gt; {
+                write(`The scroll offsets are: ${internals.scrollSnapOffsets(container)}`);
+                testRunner.notifyDone();
+            }, 1000);
+        }
+        &lt;/script&gt;
+    &lt;/head&gt;
+    &lt;body onload=run()&gt;
+        &lt;div id=&quot;container&quot;&gt;
+            &lt;div style=&quot;top: 0px; left: 0px;&quot; class=&quot;cell green&quot;&gt;&lt;/div&gt;
+            &lt;div style=&quot;top: 0px; left: 400px;&quot; class=&quot;cell red&quot;&gt;&lt;/div&gt;
+            &lt;div style=&quot;top: 0px; left: 800px;&quot; class=&quot;cell green&quot;&gt;&lt;/div&gt;&lt;br/&gt;
+            &lt;div style=&quot;top: 400px; left: 0px;&quot; class=&quot;cell red&quot;&gt;&lt;/div&gt;
+            &lt;div style=&quot;top: 400px; left: 400px;&quot; class=&quot;cell green&quot;&gt;&lt;/div&gt;
+            &lt;div style=&quot;top: 400px; left: 800px;&quot; class=&quot;cell red&quot;&gt;&lt;/div&gt;&lt;br/&gt;
+            &lt;div style=&quot;top: 800px; left: 0px;&quot; class=&quot;cell green&quot;&gt;&lt;/div&gt;
+            &lt;div style=&quot;top: 800px; left: 400px;&quot; class=&quot;cell red&quot;&gt;&lt;/div&gt;
+            &lt;div style=&quot;top: 800px; left: 800px;&quot; class=&quot;cell green&quot;&gt;&lt;/div&gt;
+        &lt;/div&gt;
+        &lt;script&gt;
+            container.style.scrollSnapType = &quot;both mandatory&quot;;
+        &lt;/script&gt;
+        &lt;div id=&quot;output&quot;&gt;&lt;/div&gt;
+    &lt;/body&gt;
+&lt;/html&gt;
</ins></span></pre></div>
<a id="trunkLayoutTestscss3scrollsnapscrollsnap2doffsetscomputedindependentlyexpectedtxt"></a>
<div class="addfile"><h4>Added: trunk/LayoutTests/css3/scroll-snap/scroll-snap-2d-offsets-computed-independently-expected.txt (0 => 210024)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/css3/scroll-snap/scroll-snap-2d-offsets-computed-independently-expected.txt                                (rev 0)
+++ trunk/LayoutTests/css3/scroll-snap/scroll-snap-2d-offsets-computed-independently-expected.txt        2016-12-20 18:44:38 UTC (rev 210024)
</span><span class="lines">@@ -0,0 +1,4 @@
</span><ins>+
+
+The scroll offsets are: horizontal = { 0, 400, 800 }, vertical = { 0, 400, 800 }
+
</ins></span></pre></div>
<a id="trunkLayoutTestscss3scrollsnapscrollsnap2doffsetscomputedindependentlyhtml"></a>
<div class="addfile"><h4>Added: trunk/LayoutTests/css3/scroll-snap/scroll-snap-2d-offsets-computed-independently.html (0 => 210024)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/css3/scroll-snap/scroll-snap-2d-offsets-computed-independently.html                                (rev 0)
+++ trunk/LayoutTests/css3/scroll-snap/scroll-snap-2d-offsets-computed-independently.html        2016-12-20 18:44:38 UTC (rev 210024)
</span><span class="lines">@@ -0,0 +1,85 @@
</span><ins>+&lt;!DOCTYPE HTML&gt;
+&lt;html&gt;
+    &lt;head&gt;
+        &lt;style&gt;
+            #container {
+                width: 400px;
+                height: 400px;
+                overflow: auto;
+                scroll-snap-type: both mandatory;
+                position: absolute;
+                left: 0px;
+                top: 0px;
+                margin: 0;
+                padding: 0;
+            }
+
+            ::-webkit-scrollbar {
+                display: none;
+            }
+
+            .cell {
+                width: 400px;
+                height: 400px;
+                margin: 0px;
+                padding: 0px;
+                position: absolute;
+            }
+
+            #top-left {
+                scroll-snap-align: end;
+            }
+
+            #middle {
+                scroll-snap-align: center;
+            }
+
+            #bottom-right {
+                scroll-snap-align: start;
+            }
+
+            .green {
+                background-color: green;
+            }
+
+            .red {
+                background-color: red;
+            }
+        &lt;/style&gt;
+        &lt;script src=&quot;../../../resources/js-test.js&quot;&gt;&lt;/script&gt;
+        &lt;script&gt;
+        let write = s =&gt; output.innerHTML += s + &quot;&lt;br&gt;&quot;;
+        if (window.testRunner) {
+            testRunner.dumpAsText();
+            testRunner.waitUntilDone();
+        }
+
+        function run() {
+            if (!window.testRunner || !window.internals) {
+                write(`To manually test, verify that scrolling in the container snaps so that each colored box can fill
+                    the scroll container.`);
+                return;
+            }
+
+            setTimeout(() =&gt; {
+                write(`The scroll offsets are: ${internals.scrollSnapOffsets(container)}`);
+                testRunner.notifyDone();
+            }, 1000);
+        }
+        &lt;/script&gt;
+    &lt;/head&gt;
+    &lt;body onload=run()&gt;
+        &lt;div id=&quot;container&quot;&gt;
+            &lt;div style=&quot;top: 0px; left: 0px;&quot; class=&quot;cell green&quot; id=&quot;top-left&quot;&gt;&lt;/div&gt;
+            &lt;div style=&quot;top: 0px; left: 400px;&quot; class=&quot;cell red&quot;&gt;&lt;/div&gt;
+            &lt;div style=&quot;top: 0px; left: 800px;&quot; class=&quot;cell green&quot;&gt;&lt;/div&gt;&lt;br/&gt;
+            &lt;div style=&quot;top: 400px; left: 0px;&quot; class=&quot;cell red&quot;&gt;&lt;/div&gt;
+            &lt;div style=&quot;top: 400px; left: 400px;&quot; class=&quot;cell green&quot; id=&quot;middle&quot;&gt;&lt;/div&gt;
+            &lt;div style=&quot;top: 400px; left: 800px;&quot; class=&quot;cell red&quot;&gt;&lt;/div&gt;&lt;br/&gt;
+            &lt;div style=&quot;top: 800px; left: 0px;&quot; class=&quot;cell green&quot;&gt;&lt;/div&gt;
+            &lt;div style=&quot;top: 800px; left: 400px;&quot; class=&quot;cell red&quot;&gt;&lt;/div&gt;
+            &lt;div style=&quot;top: 800px; left: 800px;&quot; class=&quot;cell green&quot; id=&quot;bottom-right&quot;&gt;&lt;/div&gt;
+        &lt;/div&gt;
+        &lt;div id=&quot;output&quot;&gt;&lt;/div&gt;
+    &lt;/body&gt;
+&lt;/html&gt;
</ins></span></pre></div>
<a id="trunkLayoutTestscss3scrollsnapscrollsnapchildrenwithscrollsnapmarginexpectedtxt"></a>
<div class="addfile"><h4>Added: trunk/LayoutTests/css3/scroll-snap/scroll-snap-children-with-scroll-snap-margin-expected.txt (0 => 210024)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/css3/scroll-snap/scroll-snap-children-with-scroll-snap-margin-expected.txt                                (rev 0)
+++ trunk/LayoutTests/css3/scroll-snap/scroll-snap-children-with-scroll-snap-margin-expected.txt        2016-12-20 18:44:38 UTC (rev 210024)
</span><span class="lines">@@ -0,0 +1,5 @@
</span><ins>+Scroll-snap offsets are: vertical = { 0, 700, 1410, 2120, 2830, 3540, 3600 }
+After resizing, the offsets should not have changed: vertical = { 0, 700, 1410, 2120, 2830, 3540, 3600 }
+After deflating scroll-snap-margin by 10px, the offsets are: vertical = { 0, 710, 1420, 2130, 2840, 3550, 3600 }
+After resizing, the offsets should not have changed: vertical = { 0, 710, 1420, 2130, 2840, 3550, 3600 }
+
</ins></span></pre></div>
<a id="trunkLayoutTestscss3scrollsnapscrollsnapchildrenwithscrollsnapmarginhtml"></a>
<div class="addfile"><h4>Added: trunk/LayoutTests/css3/scroll-snap/scroll-snap-children-with-scroll-snap-margin.html (0 => 210024)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/css3/scroll-snap/scroll-snap-children-with-scroll-snap-margin.html                                (rev 0)
+++ trunk/LayoutTests/css3/scroll-snap/scroll-snap-children-with-scroll-snap-margin.html        2016-12-20 18:44:38 UTC (rev 210024)
</span><span class="lines">@@ -0,0 +1,97 @@
</span><ins>+&lt;!DOCTYPE html&gt;
+&lt;html&gt;
+&lt;head&gt;
+    &lt;style&gt;
+        #container {
+            position: absolute;
+            width: 400px;
+            height: 400px;
+            top: 0;
+            left: 0;
+            scroll-snap-type: y mandatory;
+            overflow-x: hidden;
+            overflow-y: scroll;
+            border: 1px black dashed;
+            opacity: 0.75;
+            background-color: #EEE;
+        }
+
+        .child {
+            width: 400px;
+            height: 400px;
+            scroll-snap-align: start;
+            position: absolute;
+            left: 0;
+        }
+    &lt;/style&gt;
+    &lt;script&gt;
+    let write = s =&gt; output.innerHTML += s + &quot;&lt;br&gt;&quot;;
+    if (window.testRunner) {
+        testRunner.dumpAsText();
+        testRunner.waitUntilDone();
+    }
+
+    function deflateScrollSnapMargins(amount) {
+        for (let child of document.querySelectorAll(&quot;.child&quot;)) {
+            let currentMargin = parseInt(child.style.scrollSnapMargin.replace(/px/, &quot;&quot;));
+            child.style.scrollSnapMargin = `${currentMargin - amount}px`;
+        }
+    }
+
+    function zeroDelayTimeout(action) {
+        return new Promise((resolve) =&gt; {
+            setTimeout(() =&gt; {
+                action();
+                resolve();
+            });
+        });
+    }
+
+    function run()
+    {
+        if (!window.testRunner || !window.internals) {
+            write(`To manually test, verify that scrolling snaps somewhere above each colored box. As you scroll further
+                down, the distance between the snapped position and the top of the colored box should increase.`);
+            return;
+        }
+
+        zeroDelayTimeout(() =&gt; {
+            write(&quot;Scroll-snap offsets are: &quot; + internals.scrollSnapOffsets(container));
+            container.scrollTop += 100;
+            container.style.width = &quot;500px&quot;;
+        })
+        .then(() =&gt; {
+            zeroDelayTimeout(() =&gt; {
+                write(&quot;After resizing, the offsets should not have changed: &quot; + internals.scrollSnapOffsets(container));
+                container.scrollTop += 100;
+                deflateScrollSnapMargins(10);
+            });
+        })
+        .then(() =&gt; {
+            zeroDelayTimeout(() =&gt; {
+                write(&quot;After deflating scroll-snap-margin by 10px, the offsets are: &quot; + internals.scrollSnapOffsets(container));
+                container.scrollTop += 100;
+                container.style.width = &quot;400px&quot;;
+            });
+        })
+        .then(() =&gt; {
+            zeroDelayTimeout(() =&gt; {
+                write(&quot;After resizing, the offsets should not have changed: &quot; + internals.scrollSnapOffsets(container));
+                testRunner.notifyDone();
+            });
+        });
+    }
+    &lt;/script&gt;
+&lt;/head&gt;
+&lt;body onload=run()&gt;
+    &lt;div id=&quot;container&quot;&gt;
+        &lt;div class=&quot;child&quot; style=&quot;background-color: red;     top: 0px;    scroll-snap-margin: 10px;&quot;&gt;&lt;/div&gt;
+        &lt;div class=&quot;child&quot; style=&quot;background-color: green;   top: 720px;  scroll-snap-margin: 20px;&quot;&gt;&lt;/div&gt;
+        &lt;div class=&quot;child&quot; style=&quot;background-color: blue;    top: 1440px; scroll-snap-margin: 30px;&quot;&gt;&lt;/div&gt;
+        &lt;div class=&quot;child&quot; style=&quot;background-color: aqua;    top: 2160px; scroll-snap-margin: 40px;&quot;&gt;&lt;/div&gt;
+        &lt;div class=&quot;child&quot; style=&quot;background-color: yellow;  top: 2880px; scroll-snap-margin: 50px;&quot;&gt;&lt;/div&gt;
+        &lt;div class=&quot;child&quot; style=&quot;background-color: fuchsia; top: 3600px; scroll-snap-margin: 60px;&quot;&gt;&lt;/div&gt;
+    &lt;/div&gt;
+    &lt;div id=&quot;output&quot;&gt;&lt;/div&gt;
+&lt;/body&gt;
+&lt;/html&gt;
</ins></span></pre></div>
<a id="trunkLayoutTestscss3scrollsnapscrollsnapchildrenwithtransformsexpectedtxt"></a>
<div class="addfile"><h4>Added: trunk/LayoutTests/css3/scroll-snap/scroll-snap-children-with-transforms-expected.txt (0 => 210024)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/css3/scroll-snap/scroll-snap-children-with-transforms-expected.txt                                (rev 0)
+++ trunk/LayoutTests/css3/scroll-snap/scroll-snap-children-with-transforms-expected.txt        2016-12-20 18:44:38 UTC (rev 210024)
</span><span class="lines">@@ -0,0 +1,5 @@
</span><ins>+Scroll-snap offsets are: vertical = { 0, 82, 751, 1456, 2233, 2880, 3673 }
+After resizing, the offsets should not have changed: vertical = { 0, 82, 751, 1456, 2233, 2880, 3673 }
+After changing alignment to `start`, the offsets are: vertical = { 0, 688, 1423, 2086, 2880, 3526, 3673 }
+After resizing, the offsets should not have changed: vertical = { 0, 688, 1423, 2086, 2880, 3526, 3673 }
+
</ins></span></pre></div>
<a id="trunkLayoutTestscss3scrollsnapscrollsnapchildrenwithtransformshtml"></a>
<div class="addfile"><h4>Added: trunk/LayoutTests/css3/scroll-snap/scroll-snap-children-with-transforms.html (0 => 210024)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/css3/scroll-snap/scroll-snap-children-with-transforms.html                                (rev 0)
+++ trunk/LayoutTests/css3/scroll-snap/scroll-snap-children-with-transforms.html        2016-12-20 18:44:38 UTC (rev 210024)
</span><span class="lines">@@ -0,0 +1,95 @@
</span><ins>+&lt;!DOCTYPE html&gt;
+&lt;html&gt;
+&lt;head&gt;
+    &lt;style&gt;
+        #container {
+            position: absolute;
+            width: 400px;
+            height: 400px;
+            top: 0;
+            left: 0;
+            scroll-snap-type: y mandatory;
+            overflow-x: hidden;
+            overflow-y: scroll;
+            border: 1px black dashed;
+            opacity: 0.75;
+            background-color: #EEE;
+        }
+
+        .child {
+            width: 400px;
+            height: 400px;
+            scroll-snap-align: end;
+            position: absolute;
+            left: 0;
+        }
+    &lt;/style&gt;
+    &lt;script&gt;
+    let write = s =&gt; output.innerHTML += s + &quot;&lt;br&gt;&quot;;
+    if (window.testRunner) {
+        testRunner.dumpAsText();
+        testRunner.waitUntilDone();
+    }
+
+    function zeroDelayTimeout(action) {
+        return new Promise((resolve) =&gt; {
+            setTimeout(() =&gt; {
+                action();
+                resolve();
+            });
+        });
+    }
+
+    function setScrollSnapAlign(align) {
+        for (let child of document.querySelectorAll(&quot;.child&quot;))
+            child.style.scrollSnapAlign = align;
+    }
+
+    function run()
+    {
+        if (!window.testRunner || !window.internals) {
+            write(`To manually test, verify that scrolling in the container snaps such that the bottom tip of each
+                colored box aligns with the bottom of the scrolling container.`);
+            return;
+        }
+
+        zeroDelayTimeout(() =&gt; {
+            write(&quot;Scroll-snap offsets are: &quot; + internals.scrollSnapOffsets(container));
+            container.scrollTop += 100;
+            container.style.width = &quot;500px&quot;;
+        })
+        .then(() =&gt; {
+            zeroDelayTimeout(() =&gt; {
+                write(&quot;After resizing, the offsets should not have changed: &quot; + internals.scrollSnapOffsets(container));
+                container.scrollTop += 100;
+                setScrollSnapAlign(&quot;start&quot;);
+            });
+        })
+        .then(() =&gt; {
+            zeroDelayTimeout(() =&gt; {
+                write(&quot;After changing alignment to `start`, the offsets are: &quot; + internals.scrollSnapOffsets(container));
+                container.scrollTop += 100;
+                container.style.width = &quot;400px&quot;;
+            });
+        })
+        .then(() =&gt; {
+            zeroDelayTimeout(() =&gt; {
+                write(&quot;After resizing, the offsets should not have changed: &quot; + internals.scrollSnapOffsets(container));
+                testRunner.notifyDone();
+            });
+        });
+    }
+    &lt;/script&gt;
+&lt;/head&gt;
+&lt;body onload=run()&gt;
+    &lt;div id=&quot;container&quot;&gt;
+        &lt;div class=&quot;child&quot; style=&quot;background-color: red;     top: 0px;    transform: rotate(45deg);&quot;&gt;&lt;/div&gt;
+        &lt;div class=&quot;child&quot; style=&quot;background-color: green;   top: 720px;  transform: rotate(-10deg);&quot;&gt;&lt;/div&gt;
+        &lt;div class=&quot;child&quot; style=&quot;background-color: blue;    top: 1440px; transform: rotate(5deg);&quot;&gt;&lt;/div&gt;
+        &lt;div class=&quot;child&quot; style=&quot;background-color: aqua;    top: 2160px; transform: rotate(60deg);&quot;&gt;&lt;/div&gt;
+        &lt;div class=&quot;child&quot; style=&quot;background-color: yellow;  top: 2880px; transform: rotate(-90deg);&quot;&gt;&lt;/div&gt;
+        &lt;div class=&quot;child&quot; style=&quot;background-color: fuchsia; top: 3600px; transform: rotate(-30deg);&quot;&gt;&lt;/div&gt;
+    &lt;/div&gt;
+    &lt;div id=&quot;output&quot;&gt;&lt;/div&gt;
+&lt;/body&gt;
+&lt;/html&gt;
</ins></span></pre></div>
<a id="trunkLayoutTestscss3scrollsnapscrollsnapcoordinateexpectedtxt"></a>
<div class="delfile"><h4>Deleted: trunk/LayoutTests/css3/scroll-snap/scroll-snap-coordinate-expected.txt (210023 => 210024)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/css3/scroll-snap/scroll-snap-coordinate-expected.txt        2016-12-20 18:26:10 UTC (rev 210023)
+++ trunk/LayoutTests/css3/scroll-snap/scroll-snap-coordinate-expected.txt        2016-12-20 18:44:38 UTC (rev 210024)
</span><span class="lines">@@ -1,8 +0,0 @@
</span><del>-PASS successfullyParsed is true
-
-TEST COMPLETE
-Scroll-snap offsets for 'container': vertical = { 0, 101, 219, 339, 458, 575, 592, 692, 812, 931, 1049, 1167, 1285, 1402, 1520, 1638, 1756, 1876, 1995, 2012, 2112, 2232, 4964 }
-PASS successfullyParsed is true
-
-TEST COMPLETE
-
</del></span></pre></div>
<a id="trunkLayoutTestscss3scrollsnapscrollsnapcoordinatemainframeexpectedtxt"></a>
<div class="delfile"><h4>Deleted: trunk/LayoutTests/css3/scroll-snap/scroll-snap-coordinate-mainframe-expected.txt (210023 => 210024)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/css3/scroll-snap/scroll-snap-coordinate-mainframe-expected.txt        2016-12-20 18:26:10 UTC (rev 210023)
+++ trunk/LayoutTests/css3/scroll-snap/scroll-snap-coordinate-mainframe-expected.txt        2016-12-20 18:44:38 UTC (rev 210024)
</span><span class="lines">@@ -1,8 +0,0 @@
</span><del>-PASS successfullyParsed is true
-
-TEST COMPLETE
-Scroll-snap offsets: vertical = { 0, 600, 1200, 1800, 2400, 3000 }
-PASS successfullyParsed is true
-
-TEST COMPLETE
-
</del></span></pre></div>
<a id="trunkLayoutTestscss3scrollsnapscrollsnapcoordinatemainframehtml"></a>
<div class="delfile"><h4>Deleted: trunk/LayoutTests/css3/scroll-snap/scroll-snap-coordinate-mainframe.html (210023 => 210024)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/css3/scroll-snap/scroll-snap-coordinate-mainframe.html        2016-12-20 18:26:10 UTC (rev 210023)
+++ trunk/LayoutTests/css3/scroll-snap/scroll-snap-coordinate-mainframe.html        2016-12-20 18:44:38 UTC (rev 210024)
</span><span class="lines">@@ -1,47 +0,0 @@
</span><del>-&lt;html&gt;
-
-&lt;head&gt;
-    &lt;style&gt;
-        body {
-            margin: 0;
-            -webkit-scroll-snap-type: mandatory;
-        }
-
-        .vertical {
-            width: 100%;
-            height: 600px;
-            -webkit-scroll-snap-coordinate: 0px 0px;
-        }
-    &lt;/style&gt;
-
-    &lt;script src=&quot;../../resources/js-test-pre.js&quot;&gt;&lt;/script&gt;
-    &lt;script&gt;
-    function runTest()
-    {
-        debug(&quot;Scroll-snap offsets: &quot; + window.internals.scrollSnapOffsets(document.body));
-        finishJSTest();
-    }
-
-    function setup()
-    {
-        if (window.testRunner) {
-            window.jsTestIsAsync = true;
-            testRunner.dumpAsText();
-            testRunner.waitUntilDone();
-            setTimeout(runTest, 0);
-        }
-    }
-    &lt;/script&gt;
-&lt;/head&gt;
-
-&lt;body onload=&quot;setup()&quot;&gt;
-    &lt;div id=&quot;child00&quot; class=&quot;vertical&quot;&gt;&lt;div id=&quot;console&quot;&gt;&lt;/div&gt;&lt;/div&gt;
-    &lt;div id=&quot;child01&quot; class=&quot;vertical&quot;&gt;&lt;/div&gt;
-    &lt;div id=&quot;child02&quot; class=&quot;vertical&quot;&gt;&lt;/div&gt;
-    &lt;div id=&quot;child03&quot; class=&quot;vertical&quot;&gt;&lt;/div&gt;
-    &lt;div id=&quot;child04&quot; class=&quot;vertical&quot;&gt;&lt;/div&gt;
-    &lt;div id=&quot;child05&quot; class=&quot;vertical&quot;&gt;&lt;/div&gt;
-    &lt;script src=&quot;../../resources/js-test-post.js&quot;&gt;&lt;/script&gt;
-&lt;/body&gt;
-
-&lt;/html&gt;
</del></span></pre></div>
<a id="trunkLayoutTestscss3scrollsnapscrollsnapcoordinateoverflowresizeexpectedtxt"></a>
<div class="delfile"><h4>Deleted: trunk/LayoutTests/css3/scroll-snap/scroll-snap-coordinate-overflow-resize-expected.txt (210023 => 210024)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/css3/scroll-snap/scroll-snap-coordinate-overflow-resize-expected.txt        2016-12-20 18:26:10 UTC (rev 210023)
+++ trunk/LayoutTests/css3/scroll-snap/scroll-snap-coordinate-overflow-resize-expected.txt        2016-12-20 18:44:38 UTC (rev 210024)
</span><span class="lines">@@ -1,9 +0,0 @@
</span><del>-PASS successfullyParsed is true
-
-TEST COMPLETE
-Scroll-snap offsets: vertical = { 0, 400, 800, 1200, 1600, 2000 }
-Scroll-snap offsets: vertical = { 0, 400, 800, 1200, 1600, 2000 }
-PASS successfullyParsed is true
-
-TEST COMPLETE
-
</del></span></pre></div>
<a id="trunkLayoutTestscss3scrollsnapscrollsnapcoordinateoverflowresizehtml"></a>
<div class="delfile"><h4>Deleted: trunk/LayoutTests/css3/scroll-snap/scroll-snap-coordinate-overflow-resize.html (210023 => 210024)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/css3/scroll-snap/scroll-snap-coordinate-overflow-resize.html        2016-12-20 18:26:10 UTC (rev 210023)
+++ trunk/LayoutTests/css3/scroll-snap/scroll-snap-coordinate-overflow-resize.html        2016-12-20 18:44:38 UTC (rev 210024)
</span><span class="lines">@@ -1,60 +0,0 @@
</span><del>-&lt;html&gt;
-
-&lt;head&gt;
-    &lt;style&gt;
-        #container {
-            width: 420px;
-            height: 400px;
-            overflow-y: scroll;
-            -webkit-scroll-snap-type: mandatory;
-        }
-
-        .cell {
-            width: 400px;
-            height: 400px;
-            -webkit-scroll-snap-coordinate: 0% 0%;
-        }
-    &lt;/style&gt;
-    &lt;script src=&quot;../../resources/js-test-pre.js&quot;&gt;&lt;/script&gt;
-    &lt;script&gt;
-    function setup()
-    {
-        var container = document.getElementById(&quot;container&quot;);
-
-        function dumpSnapOffsetsAndFinishTest()
-        {
-            debug(&quot;Scroll-snap offsets: &quot; + window.internals.scrollSnapOffsets(container));
-            finishJSTest();
-        }
-
-        function dumpSnapOffsetsAndResizeElement()
-        {
-            debug(&quot;Scroll-snap offsets: &quot; + window.internals.scrollSnapOffsets(container));
-            container.style.width = &quot;425px&quot;;
-            setTimeout(dumpSnapOffsetsAndFinishTest, 0);
-        }
-
-        container.scrollTop = 800;
-        if (window.testRunner) {
-            window.jsTestIsAsync = true;
-            testRunner.dumpAsText();
-            testRunner.waitUntilDone();
-            setTimeout(dumpSnapOffsetsAndResizeElement, 0);
-        }
-    }
-    &lt;/script&gt;
-&lt;/head&gt;
-
-&lt;body onload=&quot;setup()&quot;&gt;
-    &lt;div id=&quot;container&quot;&gt;
-        &lt;div class=&quot;cell&quot;&gt;&lt;div id=&quot;console&quot;&gt;&lt;/div&gt;&lt;/div&gt;
-        &lt;div class=&quot;cell&quot;&gt;&lt;/div&gt;
-        &lt;div class=&quot;cell&quot;&gt;&lt;/div&gt;
-        &lt;div class=&quot;cell&quot;&gt;&lt;/div&gt;
-        &lt;div class=&quot;cell&quot;&gt;&lt;/div&gt;
-        &lt;div class=&quot;cell&quot;&gt;&lt;/div&gt;
-    &lt;/div&gt;
-    &lt;script src=&quot;../../resources/js-test-post.js&quot;&gt;&lt;/script&gt;
-&lt;/body&gt;
-
-&lt;/html&gt;
</del></span></pre></div>
<a id="trunkLayoutTestscss3scrollsnapscrollsnapcoordinatehtml"></a>
<div class="delfile"><h4>Deleted: trunk/LayoutTests/css3/scroll-snap/scroll-snap-coordinate.html (210023 => 210024)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/css3/scroll-snap/scroll-snap-coordinate.html        2016-12-20 18:26:10 UTC (rev 210023)
+++ trunk/LayoutTests/css3/scroll-snap/scroll-snap-coordinate.html        2016-12-20 18:44:38 UTC (rev 210024)
</span><span class="lines">@@ -1,144 +0,0 @@
</span><del>-&lt;!DOCTYPE html&gt;
-&lt;html&gt;
-&lt;head&gt;
-    &lt;title&gt;Snap points - nested snap coordinates&lt;/title&gt;
-    &lt;style&gt;
-        .scrollable {
-            overflow: scroll;
-            -webkit-overflow-scrolling: touch;
-            border: 1px dashed black;
-            height: 300px;
-            margin: 0 10px;
-        }
-    
-        .center-snap-receiver {
-            -webkit-scroll-snap-type: mandatory;
-            -webkit-scroll-snap-destination: 0 0;
-        }
-    
-        .snap-point-marker {
-            margin-top: 100px;
-            width: 15px;
-            height: 15px;
-            border: 1px solid black;
-        }
-
-        .snap-point {
-            -webkit-scroll-snap-coordinate: 0 0px;
-        }
-
-        .multiple-coordinates {
-            -webkit-scroll-snap-coordinate: 0 0px 0 100px 0 220px;
-        }
-
-        .nested {
-            border: 1px dashed blue;
-        }
-    
-        .snap-point-marker::after {
-            font-size: 1em;
-            position: relative;
-            content: '+';
-        }
-    
-        .nested &gt; .snap-point-marker {
-            margin-left: 50px;
-            border: 1px solid red;
-        }
-        .nested &gt; .nested &gt; .snap-point-marker {
-            margin-left: 100px;
-            border: 1px solid blue;
-        }
-    
-        .large-content {
-            height: 3000px;
-            width: 100%;
-        }
-    
-        .small-content {
-            height: 200px;
-            width: 100%;
-        }
-
-        .invalidContainer {
-            border: 1px dashed black;
-            height: 300px;
-            margin: 0 10px;
-            opacity: 0.5;
-            overflow: hidden;
-        }
-    &lt;/style&gt;
-        &lt;script src=&quot;../../resources/js-test-pre.js&quot;&gt;&lt;/script&gt;
-        &lt;script&gt;
-        function runTest()
-        {
-            var container = document.getElementById('container');
-            debug(&quot;Scroll-snap offsets for 'container': &quot; + window.internals.scrollSnapOffsets(container));
-
-            finishJSTest();
-            testRunner.notifyDone();
-        }
-
-        function onLoad()
-        {
-            if (window.testRunner) {
-                window.jsTestIsAsync = true;
-                testRunner.dumpAsText();
-                testRunner.waitUntilDone();
-                setTimeout(runTest, 0);
-            }
-        }
-        &lt;/script&gt;
-&lt;/head&gt;
-&lt;body onload=&quot;onLoad();&quot;&gt;
-    &lt;div id=&quot;container&quot; class=&quot;center-snap-receiver scrollable&quot;&gt;
-        &lt;div class=&quot;snap-point snap-point-marker&quot;&gt;&lt;/div&gt;
-        &lt;div class=&quot;nested&quot;&gt;
-            &lt;div class=&quot;snap-point snap-point-marker&quot;&gt;&lt;/div&gt;
-        &lt;/div&gt;
-        &lt;div class=&quot;nested&quot;&gt;
-            &lt;div class=&quot;nested&quot;&gt;
-                &lt;div class=&quot;snap-point snap-point-marker&quot;&gt;&lt;/div&gt;
-            &lt;/div&gt;
-        &lt;/div&gt;
-        &lt;div class=&quot;snap-point snap-point-marker&quot;&gt;&lt;/div&gt;
-        &lt;div class=&quot;snap-point snap-point-marker&quot;&gt;&lt;/div&gt;
-        &lt;div class=&quot;multiple-coordinates nested&quot;&gt;
-            &lt;div class=&quot;snap-point-marker&quot;&gt;&lt;/div&gt;
-            &lt;div class=&quot;nested&quot;&gt;
-                &lt;div class=&quot;snap-point-marker&quot;&gt;&lt;/div&gt;
-            &lt;/div&gt;
-        &lt;/div&gt;
-        &lt;div class=&quot;nested&quot;&gt;
-            &lt;div class=&quot;snap-point snap-point-marker&quot;&gt;&lt;/div&gt;
-        &lt;/div&gt;
-        &lt;div class=&quot;snap-point snap-point-marker&quot;&gt;&lt;/div&gt;
-        &lt;div class=&quot;nested&quot;&gt;
-            &lt;div class=&quot;snap-point snap-point-marker&quot;&gt;&lt;/div&gt;
-        &lt;/div&gt;
-        &lt;div class=&quot;snap-point snap-point-marker&quot;&gt;&lt;/div&gt;
-        &lt;div class=&quot;snap-point snap-point-marker&quot;&gt;&lt;/div&gt;
-        &lt;div class=&quot;nested&quot;&gt;
-            &lt;div class=&quot;snap-point snap-point-marker&quot;&gt;&lt;/div&gt;
-        &lt;/div&gt;
-         &lt;div class=&quot;snap-point snap-point-marker&quot;&gt;&lt;/div&gt;
-        &lt;div class=&quot;nested&quot;&gt;
-            &lt;div class=&quot;snap-point snap-point-marker&quot;&gt;&lt;/div&gt;
-        &lt;/div&gt;
-        &lt;div class=&quot;nested&quot;&gt;
-            &lt;div class=&quot;nested&quot;&gt;
-                &lt;div class=&quot;snap-point snap-point-marker&quot;&gt;&lt;/div&gt;
-            &lt;/div&gt;
-        &lt;/div&gt;
-        &lt;div class=&quot;snap-point snap-point-marker&quot;&gt;&lt;/div&gt;
-        &lt;div class=&quot;nested multiple-coordinates&quot;&gt;
-            &lt;div class=&quot;snap-point-marker&quot;&gt;&lt;/div&gt;
-            &lt;div class=&quot;nested&quot;&gt;
-                &lt;div class=&quot;snap-point-marker&quot;&gt;&lt;/div&gt;
-            &lt;/div&gt;
-        &lt;/div&gt;
-        &lt;div class=&quot;large-content&quot;&gt;&lt;/div&gt;
-    &lt;/div&gt;
-    &lt;script src=&quot;../../resources/js-test-post.js&quot;&gt;&lt;/script&gt;
-&lt;/body&gt;
-&lt;/html&gt;
</del></span></pre></div>
<a id="trunkLayoutTestscss3scrollsnapscrollsnapdesinationlockupexpectedtxt"></a>
<div class="delfile"><h4>Deleted: trunk/LayoutTests/css3/scroll-snap/scroll-snap-desination-lock-up-expected.txt (210023 => 210024)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/css3/scroll-snap/scroll-snap-desination-lock-up-expected.txt        2016-12-20 18:26:10 UTC (rev 210023)
+++ trunk/LayoutTests/css3/scroll-snap/scroll-snap-desination-lock-up-expected.txt        2016-12-20 18:44:38 UTC (rev 210024)
</span><span class="lines">@@ -1,20 +0,0 @@
</span><del>-This test passes if it doesn't time out.
-Tests infinite loop calculating scroll snap point offsets.
-
-On success, you will see a series of &quot;PASS&quot; messages, followed by &quot;TEST COMPLETE&quot;.
-
-
-PASS lockUpSnapCoordinate.style['-webkit-scroll-snap-type'] is &quot;&quot;
-PASS window.getComputedStyle(lockUpSnapCoordinate).getPropertyValue('-webkit-scroll-snap-type') is &quot;mandatory&quot;
-PASS lockUpSnapCoordinate.style['-webkit-scroll-snap-points-x'] is &quot;&quot;
-PASS window.getComputedStyle(lockUpSnapCoordinate).getPropertyValue('-webkit-scroll-snap-points-x') is &quot;repeat(100%)&quot;
-PASS lockUpSnapCoordinate.style['-webkit-scroll-snap-points-y'] is &quot;&quot;
-PASS window.getComputedStyle(lockUpSnapCoordinate).getPropertyValue('-webkit-scroll-snap-points-y') is &quot;repeat(100%)&quot;
-PASS lockUpSnapCoordinate.style['-webkit-scroll-snap-destination'] is &quot;&quot;
-PASS window.getComputedStyle(lockUpSnapCoordinate).getPropertyValue('-webkit-scroll-snap-destination') is &quot;100% 100%&quot;
-PASS lockUpSnapCoordinate.style['-webkit-scroll-snap-coordinate'] is &quot;&quot;
-PASS window.getComputedStyle(lockUpSnapCoordinate).getPropertyValue('-webkit-scroll-snap-coordinate') is &quot;none&quot;
-PASS successfullyParsed is true
-
-TEST COMPLETE
-
</del></span></pre></div>
<a id="trunkLayoutTestscss3scrollsnapscrollsnapdesinationlockuphtml"></a>
<div class="delfile"><h4>Deleted: trunk/LayoutTests/css3/scroll-snap/scroll-snap-desination-lock-up.html (210023 => 210024)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/css3/scroll-snap/scroll-snap-desination-lock-up.html        2016-12-20 18:26:10 UTC (rev 210023)
+++ trunk/LayoutTests/css3/scroll-snap/scroll-snap-desination-lock-up.html        2016-12-20 18:44:38 UTC (rev 210024)
</span><span class="lines">@@ -1,71 +0,0 @@
</span><del>-&lt;!DOCTYPE html&gt;
-&lt;html&gt;
-    &lt;head&gt;
-        &lt;style&gt;
-            .horizontalGallery {
-                width: 400px;
-                height: 50px;
-                overflow-y: hidden;
-                overflow-x: auto;
-            }
-            .horizontalGalleryDrawer {
-                width: 3000px;
-                height: 50px;
-            }
-            .colorBox {
-                height: 50px;
-                width: 400px;
-                float: left;
-            }
-
-            .lockUpSnapCoordinate {
-                -webkit-scroll-snap-type: mandatory;
-                -webkit-scroll-snap-points-x: repeat(100%);
-                -webkit-scroll-snap-points-y: repeat(100%);
-                -webkit-scroll-snap-destination: 100% 100%;
-                -webkit-scroll-snap-coordinate: initial;
-            }
-
-            #item0 { background-color: red; }
-            #item1 { background-color: green; }
-            #item2 { background-color: blue; }
-            #item3 { background-color: aqua; }
-            #item4 { background-color: yellow; }
-            #item5 { background-color: fuchsia; }
-        &lt;/style&gt;
-        &lt;script src=&quot;../../resources/js-test-pre.js&quot;&gt;&lt;/script&gt;
-    &lt;/head&gt;
-    &lt;body&gt;
-        &lt;div style=&quot;width: 400px&quot;&gt;
-            &lt;div id=&quot;lockUpSnapCoordinate&quot; class=&quot;horizontalGallery lockUpSnapCoordinate&quot;&gt;
-                &lt;div class=&quot;horizontalGalleryDrawer&quot;&gt;
-                    &lt;div id=&quot;item0&quot; class=&quot;colorBox&quot;&gt;&lt;/div&gt;
-                    &lt;div id=&quot;item1&quot; class=&quot;colorBox&quot;&gt;&lt;/div&gt;
-                    &lt;div id=&quot;item2&quot; class=&quot;colorBox&quot;&gt;&lt;/div&gt;
-                    &lt;div id=&quot;item3&quot; class=&quot;colorBox&quot;&gt;&lt;/div&gt;
-                    &lt;div id=&quot;item4&quot; class=&quot;colorBox&quot;&gt;&lt;/div&gt;
-                    &lt;div id=&quot;item5&quot; class=&quot;colorBox&quot;&gt;&lt;/div&gt;
-                &lt;/div&gt;
-            &lt;/div&gt;
-        &lt;/div&gt;
-        This test passes if it doesn't time out.
-        &lt;div id=&quot;console&quot;&gt;&lt;/div&gt;
-        &lt;script&gt;
-        description(&quot;Tests infinite loop calculating scroll snap point offsets.&quot;);
-
-        var lockUpSnapCoordinate = document.getElementById('lockUpSnapCoordinate');
-        shouldBeEmptyString(&quot;lockUpSnapCoordinate.style['-webkit-scroll-snap-type']&quot;);
-        shouldBeEqualToString(&quot;window.getComputedStyle(lockUpSnapCoordinate).getPropertyValue('-webkit-scroll-snap-type')&quot;, &quot;mandatory&quot;);
-        shouldBeEmptyString(&quot;lockUpSnapCoordinate.style['-webkit-scroll-snap-points-x']&quot;);
-        shouldBeEqualToString(&quot;window.getComputedStyle(lockUpSnapCoordinate).getPropertyValue('-webkit-scroll-snap-points-x')&quot;, &quot;repeat(100%)&quot;);
-        shouldBeEmptyString(&quot;lockUpSnapCoordinate.style['-webkit-scroll-snap-points-y']&quot;);
-        shouldBeEqualToString(&quot;window.getComputedStyle(lockUpSnapCoordinate).getPropertyValue('-webkit-scroll-snap-points-y')&quot;, &quot;repeat(100%)&quot;);
-        shouldBeEmptyString(&quot;lockUpSnapCoordinate.style['-webkit-scroll-snap-destination']&quot;);
-        shouldBeEqualToString(&quot;window.getComputedStyle(lockUpSnapCoordinate).getPropertyValue('-webkit-scroll-snap-destination')&quot;, &quot;100% 100%&quot;);
-        shouldBeEmptyString(&quot;lockUpSnapCoordinate.style['-webkit-scroll-snap-coordinate']&quot;);
-        shouldBeEqualToString(&quot;window.getComputedStyle(lockUpSnapCoordinate).getPropertyValue('-webkit-scroll-snap-coordinate')&quot;, &quot;none&quot;);
-        &lt;/script&gt;
-        &lt;script src=&quot;../../resources/js-test-post.js&quot;&gt;&lt;/script&gt;
-    &lt;/body&gt;
-&lt;/html&gt;
-
</del></span></pre></div>
<a id="trunkLayoutTestscss3scrollsnapscrollsnapelementscontainerlargerthanchildrenhtml"></a>
<div class="modfile"><h4>Modified: trunk/LayoutTests/css3/scroll-snap/scroll-snap-elements-container-larger-than-children.html (210023 => 210024)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/css3/scroll-snap/scroll-snap-elements-container-larger-than-children.html        2016-12-20 18:26:10 UTC (rev 210023)
+++ trunk/LayoutTests/css3/scroll-snap/scroll-snap-elements-container-larger-than-children.html        2016-12-20 18:44:38 UTC (rev 210024)
</span><span class="lines">@@ -7,8 +7,7 @@
</span><span class="cx">                 height: 300px;
</span><span class="cx">                 overflow-y: hidden;
</span><span class="cx">                 overflow-x: auto;
</span><del>-                -webkit-scroll-snap-points-x: elements;
-                -webkit-scroll-snap-type: mandatory;
</del><ins>+                scroll-snap-type: x mandatory;
</ins><span class="cx">             }
</span><span class="cx">             #inner-container {
</span><span class="cx">                 width: 1800px;
</span><span class="lines">@@ -18,7 +17,7 @@
</span><span class="cx">                 height: 300px;
</span><span class="cx">                 float: left;
</span><span class="cx">                 min-width: 200px;
</span><del>-                -webkit-scroll-snap-coordinate: 0 0;
</del><ins>+                scroll-snap-align: start;
</ins><span class="cx">             }
</span><span class="cx">         &lt;/style&gt;
</span><span class="cx">         &lt;script src=&quot;../../resources/js-test-pre.js&quot;&gt;&lt;/script&gt;
</span></span></pre></div>
<a id="trunkLayoutTestscss3scrollsnapscrollsnapinheritexpectedtxt"></a>
<div class="modfile"><h4>Modified: trunk/LayoutTests/css3/scroll-snap/scroll-snap-inherit-expected.txt (210023 => 210024)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/css3/scroll-snap/scroll-snap-inherit-expected.txt        2016-12-20 18:26:10 UTC (rev 210023)
+++ trunk/LayoutTests/css3/scroll-snap/scroll-snap-inherit-expected.txt        2016-12-20 18:44:38 UTC (rev 210024)
</span><span class="lines">@@ -3,86 +3,124 @@
</span><span class="cx"> On success, you will see a series of &quot;PASS&quot; messages, followed by &quot;TEST COMPLETE&quot;.
</span><span class="cx"> 
</span><span class="cx"> 
</span><del>-PASS noInherit.style['-webkit-scroll-snap-type'] is &quot;&quot;
-PASS window.getComputedStyle(noInherit).getPropertyValue('-webkit-scroll-snap-type') is &quot;mandatory&quot;
-PASS noInherit.style['-webkit-scroll-snap-points-x'] is &quot;&quot;
-PASS window.getComputedStyle(noInherit).getPropertyValue('-webkit-scroll-snap-points-x') is &quot;repeat(100%)&quot;
-PASS noInherit.style['-webkit-scroll-snap-points-y'] is &quot;&quot;
-PASS window.getComputedStyle(noInherit).getPropertyValue('-webkit-scroll-snap-points-y') is &quot;repeat(100%)&quot;
-PASS noInherit.style['-webkit-scroll-snap-destination'] is &quot;&quot;
-PASS window.getComputedStyle(noInherit).getPropertyValue('-webkit-scroll-snap-destination') is &quot;10% 11%&quot;
-PASS noInherit.style['-webkit-scroll-snap-coordinate'] is &quot;&quot;
-PASS window.getComputedStyle(noInherit).getPropertyValue('-webkit-scroll-snap-coordinate') is &quot;none&quot;
-PASS inheritType.style['-webkit-scroll-snap-type'] is &quot;inherit&quot;
-PASS window.getComputedStyle(inheritType).getPropertyValue('-webkit-scroll-snap-type') is &quot;proximity&quot;
-PASS inheritType.style['-webkit-scroll-snap-points-x'] is &quot;&quot;
-PASS window.getComputedStyle(inheritType).getPropertyValue('-webkit-scroll-snap-points-x') is &quot;repeat(100%)&quot;
-PASS inheritType.style['-webkit-scroll-snap-points-y'] is &quot;&quot;
-PASS window.getComputedStyle(inheritType).getPropertyValue('-webkit-scroll-snap-points-y') is &quot;repeat(100%)&quot;
-PASS inheritType.style['-webkit-scroll-snap-destination'] is &quot;&quot;
-PASS window.getComputedStyle(inheritType).getPropertyValue('-webkit-scroll-snap-destination') is &quot;0px 0px&quot;
-PASS inheritType.style['-webkit-scroll-snap-coordinate'] is &quot;&quot;
-PASS window.getComputedStyle(inheritType).getPropertyValue('-webkit-scroll-snap-coordinate') is &quot;15px 122px&quot;
-PASS inheritXPoints.style['-webkit-scroll-snap-type'] is &quot;&quot;
-PASS window.getComputedStyle(inheritXPoints).getPropertyValue('-webkit-scroll-snap-type') is &quot;mandatory&quot;
-PASS inheritXPoints.style['-webkit-scroll-snap-points-x'] is &quot;inherit&quot;
-PASS window.getComputedStyle(inheritXPoints).getPropertyValue('-webkit-scroll-snap-points-x') is &quot;repeat(200%)&quot;
-PASS inheritXPoints.style['-webkit-scroll-snap-points-y'] is &quot;&quot;
-PASS window.getComputedStyle(inheritXPoints).getPropertyValue('-webkit-scroll-snap-points-y') is &quot;repeat(100%)&quot;
-PASS inheritXPoints.style['-webkit-scroll-snap-destination'] is &quot;&quot;
-PASS window.getComputedStyle(inheritXPoints).getPropertyValue('-webkit-scroll-snap-destination') is &quot;50% 70%&quot;
-PASS inheritXPoints.style['-webkit-scroll-snap-coordinate'] is &quot;&quot;
-PASS window.getComputedStyle(inheritXPoints).getPropertyValue('-webkit-scroll-snap-coordinate') is &quot;100% 50%&quot;
-PASS inheritYPoints.style['-webkit-scroll-snap-type'] is &quot;&quot;
-PASS window.getComputedStyle(inheritYPoints).getPropertyValue('-webkit-scroll-snap-type') is &quot;mandatory&quot;
-PASS inheritYPoints.style['-webkit-scroll-snap-points-x'] is &quot;&quot;
-PASS window.getComputedStyle(inheritYPoints).getPropertyValue('-webkit-scroll-snap-points-x') is &quot;repeat(100%)&quot;
-PASS inheritYPoints.style['-webkit-scroll-snap-points-y'] is &quot;inherit&quot;
-PASS window.getComputedStyle(inheritYPoints).getPropertyValue('-webkit-scroll-snap-points-y') is &quot;repeat(200%)&quot;
-PASS inheritYPoints.style['-webkit-scroll-snap-destination'] is &quot;&quot;
-PASS window.getComputedStyle(inheritYPoints).getPropertyValue('-webkit-scroll-snap-destination') is &quot;10px 20px&quot;
-PASS inheritYPoints.style['-webkit-scroll-snap-coordinate'] is &quot;&quot;
-PASS window.getComputedStyle(inheritYPoints).getPropertyValue('-webkit-scroll-snap-coordinate') is &quot;50% 100%&quot;
-PASS inheritDestination.style['-webkit-scroll-snap-type'] is &quot;&quot;
-PASS window.getComputedStyle(inheritDestination).getPropertyValue('-webkit-scroll-snap-type') is &quot;proximity&quot;
-PASS inheritDestination.style['-webkit-scroll-snap-points-x'] is &quot;&quot;
-PASS window.getComputedStyle(inheritDestination).getPropertyValue('-webkit-scroll-snap-points-x') is &quot;repeat(100%)&quot;
-PASS inheritDestination.style['-webkit-scroll-snap-points-y'] is &quot;&quot;
-PASS window.getComputedStyle(inheritDestination).getPropertyValue('-webkit-scroll-snap-points-y') is &quot;repeat(100%)&quot;
-PASS inheritDestination.style['-webkit-scroll-snap-destination'] is &quot;inherit&quot;
-PASS window.getComputedStyle(inheritDestination).getPropertyValue('-webkit-scroll-snap-destination') is &quot;25% 25%&quot;
-PASS inheritDestination.style['-webkit-scroll-snap-coordinate'] is &quot;&quot;
-PASS window.getComputedStyle(inheritDestination).getPropertyValue('-webkit-scroll-snap-coordinate') is &quot;10px 10px&quot;
-PASS inheritSnapCoordinate.style['-webkit-scroll-snap-type'] is &quot;&quot;
-PASS window.getComputedStyle(inheritSnapCoordinate).getPropertyValue('-webkit-scroll-snap-type') is &quot;mandatory&quot;
-PASS inheritSnapCoordinate.style['-webkit-scroll-snap-points-x'] is &quot;&quot;
-PASS window.getComputedStyle(inheritSnapCoordinate).getPropertyValue('-webkit-scroll-snap-points-x') is &quot;repeat(100%)&quot;
-PASS inheritSnapCoordinate.style['-webkit-scroll-snap-points-y'] is &quot;&quot;
-PASS window.getComputedStyle(inheritSnapCoordinate).getPropertyValue('-webkit-scroll-snap-points-y') is &quot;repeat(100%)&quot;
-PASS inheritSnapCoordinate.style['-webkit-scroll-snap-destination'] is &quot;&quot;
-PASS window.getComputedStyle(inheritSnapCoordinate).getPropertyValue('-webkit-scroll-snap-destination') is &quot;10% 10%&quot;
-PASS inheritSnapCoordinate.style['-webkit-scroll-snap-coordinate'] is &quot;inherit&quot;
-PASS window.getComputedStyle(inheritSnapCoordinate).getPropertyValue('-webkit-scroll-snap-coordinate') is &quot;20px 20px&quot;
-PASS inheritAll.style['-webkit-scroll-snap-type'] is &quot;inherit&quot;
-PASS window.getComputedStyle(inheritAll).getPropertyValue('-webkit-scroll-snap-type') is &quot;proximity&quot;
-PASS inheritAll.style['-webkit-scroll-snap-points-x'] is &quot;inherit&quot;
-PASS window.getComputedStyle(inheritAll).getPropertyValue('-webkit-scroll-snap-points-x') is &quot;repeat(200%)&quot;
-PASS inheritAll.style['-webkit-scroll-snap-points-y'] is &quot;inherit&quot;
-PASS window.getComputedStyle(inheritAll).getPropertyValue('-webkit-scroll-snap-points-y') is &quot;repeat(200%)&quot;
-PASS inheritAll.style['-webkit-scroll-snap-destination'] is &quot;inherit&quot;
-PASS window.getComputedStyle(inheritAll).getPropertyValue('-webkit-scroll-snap-destination') is &quot;25% 25%&quot;
-PASS inheritAll.style['-webkit-scroll-snap-coordinate'] is &quot;inherit&quot;
-PASS window.getComputedStyle(inheritAll).getPropertyValue('-webkit-scroll-snap-coordinate') is &quot;20px 20px&quot;
-PASS inheritNone.style['-webkit-scroll-snap-type'] is &quot;&quot;
-PASS window.getComputedStyle(inheritNone).getPropertyValue('-webkit-scroll-snap-type') is &quot;none&quot;
-PASS inheritNone.style['-webkit-scroll-snap-points-x'] is &quot;&quot;
-PASS window.getComputedStyle(inheritNone).getPropertyValue('-webkit-scroll-snap-points-x') is &quot;none&quot;
-PASS inheritNone.style['-webkit-scroll-snap-points-y'] is &quot;&quot;
-PASS window.getComputedStyle(inheritNone).getPropertyValue('-webkit-scroll-snap-points-y') is &quot;none&quot;
-PASS inheritNone.style['-webkit-scroll-snap-destination'] is &quot;&quot;
-PASS window.getComputedStyle(inheritNone).getPropertyValue('-webkit-scroll-snap-destination') is &quot;0px 0px&quot;
-PASS inheritNone.style['-webkit-scroll-snap-coordinate'] is &quot;&quot;
-PASS window.getComputedStyle(inheritNone).getPropertyValue('-webkit-scroll-snap-coordinate') is &quot;none&quot;
</del><ins>+PASS noInherit.style['scroll-snap-type'] is &quot;&quot;
+PASS window.getComputedStyle(noInherit).getPropertyValue('scroll-snap-type') is &quot;both mandatory&quot;
+PASS noInherit.style['scroll-snap-align'] is &quot;&quot;
+PASS window.getComputedStyle(noInherit).getPropertyValue('scroll-snap-align') is &quot;center center&quot;
+PASS noInherit.style['scroll-padding'] is &quot;&quot;
+PASS noInherit.style['scroll-padding-left'] is &quot;&quot;
+PASS noInherit.style['scroll-padding-right'] is &quot;&quot;
+PASS noInherit.style['scroll-padding-top'] is &quot;&quot;
+PASS noInherit.style['scroll-padding-bottom'] is &quot;&quot;
+PASS window.getComputedStyle(noInherit).getPropertyValue('scroll-padding') is &quot;20px&quot;
+PASS noInherit.style['scroll-snap-margin'] is &quot;&quot;
+PASS noInherit.style['scroll-snap-margin-left'] is &quot;&quot;
+PASS noInherit.style['scroll-snap-margin-right'] is &quot;&quot;
+PASS noInherit.style['scroll-snap-margin-top'] is &quot;&quot;
+PASS noInherit.style['scroll-snap-margin-bottom'] is &quot;&quot;
+PASS window.getComputedStyle(noInherit).getPropertyValue('scroll-snap-margin') is &quot;0px 1px&quot;
+
+PASS inheritType.style['scroll-snap-type'] is &quot;inherit&quot;
+PASS window.getComputedStyle(inheritType).getPropertyValue('scroll-snap-type') is &quot;x proximity&quot;
+PASS inheritType.style['scroll-snap-align'] is &quot;&quot;
+PASS window.getComputedStyle(inheritType).getPropertyValue('scroll-snap-align') is &quot;center center&quot;
+PASS inheritType.style['scroll-padding'] is &quot;&quot;
+PASS inheritType.style['scroll-padding-left'] is &quot;&quot;
+PASS inheritType.style['scroll-padding-right'] is &quot;&quot;
+PASS inheritType.style['scroll-padding-top'] is &quot;&quot;
+PASS inheritType.style['scroll-padding-bottom'] is &quot;&quot;
+PASS window.getComputedStyle(inheritType).getPropertyValue('scroll-padding') is &quot;20px&quot;
+PASS inheritType.style['scroll-snap-margin'] is &quot;&quot;
+PASS inheritType.style['scroll-snap-margin-left'] is &quot;&quot;
+PASS inheritType.style['scroll-snap-margin-right'] is &quot;&quot;
+PASS inheritType.style['scroll-snap-margin-top'] is &quot;&quot;
+PASS inheritType.style['scroll-snap-margin-bottom'] is &quot;&quot;
+PASS window.getComputedStyle(inheritType).getPropertyValue('scroll-snap-margin') is &quot;0px 1px&quot;
+
+PASS inheritAlign.style['scroll-snap-type'] is &quot;&quot;
+PASS window.getComputedStyle(inheritAlign).getPropertyValue('scroll-snap-type') is &quot;both mandatory&quot;
+PASS inheritAlign.style['scroll-snap-align'] is &quot;inherit&quot;
+PASS window.getComputedStyle(inheritAlign).getPropertyValue('scroll-snap-align') is &quot;start end&quot;
+PASS inheritAlign.style['scroll-padding'] is &quot;&quot;
+PASS inheritAlign.style['scroll-padding-left'] is &quot;&quot;
+PASS inheritAlign.style['scroll-padding-right'] is &quot;&quot;
+PASS inheritAlign.style['scroll-padding-top'] is &quot;&quot;
+PASS inheritAlign.style['scroll-padding-bottom'] is &quot;&quot;
+PASS window.getComputedStyle(inheritAlign).getPropertyValue('scroll-padding') is &quot;20px&quot;
+PASS inheritAlign.style['scroll-snap-margin'] is &quot;&quot;
+PASS inheritAlign.style['scroll-snap-margin-left'] is &quot;&quot;
+PASS inheritAlign.style['scroll-snap-margin-right'] is &quot;&quot;
+PASS inheritAlign.style['scroll-snap-margin-top'] is &quot;&quot;
+PASS inheritAlign.style['scroll-snap-margin-bottom'] is &quot;&quot;
+PASS window.getComputedStyle(inheritAlign).getPropertyValue('scroll-snap-margin') is &quot;0px 1px&quot;
+
+PASS inheritPadding.style['scroll-snap-type'] is &quot;&quot;
+PASS window.getComputedStyle(inheritPadding).getPropertyValue('scroll-snap-type') is &quot;both mandatory&quot;
+PASS inheritPadding.style['scroll-snap-align'] is &quot;&quot;
+PASS window.getComputedStyle(inheritPadding).getPropertyValue('scroll-snap-align') is &quot;center center&quot;
+PASS inheritPadding.style['scroll-padding'] is &quot;inherit&quot;
+PASS inheritPadding.style['scroll-padding-left'] is &quot;inherit&quot;
+PASS inheritPadding.style['scroll-padding-right'] is &quot;inherit&quot;
+PASS inheritPadding.style['scroll-padding-top'] is &quot;inherit&quot;
+PASS inheritPadding.style['scroll-padding-bottom'] is &quot;inherit&quot;
+PASS window.getComputedStyle(inheritPadding).getPropertyValue('scroll-padding') is &quot;10%&quot;
+PASS inheritPadding.style['scroll-snap-margin'] is &quot;&quot;
+PASS inheritPadding.style['scroll-snap-margin-left'] is &quot;&quot;
+PASS inheritPadding.style['scroll-snap-margin-right'] is &quot;&quot;
+PASS inheritPadding.style['scroll-snap-margin-top'] is &quot;&quot;
+PASS inheritPadding.style['scroll-snap-margin-bottom'] is &quot;&quot;
+PASS window.getComputedStyle(inheritPadding).getPropertyValue('scroll-snap-margin') is &quot;0px 1px&quot;
+
+PASS inheritMargin.style['scroll-snap-type'] is &quot;&quot;
+PASS window.getComputedStyle(inheritMargin).getPropertyValue('scroll-snap-type') is &quot;both mandatory&quot;
+PASS inheritMargin.style['scroll-snap-align'] is &quot;&quot;
+PASS window.getComputedStyle(inheritMargin).getPropertyValue('scroll-snap-align') is &quot;center center&quot;
+PASS inheritMargin.style['scroll-padding'] is &quot;&quot;
+PASS inheritMargin.style['scroll-padding-left'] is &quot;&quot;
+PASS inheritMargin.style['scroll-padding-right'] is &quot;&quot;
+PASS inheritMargin.style['scroll-padding-top'] is &quot;&quot;
+PASS inheritMargin.style['scroll-padding-bottom'] is &quot;&quot;
+PASS window.getComputedStyle(inheritMargin).getPropertyValue('scroll-padding') is &quot;20px&quot;
+PASS inheritMargin.style['scroll-snap-margin'] is &quot;inherit&quot;
+PASS inheritMargin.style['scroll-snap-margin-left'] is &quot;inherit&quot;
+PASS inheritMargin.style['scroll-snap-margin-right'] is &quot;inherit&quot;
+PASS inheritMargin.style['scroll-snap-margin-top'] is &quot;inherit&quot;
+PASS inheritMargin.style['scroll-snap-margin-bottom'] is &quot;inherit&quot;
+PASS window.getComputedStyle(inheritMargin).getPropertyValue('scroll-snap-margin') is &quot;5px 5px 10px 10px&quot;
+
+PASS inheritAll.style['scroll-snap-type'] is &quot;inherit&quot;
+PASS window.getComputedStyle(inheritAll).getPropertyValue('scroll-snap-type') is &quot;x proximity&quot;
+PASS inheritAll.style['scroll-snap-align'] is &quot;inherit&quot;
+PASS window.getComputedStyle(inheritAll).getPropertyValue('scroll-snap-align') is &quot;start end&quot;
+PASS inheritAll.style['scroll-padding'] is &quot;inherit&quot;
+PASS inheritAll.style['scroll-padding-left'] is &quot;inherit&quot;
+PASS inheritAll.style['scroll-padding-right'] is &quot;inherit&quot;
+PASS inheritAll.style['scroll-padding-top'] is &quot;inherit&quot;
+PASS inheritAll.style['scroll-padding-bottom'] is &quot;inherit&quot;
+PASS window.getComputedStyle(inheritAll).getPropertyValue('scroll-padding') is &quot;10%&quot;
+PASS inheritAll.style['scroll-snap-margin'] is &quot;inherit&quot;
+PASS inheritAll.style['scroll-snap-margin-left'] is &quot;inherit&quot;
+PASS inheritAll.style['scroll-snap-margin-right'] is &quot;inherit&quot;
+PASS inheritAll.style['scroll-snap-margin-top'] is &quot;inherit&quot;
+PASS inheritAll.style['scroll-snap-margin-bottom'] is &quot;inherit&quot;
+PASS window.getComputedStyle(inheritAll).getPropertyValue('scroll-snap-margin') is &quot;5px 5px 10px 10px&quot;
+
+PASS inheritNone.style['scroll-snap-type'] is &quot;&quot;
+PASS window.getComputedStyle(inheritNone).getPropertyValue('scroll-snap-type') is &quot;none&quot;
+PASS inheritNone.style['scroll-snap-align'] is &quot;&quot;
+PASS window.getComputedStyle(inheritNone).getPropertyValue('scroll-snap-align') is &quot;none none&quot;
+PASS inheritNone.style['scroll-padding'] is &quot;&quot;
+PASS inheritNone.style['scroll-padding-left'] is &quot;&quot;
+PASS inheritNone.style['scroll-padding-right'] is &quot;&quot;
+PASS inheritNone.style['scroll-padding-top'] is &quot;&quot;
+PASS inheritNone.style['scroll-padding-bottom'] is &quot;&quot;
+PASS window.getComputedStyle(inheritNone).getPropertyValue('scroll-padding') is &quot;0px&quot;
+PASS inheritNone.style['scroll-snap-margin'] is &quot;&quot;
+PASS inheritNone.style['scroll-snap-margin-left'] is &quot;&quot;
+PASS inheritNone.style['scroll-snap-margin-right'] is &quot;&quot;
+PASS inheritNone.style['scroll-snap-margin-top'] is &quot;&quot;
+PASS inheritNone.style['scroll-snap-margin-bottom'] is &quot;&quot;
+PASS window.getComputedStyle(inheritNone).getPropertyValue('scroll-snap-margin') is &quot;0px&quot;
</ins><span class="cx"> PASS successfullyParsed is true
</span><span class="cx"> 
</span><span class="cx"> TEST COMPLETE
</span></span></pre></div>
<a id="trunkLayoutTestscss3scrollsnapscrollsnapinherithtml"></a>
<div class="modfile"><h4>Modified: trunk/LayoutTests/css3/scroll-snap/scroll-snap-inherit.html (210023 => 210024)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/css3/scroll-snap/scroll-snap-inherit.html        2016-12-20 18:26:10 UTC (rev 210023)
+++ trunk/LayoutTests/css3/scroll-snap/scroll-snap-inherit.html        2016-12-20 18:44:38 UTC (rev 210024)
</span><span class="lines">@@ -4,12 +4,12 @@
</span><span class="cx">         &lt;style&gt;
</span><span class="cx">             .topLevel {
</span><span class="cx">                 width: 400px;
</span><del>-                -webkit-scroll-snap-type: proximity;
-                -webkit-scroll-snap-points-x: repeat(200%);
-                -webkit-scroll-snap-points-y: repeat(200%);
-                -webkit-scroll-snap-destination: 25% 25%;
-                -webkit-scroll-snap-coordinate: 20px 20px;
</del><ins>+                scroll-snap-type: x proximity;
+                scroll-snap-align: start end;
+                scroll-padding: 10%;
+                scroll-snap-margin: 5px 5px 10px 10px;
</ins><span class="cx">             }
</span><ins>+
</ins><span class="cx">             .horizontalGallery {
</span><span class="cx">                 width: 400px;
</span><span class="cx">                 height: 50px;
</span><span class="lines">@@ -16,10 +16,12 @@
</span><span class="cx">                 overflow-y: hidden;
</span><span class="cx">                 overflow-x: auto;
</span><span class="cx">             }
</span><ins>+
</ins><span class="cx">             .horizontalGalleryDrawer {
</span><span class="cx">                 width: 3000px;
</span><span class="cx">                 height: 50px;
</span><span class="cx">             }
</span><ins>+
</ins><span class="cx">             .colorBox {
</span><span class="cx">                 height: 50px;
</span><span class="cx">                 width: 400px;
</span><span class="lines">@@ -27,63 +29,48 @@
</span><span class="cx">             }
</span><span class="cx"> 
</span><span class="cx">             .noInherit {
</span><del>-                -webkit-scroll-snap-type: mandatory;
-                -webkit-scroll-snap-points-x: repeat(100%);
-                -webkit-scroll-snap-points-y: repeat(100%);
-                -webkit-scroll-snap-destination: 10% 11%;
-                -webkit-scroll-snap-coordinate: none;
</del><ins>+                scroll-snap-type: mandatory;
+                scroll-snap-align: center;
+                scroll-padding: 20px;
+                scroll-snap-margin: 0 1px;
</ins><span class="cx">             }
</span><span class="cx"> 
</span><span class="cx">             .inheritType {
</span><del>-                -webkit-scroll-snap-type: inherit;
-                -webkit-scroll-snap-points-x: repeat(100%);
-                -webkit-scroll-snap-points-y: repeat(100%);
-                -webkit-scroll-snap-destination: 0px 0px;
-                -webkit-scroll-snap-coordinate: 15px 122px;
</del><ins>+                scroll-snap-type: inherit;
+                scroll-snap-align: center;
+                scroll-padding: 20px;
+                scroll-snap-margin: 0 1px;
</ins><span class="cx">             }
</span><span class="cx"> 
</span><del>-            .inheritXPoints {
-                -webkit-scroll-snap-type: mandatory;
-                -webkit-scroll-snap-points-x: inherit;
-                -webkit-scroll-snap-points-y: repeat(100%);
-                -webkit-scroll-snap-destination: 50% 70%;
-                -webkit-scroll-snap-coordinate: 100% 50%;
</del><ins>+            .inheritAlign {
+                scroll-snap-type: mandatory;
+                scroll-snap-align: inherit;
+                scroll-padding: 20px;
+                scroll-snap-margin: 0 1px;
</ins><span class="cx">             }
</span><span class="cx"> 
</span><del>-            .inheritYPoints {
-                -webkit-scroll-snap-type: mandatory;
-                -webkit-scroll-snap-points-x: repeat(100%);
-                -webkit-scroll-snap-points-y: inherit;
-                -webkit-scroll-snap-destination: 10px 20px;
-                -webkit-scroll-snap-coordinate: 50% 100%;
</del><ins>+            .inheritPadding {
+                scroll-snap-type: mandatory;
+                scroll-snap-align: center;
+                scroll-padding: inherit;
+                scroll-snap-margin: 0 1px;
</ins><span class="cx">             }
</span><span class="cx"> 
</span><del>-            .inheritDestination {
-                -webkit-scroll-snap-type: proximity;
-                -webkit-scroll-snap-points-x: repeat(100%);
-                -webkit-scroll-snap-points-y: repeat(100%);
-                -webkit-scroll-snap-destination: inherit;
-                -webkit-scroll-snap-coordinate: 10px 10px;
</del><ins>+            .inheritMargin {
+                scroll-snap-type: mandatory;
+                scroll-snap-align: center;
+                scroll-padding: 20px;
+                scroll-snap-margin: inherit;
</ins><span class="cx">             }
</span><span class="cx"> 
</span><del>-            .inheritSnapCoordinate {
-                -webkit-scroll-snap-type: mandatory;
-                -webkit-scroll-snap-points-x: repeat(100%);
-                -webkit-scroll-snap-points-y: repeat(100%);
-                -webkit-scroll-snap-destination: 10% 10%;
-                -webkit-scroll-snap-coordinate: inherit;
-            }
-
</del><span class="cx">             .inheritAll {
</span><del>-                -webkit-scroll-snap-type: inherit;
-                -webkit-scroll-snap-points-x: inherit;
-                -webkit-scroll-snap-points-y: inherit;
-                -webkit-scroll-snap-destination: inherit;
-                -webkit-scroll-snap-coordinate: inherit
</del><ins>+                scroll-snap-type: inherit;
+                scroll-snap-align: inherit;
+                scroll-padding: inherit;
+                scroll-snap-margin: inherit;
</ins><span class="cx">             }
</span><span class="cx"> 
</span><del>-            .inheritNone {
-            }
</del><ins>+            .inheritNone { }
</ins><span class="cx"> 
</span><span class="cx">             #item0 { background-color: red; }
</span><span class="cx">             #item1 { background-color: green; }
</span><span class="lines">@@ -106,7 +93,7 @@
</span><span class="cx">                     &lt;div id=&quot;item5&quot; class=&quot;colorBox&quot;&gt;&lt;/div&gt;
</span><span class="cx">                 &lt;/div&gt;
</span><span class="cx">             &lt;/div&gt;
</span><del>-            &lt;div id=&quot;inheritType&quot; class=&quot;horizontalGallery inheritType&quot; style=&quot;-webkit-scroll-snap-type: inherit;&quot;&gt;
</del><ins>+            &lt;div id=&quot;inheritType&quot; class=&quot;horizontalGallery inheritType&quot; style=&quot;scroll-snap-type: inherit;&quot;&gt;
</ins><span class="cx">                 &lt;div class=&quot;horizontalGalleryDrawer&quot;&gt;
</span><span class="cx">                     &lt;div id=&quot;item0&quot; class=&quot;colorBox&quot;&gt;&lt;/div&gt;
</span><span class="cx">                     &lt;div id=&quot;item1&quot; class=&quot;colorBox&quot;&gt;&lt;/div&gt;
</span><span class="lines">@@ -116,7 +103,7 @@
</span><span class="cx">                     &lt;div id=&quot;item5&quot; class=&quot;colorBox&quot;&gt;&lt;/div&gt;
</span><span class="cx">                 &lt;/div&gt;
</span><span class="cx">             &lt;/div&gt;
</span><del>-            &lt;div id=&quot;inheritXPoints&quot; class=&quot;horizontalGallery inheritXPoints&quot; style=&quot;-webkit-scroll-snap-points-x: inherit;&quot;&gt;
</del><ins>+            &lt;div id=&quot;inheritAlign&quot; class=&quot;horizontalGallery inheritAlign&quot; style=&quot;scroll-snap-align: inherit;&quot;&gt;
</ins><span class="cx">                 &lt;div class=&quot;horizontalGalleryDrawer&quot;&gt;
</span><span class="cx">                     &lt;div id=&quot;item0&quot; class=&quot;colorBox&quot;&gt;&lt;/div&gt;
</span><span class="cx">                     &lt;div id=&quot;item1&quot; class=&quot;colorBox&quot;&gt;&lt;/div&gt;
</span><span class="lines">@@ -126,7 +113,7 @@
</span><span class="cx">                     &lt;div id=&quot;item5&quot; class=&quot;colorBox&quot;&gt;&lt;/div&gt;
</span><span class="cx">                 &lt;/div&gt;
</span><span class="cx">             &lt;/div&gt;
</span><del>-            &lt;div id=&quot;inheritYPoints&quot; class=&quot;horizontalGallery inheritYPoints&quot; style=&quot;-webkit-scroll-snap-points-y: inherit;&quot;&gt;
</del><ins>+            &lt;div id=&quot;inheritPadding&quot; class=&quot;horizontalGallery inheritPadding&quot; style=&quot;scroll-padding: inherit;&quot;&gt;
</ins><span class="cx">                 &lt;div class=&quot;horizontalGalleryDrawer&quot;&gt;
</span><span class="cx">                     &lt;div id=&quot;item0&quot; class=&quot;colorBox&quot;&gt;&lt;/div&gt;
</span><span class="cx">                     &lt;div id=&quot;item1&quot; class=&quot;colorBox&quot;&gt;&lt;/div&gt;
</span><span class="lines">@@ -136,7 +123,7 @@
</span><span class="cx">                     &lt;div id=&quot;item5&quot; class=&quot;colorBox&quot;&gt;&lt;/div&gt;
</span><span class="cx">                 &lt;/div&gt;
</span><span class="cx">             &lt;/div&gt;
</span><del>-            &lt;div id=&quot;inheritDestination&quot; class=&quot;horizontalGallery inheritDestination&quot; style=&quot;-webkit-scroll-snap-destination: inherit;&quot;&gt;
</del><ins>+            &lt;div id=&quot;inheritMargin&quot; class=&quot;horizontalGallery inheritMargin&quot; style=&quot;scroll-snap-margin: inherit;&quot;&gt;
</ins><span class="cx">                 &lt;div class=&quot;horizontalGalleryDrawer&quot;&gt;
</span><span class="cx">                     &lt;div id=&quot;item0&quot; class=&quot;colorBox&quot;&gt;&lt;/div&gt;
</span><span class="cx">                     &lt;div id=&quot;item1&quot; class=&quot;colorBox&quot;&gt;&lt;/div&gt;
</span><span class="lines">@@ -146,7 +133,7 @@
</span><span class="cx">                     &lt;div id=&quot;item5&quot; class=&quot;colorBox&quot;&gt;&lt;/div&gt;
</span><span class="cx">                 &lt;/div&gt;
</span><span class="cx">             &lt;/div&gt;
</span><del>-            &lt;div id=&quot;inheritSnapCoordinate&quot; class=&quot;horizontalGallery inheritSnapCoordinate&quot; style=&quot;-webkit-scroll-snap-coordinate: inherit;&quot;&gt;
</del><ins>+            &lt;div id=&quot;inheritAll&quot; class=&quot;horizontalGallery inheritAll&quot; style=&quot;scroll-snap-type: inherit; scroll-snap-align: inherit; scroll-padding: inherit; scroll-snap-margin: inherit;&quot;&gt;
</ins><span class="cx">                 &lt;div class=&quot;horizontalGalleryDrawer&quot;&gt;
</span><span class="cx">                     &lt;div id=&quot;item0&quot; class=&quot;colorBox&quot;&gt;&lt;/div&gt;
</span><span class="cx">                     &lt;div id=&quot;item1&quot; class=&quot;colorBox&quot;&gt;&lt;/div&gt;
</span><span class="lines">@@ -156,16 +143,6 @@
</span><span class="cx">                     &lt;div id=&quot;item5&quot; class=&quot;colorBox&quot;&gt;&lt;/div&gt;
</span><span class="cx">                 &lt;/div&gt;
</span><span class="cx">             &lt;/div&gt;
</span><del>-            &lt;div id=&quot;inheritAll&quot; class=&quot;horizontalGallery inheritAll&quot; style=&quot;-webkit-scroll-snap-type: inherit; -webkit-scroll-snap-points-x: inherit; -webkit-scroll-snap-points-y: inherit; -webkit-scroll-snap-destination: inherit; -webkit-scroll-snap-coordinate: inherit;&quot;&gt;
-                &lt;div class=&quot;horizontalGalleryDrawer&quot;&gt;
-                    &lt;div id=&quot;item0&quot; class=&quot;colorBox&quot;&gt;&lt;/div&gt;
-                    &lt;div id=&quot;item1&quot; class=&quot;colorBox&quot;&gt;&lt;/div&gt;
-                    &lt;div id=&quot;item2&quot; class=&quot;colorBox&quot;&gt;&lt;/div&gt;
-                    &lt;div id=&quot;item3&quot; class=&quot;colorBox&quot;&gt;&lt;/div&gt;
-                    &lt;div id=&quot;item4&quot; class=&quot;colorBox&quot;&gt;&lt;/div&gt;
-                    &lt;div id=&quot;item5&quot; class=&quot;colorBox&quot;&gt;&lt;/div&gt;
-                &lt;/div&gt;
-            &lt;/div&gt;
</del><span class="cx">             &lt;div id=&quot;inheritNone&quot; class=&quot;horizontalGallery inheritNone&quot;&gt;
</span><span class="cx">                 &lt;div class=&quot;horizontalGalleryDrawer&quot;&gt;
</span><span class="cx">                     &lt;div id=&quot;item0&quot; class=&quot;colorBox&quot;&gt;&lt;/div&gt;
</span><span class="lines">@@ -182,100 +159,136 @@
</span><span class="cx">         description(&quot;Tests 'inherit' on scroll snap properties.&quot;);
</span><span class="cx"> 
</span><span class="cx">         var noInherit = document.getElementById('noInherit');
</span><del>-        shouldBeEmptyString(&quot;noInherit.style['-webkit-scroll-snap-type']&quot;);
-        shouldBeEqualToString(&quot;window.getComputedStyle(noInherit).getPropertyValue('-webkit-scroll-snap-type')&quot;, &quot;mandatory&quot;);
-        shouldBeEmptyString(&quot;noInherit.style['-webkit-scroll-snap-points-x']&quot;);
-        shouldBeEqualToString(&quot;window.getComputedStyle(noInherit).getPropertyValue('-webkit-scroll-snap-points-x')&quot;, &quot;repeat(100%)&quot;);
-        shouldBeEmptyString(&quot;noInherit.style['-webkit-scroll-snap-points-y']&quot;);
-        shouldBeEqualToString(&quot;window.getComputedStyle(noInherit).getPropertyValue('-webkit-scroll-snap-points-y')&quot;, &quot;repeat(100%)&quot;);
-        shouldBeEmptyString(&quot;noInherit.style['-webkit-scroll-snap-destination']&quot;);
-        shouldBeEqualToString(&quot;window.getComputedStyle(noInherit).getPropertyValue('-webkit-scroll-snap-destination')&quot;, &quot;10% 11%&quot;);
-        shouldBeEmptyString(&quot;noInherit.style['-webkit-scroll-snap-coordinate']&quot;);
-        shouldBeEqualToString(&quot;window.getComputedStyle(noInherit).getPropertyValue('-webkit-scroll-snap-coordinate')&quot;, &quot;none&quot;);
</del><ins>+        shouldBeEmptyString(&quot;noInherit.style['scroll-snap-type']&quot;);
+        shouldBeEqualToString(&quot;window.getComputedStyle(noInherit).getPropertyValue('scroll-snap-type')&quot;, &quot;both mandatory&quot;);
+        shouldBeEmptyString(&quot;noInherit.style['scroll-snap-align']&quot;);
+        shouldBeEqualToString(&quot;window.getComputedStyle(noInherit).getPropertyValue('scroll-snap-align')&quot;, &quot;center center&quot;);
+        shouldBeEmptyString(&quot;noInherit.style['scroll-padding']&quot;);
+        shouldBeEmptyString(&quot;noInherit.style['scroll-padding-left']&quot;);
+        shouldBeEmptyString(&quot;noInherit.style['scroll-padding-right']&quot;);
+        shouldBeEmptyString(&quot;noInherit.style['scroll-padding-top']&quot;);
+        shouldBeEmptyString(&quot;noInherit.style['scroll-padding-bottom']&quot;);
+        shouldBeEqualToString(&quot;window.getComputedStyle(noInherit).getPropertyValue('scroll-padding')&quot;, &quot;20px&quot;);
+        shouldBeEmptyString(&quot;noInherit.style['scroll-snap-margin']&quot;);
+        shouldBeEmptyString(&quot;noInherit.style['scroll-snap-margin-left']&quot;);
+        shouldBeEmptyString(&quot;noInherit.style['scroll-snap-margin-right']&quot;);
+        shouldBeEmptyString(&quot;noInherit.style['scroll-snap-margin-top']&quot;);
+        shouldBeEmptyString(&quot;noInherit.style['scroll-snap-margin-bottom']&quot;);
+        shouldBeEqualToString(&quot;window.getComputedStyle(noInherit).getPropertyValue('scroll-snap-margin')&quot;, &quot;0px 1px&quot;);
+        debug(&quot;&quot;);
</ins><span class="cx"> 
</span><span class="cx">         var inheritType = document.getElementById('inheritType');
</span><del>-        shouldBeEqualToString(&quot;inheritType.style['-webkit-scroll-snap-type']&quot;, &quot;inherit&quot;);
-        shouldBeEqualToString(&quot;window.getComputedStyle(inheritType).getPropertyValue('-webkit-scroll-snap-type')&quot;, &quot;proximity&quot;);
-        shouldBeEmptyString(&quot;inheritType.style['-webkit-scroll-snap-points-x']&quot;);
-        shouldBeEqualToString(&quot;window.getComputedStyle(inheritType).getPropertyValue('-webkit-scroll-snap-points-x')&quot;, &quot;repeat(100%)&quot;);
-        shouldBeEmptyString(&quot;inheritType.style['-webkit-scroll-snap-points-y']&quot;);
-        shouldBeEqualToString(&quot;window.getComputedStyle(inheritType).getPropertyValue('-webkit-scroll-snap-points-y')&quot;, &quot;repeat(100%)&quot;);
-        shouldBeEmptyString(&quot;inheritType.style['-webkit-scroll-snap-destination']&quot;);
-        shouldBeEqualToString(&quot;window.getComputedStyle(inheritType).getPropertyValue('-webkit-scroll-snap-destination')&quot;, &quot;0px 0px&quot;);
-        shouldBeEmptyString(&quot;inheritType.style['-webkit-scroll-snap-coordinate']&quot;);
-        shouldBeEqualToString(&quot;window.getComputedStyle(inheritType).getPropertyValue('-webkit-scroll-snap-coordinate')&quot;, &quot;15px 122px&quot;);
</del><ins>+        shouldBeEqualToString(&quot;inheritType.style['scroll-snap-type']&quot;, &quot;inherit&quot;);
+        shouldBeEqualToString(&quot;window.getComputedStyle(inheritType).getPropertyValue('scroll-snap-type')&quot;, &quot;x proximity&quot;);
+        shouldBeEmptyString(&quot;inheritType.style['scroll-snap-align']&quot;);
+        shouldBeEqualToString(&quot;window.getComputedStyle(inheritType).getPropertyValue('scroll-snap-align')&quot;, &quot;center center&quot;);
+        shouldBeEmptyString(&quot;inheritType.style['scroll-padding']&quot;);
+        shouldBeEmptyString(&quot;inheritType.style['scroll-padding-left']&quot;);
+        shouldBeEmptyString(&quot;inheritType.style['scroll-padding-right']&quot;);
+        shouldBeEmptyString(&quot;inheritType.style['scroll-padding-top']&quot;);
+        shouldBeEmptyString(&quot;inheritType.style['scroll-padding-bottom']&quot;);
+        shouldBeEqualToString(&quot;window.getComputedStyle(inheritType).getPropertyValue('scroll-padding')&quot;, &quot;20px&quot;);
+        shouldBeEmptyString(&quot;inheritType.style['scroll-snap-margin']&quot;);
+        shouldBeEmptyString(&quot;inheritType.style['scroll-snap-margin-left']&quot;);
+        shouldBeEmptyString(&quot;inheritType.style['scroll-snap-margin-right']&quot;);
+        shouldBeEmptyString(&quot;inheritType.style['scroll-snap-margin-top']&quot;);
+        shouldBeEmptyString(&quot;inheritType.style['scroll-snap-margin-bottom']&quot;);
+        shouldBeEqualToString(&quot;window.getComputedStyle(inheritType).getPropertyValue('scroll-snap-margin')&quot;, &quot;0px 1px&quot;);
+        debug(&quot;&quot;);
</ins><span class="cx"> 
</span><del>-        var inheritXPoints = document.getElementById('inheritXPoints');
-        shouldBeEmptyString(&quot;inheritXPoints.style['-webkit-scroll-snap-type']&quot;);
-        shouldBeEqualToString(&quot;window.getComputedStyle(inheritXPoints).getPropertyValue('-webkit-scroll-snap-type')&quot;, &quot;mandatory&quot;);
-        shouldBeEqualToString(&quot;inheritXPoints.style['-webkit-scroll-snap-points-x']&quot;, &quot;inherit&quot;);
-        shouldBeEqualToString(&quot;window.getComputedStyle(inheritXPoints).getPropertyValue('-webkit-scroll-snap-points-x')&quot;, &quot;repeat(200%)&quot;);
-        shouldBeEmptyString(&quot;inheritXPoints.style['-webkit-scroll-snap-points-y']&quot;);
-        shouldBeEqualToString(&quot;window.getComputedStyle(inheritXPoints).getPropertyValue('-webkit-scroll-snap-points-y')&quot;, &quot;repeat(100%)&quot;);
-        shouldBeEmptyString(&quot;inheritXPoints.style['-webkit-scroll-snap-destination']&quot;);
-        shouldBeEqualToString(&quot;window.getComputedStyle(inheritXPoints).getPropertyValue('-webkit-scroll-snap-destination')&quot;, &quot;50% 70%&quot;);
-        shouldBeEmptyString(&quot;inheritXPoints.style['-webkit-scroll-snap-coordinate']&quot;);
-        shouldBeEqualToString(&quot;window.getComputedStyle(inheritXPoints).getPropertyValue('-webkit-scroll-snap-coordinate')&quot;, &quot;100% 50%&quot;);
</del><ins>+        var inheritAlign = document.getElementById('inheritAlign');
+        shouldBeEmptyString(&quot;inheritAlign.style['scroll-snap-type']&quot;);
+        shouldBeEqualToString(&quot;window.getComputedStyle(inheritAlign).getPropertyValue('scroll-snap-type')&quot;, &quot;both mandatory&quot;);
+        shouldBeEqualToString(&quot;inheritAlign.style['scroll-snap-align']&quot;, &quot;inherit&quot;);
+        shouldBeEqualToString(&quot;window.getComputedStyle(inheritAlign).getPropertyValue('scroll-snap-align')&quot;, &quot;start end&quot;);
+        shouldBeEmptyString(&quot;inheritAlign.style['scroll-padding']&quot;);
+        shouldBeEmptyString(&quot;inheritAlign.style['scroll-padding-left']&quot;);
+        shouldBeEmptyString(&quot;inheritAlign.style['scroll-padding-right']&quot;);
+        shouldBeEmptyString(&quot;inheritAlign.style['scroll-padding-top']&quot;);
+        shouldBeEmptyString(&quot;inheritAlign.style['scroll-padding-bottom']&quot;);
+        shouldBeEqualToString(&quot;window.getComputedStyle(inheritAlign).getPropertyValue('scroll-padding')&quot;, &quot;20px&quot;);
+        shouldBeEmptyString(&quot;inheritAlign.style['scroll-snap-margin']&quot;);
+        shouldBeEmptyString(&quot;inheritAlign.style['scroll-snap-margin-left']&quot;);
+        shouldBeEmptyString(&quot;inheritAlign.style['scroll-snap-margin-right']&quot;);
+        shouldBeEmptyString(&quot;inheritAlign.style['scroll-snap-margin-top']&quot;);
+        shouldBeEmptyString(&quot;inheritAlign.style['scroll-snap-margin-bottom']&quot;);
+        shouldBeEqualToString(&quot;window.getComputedStyle(inheritAlign).getPropertyValue('scroll-snap-margin')&quot;, &quot;0px 1px&quot;);
+        debug(&quot;&quot;);
</ins><span class="cx"> 
</span><del>-        var inheritYPoints = document.getElementById('inheritYPoints');
-        shouldBeEmptyString(&quot;inheritYPoints.style['-webkit-scroll-snap-type']&quot;);
-        shouldBeEqualToString(&quot;window.getComputedStyle(inheritYPoints).getPropertyValue('-webkit-scroll-snap-type')&quot;, &quot;mandatory&quot;);
-        shouldBeEmptyString(&quot;inheritYPoints.style['-webkit-scroll-snap-points-x']&quot;);
-        shouldBeEqualToString(&quot;window.getComputedStyle(inheritYPoints).getPropertyValue('-webkit-scroll-snap-points-x')&quot;, &quot;repeat(100%)&quot;);
-        shouldBeEqualToString(&quot;inheritYPoints.style['-webkit-scroll-snap-points-y']&quot;, &quot;inherit&quot;);
-        shouldBeEqualToString(&quot;window.getComputedStyle(inheritYPoints).getPropertyValue('-webkit-scroll-snap-points-y')&quot;, &quot;repeat(200%)&quot;);
-        shouldBeEmptyString(&quot;inheritYPoints.style['-webkit-scroll-snap-destination']&quot;);
-        shouldBeEqualToString(&quot;window.getComputedStyle(inheritYPoints).getPropertyValue('-webkit-scroll-snap-destination')&quot;, &quot;10px 20px&quot;);
-        shouldBeEmptyString(&quot;inheritYPoints.style['-webkit-scroll-snap-coordinate']&quot;);
-        shouldBeEqualToString(&quot;window.getComputedStyle(inheritYPoints).getPropertyValue('-webkit-scroll-snap-coordinate')&quot;, &quot;50% 100%&quot;);
</del><ins>+        var inheritPadding = document.getElementById('inheritPadding');
+        shouldBeEmptyString(&quot;inheritPadding.style['scroll-snap-type']&quot;);
+        shouldBeEqualToString(&quot;window.getComputedStyle(inheritPadding).getPropertyValue('scroll-snap-type')&quot;, &quot;both mandatory&quot;);
+        shouldBeEmptyString(&quot;inheritPadding.style['scroll-snap-align']&quot;);
+        shouldBeEqualToString(&quot;window.getComputedStyle(inheritPadding).getPropertyValue('scroll-snap-align')&quot;, &quot;center center&quot;);
+        shouldBeEqualToString(&quot;inheritPadding.style['scroll-padding']&quot;, &quot;inherit&quot;);
+        shouldBeEqualToString(&quot;inheritPadding.style['scroll-padding-left']&quot;, &quot;inherit&quot;);
+        shouldBeEqualToString(&quot;inheritPadding.style['scroll-padding-right']&quot;, &quot;inherit&quot;);
+        shouldBeEqualToString(&quot;inheritPadding.style['scroll-padding-top']&quot;, &quot;inherit&quot;);
+        shouldBeEqualToString(&quot;inheritPadding.style['scroll-padding-bottom']&quot;, &quot;inherit&quot;);
+        shouldBeEqualToString(&quot;window.getComputedStyle(inheritPadding).getPropertyValue('scroll-padding')&quot;, &quot;10%&quot;);
+        shouldBeEmptyString(&quot;inheritPadding.style['scroll-snap-margin']&quot;);
+        shouldBeEmptyString(&quot;inheritPadding.style['scroll-snap-margin-left']&quot;);
+        shouldBeEmptyString(&quot;inheritPadding.style['scroll-snap-margin-right']&quot;);
+        shouldBeEmptyString(&quot;inheritPadding.style['scroll-snap-margin-top']&quot;);
+        shouldBeEmptyString(&quot;inheritPadding.style['scroll-snap-margin-bottom']&quot;);
+        shouldBeEqualToString(&quot;window.getComputedStyle(inheritPadding).getPropertyValue('scroll-snap-margin')&quot;, &quot;0px 1px&quot;);
+        debug(&quot;&quot;);
</ins><span class="cx"> 
</span><del>-        var inheritDestination = document.getElementById('inheritDestination');
-        shouldBeEmptyString(&quot;inheritDestination.style['-webkit-scroll-snap-type']&quot;);
-        shouldBeEqualToString(&quot;window.getComputedStyle(inheritDestination).getPropertyValue('-webkit-scroll-snap-type')&quot;, &quot;proximity&quot;);
-        shouldBeEmptyString(&quot;inheritDestination.style['-webkit-scroll-snap-points-x']&quot;);
-        shouldBeEqualToString(&quot;window.getComputedStyle(inheritDestination).getPropertyValue('-webkit-scroll-snap-points-x')&quot;, &quot;repeat(100%)&quot;);
-        shouldBeEmptyString(&quot;inheritDestination.style['-webkit-scroll-snap-points-y']&quot;);
-        shouldBeEqualToString(&quot;window.getComputedStyle(inheritDestination).getPropertyValue('-webkit-scroll-snap-points-y')&quot;, &quot;repeat(100%)&quot;);
-        shouldBeEqualToString(&quot;inheritDestination.style['-webkit-scroll-snap-destination']&quot;, &quot;inherit&quot;);
-        shouldBeEqualToString(&quot;window.getComputedStyle(inheritDestination).getPropertyValue('-webkit-scroll-snap-destination')&quot;, &quot;25% 25%&quot;);
-        shouldBeEmptyString(&quot;inheritDestination.style['-webkit-scroll-snap-coordinate']&quot;);
-        shouldBeEqualToString(&quot;window.getComputedStyle(inheritDestination).getPropertyValue('-webkit-scroll-snap-coordinate')&quot;, &quot;10px 10px&quot;);
</del><ins>+        var inheritMargin = document.getElementById('inheritMargin');
+        shouldBeEmptyString(&quot;inheritMargin.style['scroll-snap-type']&quot;);
+        shouldBeEqualToString(&quot;window.getComputedStyle(inheritMargin).getPropertyValue('scroll-snap-type')&quot;, &quot;both mandatory&quot;);
+        shouldBeEmptyString(&quot;inheritMargin.style['scroll-snap-align']&quot;);
+        shouldBeEqualToString(&quot;window.getComputedStyle(inheritMargin).getPropertyValue('scroll-snap-align')&quot;, &quot;center center&quot;);
+        shouldBeEmptyString(&quot;inheritMargin.style['scroll-padding']&quot;);
+        shouldBeEmptyString(&quot;inheritMargin.style['scroll-padding-left']&quot;);
+        shouldBeEmptyString(&quot;inheritMargin.style['scroll-padding-right']&quot;);
+        shouldBeEmptyString(&quot;inheritMargin.style['scroll-padding-top']&quot;);
+        shouldBeEmptyString(&quot;inheritMargin.style['scroll-padding-bottom']&quot;);
+        shouldBeEqualToString(&quot;window.getComputedStyle(inheritMargin).getPropertyValue('scroll-padding')&quot;, &quot;20px&quot;);
+        shouldBeEqualToString(&quot;inheritMargin.style['scroll-snap-margin']&quot;, &quot;inherit&quot;);
+        shouldBeEqualToString(&quot;inheritMargin.style['scroll-snap-margin-left']&quot;, &quot;inherit&quot;);
+        shouldBeEqualToString(&quot;inheritMargin.style['scroll-snap-margin-right']&quot;, &quot;inherit&quot;);
+        shouldBeEqualToString(&quot;inheritMargin.style['scroll-snap-margin-top']&quot;, &quot;inherit&quot;);
+        shouldBeEqualToString(&quot;inheritMargin.style['scroll-snap-margin-bottom']&quot;, &quot;inherit&quot;);
+        shouldBeEqualToString(&quot;window.getComputedStyle(inheritMargin).getPropertyValue('scroll-snap-margin')&quot;, &quot;5px 5px 10px 10px&quot;);
+        debug(&quot;&quot;);
</ins><span class="cx"> 
</span><del>-        var inheritSnapCoordinate = document.getElementById('inheritSnapCoordinate');
-        shouldBeEmptyString(&quot;inheritSnapCoordinate.style['-webkit-scroll-snap-type']&quot;);
-        shouldBeEqualToString(&quot;window.getComputedStyle(inheritSnapCoordinate).getPropertyValue('-webkit-scroll-snap-type')&quot;, &quot;mandatory&quot;);
-        shouldBeEmptyString(&quot;inheritSnapCoordinate.style['-webkit-scroll-snap-points-x']&quot;);
-        shouldBeEqualToString(&quot;window.getComputedStyle(inheritSnapCoordinate).getPropertyValue('-webkit-scroll-snap-points-x')&quot;, &quot;repeat(100%)&quot;);
-        shouldBeEmptyString(&quot;inheritSnapCoordinate.style['-webkit-scroll-snap-points-y']&quot;);
-        shouldBeEqualToString(&quot;window.getComputedStyle(inheritSnapCoordinate).getPropertyValue('-webkit-scroll-snap-points-y')&quot;, &quot;repeat(100%)&quot;);
-        shouldBeEmptyString(&quot;inheritSnapCoordinate.style['-webkit-scroll-snap-destination']&quot;);
-        shouldBeEqualToString(&quot;window.getComputedStyle(inheritSnapCoordinate).getPropertyValue('-webkit-scroll-snap-destination')&quot;, &quot;10% 10%&quot;);
-        shouldBeEqualToString(&quot;inheritSnapCoordinate.style['-webkit-scroll-snap-coordinate']&quot;, &quot;inherit&quot;);
-        shouldBeEqualToString(&quot;window.getComputedStyle(inheritSnapCoordinate).getPropertyValue('-webkit-scroll-snap-coordinate')&quot;, &quot;20px 20px&quot;);
-
</del><span class="cx">         var inheritAll = document.getElementById('inheritAll');
</span><del>-        shouldBeEqualToString(&quot;inheritAll.style['-webkit-scroll-snap-type']&quot;, &quot;inherit&quot;);
-        shouldBeEqualToString(&quot;window.getComputedStyle(inheritAll).getPropertyValue('-webkit-scroll-snap-type')&quot;, &quot;proximity&quot;);
-        shouldBeEqualToString(&quot;inheritAll.style['-webkit-scroll-snap-points-x']&quot;, &quot;inherit&quot;);
-        shouldBeEqualToString(&quot;window.getComputedStyle(inheritAll).getPropertyValue('-webkit-scroll-snap-points-x')&quot;, &quot;repeat(200%)&quot;);
-        shouldBeEqualToString(&quot;inheritAll.style['-webkit-scroll-snap-points-y']&quot;, &quot;inherit&quot;);
-        shouldBeEqualToString(&quot;window.getComputedStyle(inheritAll).getPropertyValue('-webkit-scroll-snap-points-y')&quot;, &quot;repeat(200%)&quot;);
-        shouldBeEqualToString(&quot;inheritAll.style['-webkit-scroll-snap-destination']&quot;, &quot;inherit&quot;);
-        shouldBeEqualToString(&quot;window.getComputedStyle(inheritAll).getPropertyValue('-webkit-scroll-snap-destination')&quot;, &quot;25% 25%&quot;);
-        shouldBeEqualToString(&quot;inheritAll.style['-webkit-scroll-snap-coordinate']&quot;, &quot;inherit&quot;);
-        shouldBeEqualToString(&quot;window.getComputedStyle(inheritAll).getPropertyValue('-webkit-scroll-snap-coordinate')&quot;, &quot;20px 20px&quot;);
</del><ins>+        shouldBeEqualToString(&quot;inheritAll.style['scroll-snap-type']&quot;, &quot;inherit&quot;);
+        shouldBeEqualToString(&quot;window.getComputedStyle(inheritAll).getPropertyValue('scroll-snap-type')&quot;, &quot;x proximity&quot;);
+        shouldBeEqualToString(&quot;inheritAll.style['scroll-snap-align']&quot;, &quot;inherit&quot;);
+        shouldBeEqualToString(&quot;window.getComputedStyle(inheritAll).getPropertyValue('scroll-snap-align')&quot;, &quot;start end&quot;);
+        shouldBeEqualToString(&quot;inheritAll.style['scroll-padding']&quot;, &quot;inherit&quot;);
+        shouldBeEqualToString(&quot;inheritAll.style['scroll-padding-left']&quot;, &quot;inherit&quot;);
+        shouldBeEqualToString(&quot;inheritAll.style['scroll-padding-right']&quot;, &quot;inherit&quot;);
+        shouldBeEqualToString(&quot;inheritAll.style['scroll-padding-top']&quot;, &quot;inherit&quot;);
+        shouldBeEqualToString(&quot;inheritAll.style['scroll-padding-bottom']&quot;, &quot;inherit&quot;);
+        shouldBeEqualToString(&quot;window.getComputedStyle(inheritAll).getPropertyValue('scroll-padding')&quot;, &quot;10%&quot;);
+        shouldBeEqualToString(&quot;inheritAll.style['scroll-snap-margin']&quot;, &quot;inherit&quot;);
+        shouldBeEqualToString(&quot;inheritAll.style['scroll-snap-margin-left']&quot;, &quot;inherit&quot;);
+        shouldBeEqualToString(&quot;inheritAll.style['scroll-snap-margin-right']&quot;, &quot;inherit&quot;);
+        shouldBeEqualToString(&quot;inheritAll.style['scroll-snap-margin-top']&quot;, &quot;inherit&quot;);
+        shouldBeEqualToString(&quot;inheritAll.style['scroll-snap-margin-bottom']&quot;, &quot;inherit&quot;);
+        shouldBeEqualToString(&quot;window.getComputedStyle(inheritAll).getPropertyValue('scroll-snap-margin')&quot;, &quot;5px 5px 10px 10px&quot;);
+        debug(&quot;&quot;);
</ins><span class="cx"> 
</span><span class="cx">         var inheritNone = document.getElementById('inheritNone');
</span><del>-        shouldBeEmptyString(&quot;inheritNone.style['-webkit-scroll-snap-type']&quot;);
-        shouldBeEqualToString(&quot;window.getComputedStyle(inheritNone).getPropertyValue('-webkit-scroll-snap-type')&quot;, &quot;none&quot;);
-        shouldBeEmptyString(&quot;inheritNone.style['-webkit-scroll-snap-points-x']&quot;);
-        shouldBeEqualToString(&quot;window.getComputedStyle(inheritNone).getPropertyValue('-webkit-scroll-snap-points-x')&quot;, &quot;none&quot;);
-        shouldBeEmptyString(&quot;inheritNone.style['-webkit-scroll-snap-points-y']&quot;);
-        shouldBeEqualToString(&quot;window.getComputedStyle(inheritNone).getPropertyValue('-webkit-scroll-snap-points-y')&quot;, &quot;none&quot;);
-        shouldBeEmptyString(&quot;inheritNone.style['-webkit-scroll-snap-destination']&quot;);
-        shouldBeEqualToString(&quot;window.getComputedStyle(inheritNone).getPropertyValue('-webkit-scroll-snap-destination')&quot;, &quot;0px 0px&quot;);
-        shouldBeEmptyString(&quot;inheritNone.style['-webkit-scroll-snap-coordinate']&quot;);
-        shouldBeEqualToString(&quot;window.getComputedStyle(inheritNone).getPropertyValue('-webkit-scroll-snap-coordinate')&quot;, &quot;none&quot;);
</del><ins>+        shouldBeEmptyString(&quot;inheritNone.style['scroll-snap-type']&quot;);
+        shouldBeEqualToString(&quot;window.getComputedStyle(inheritNone).getPropertyValue('scroll-snap-type')&quot;, &quot;none&quot;);
+        shouldBeEmptyString(&quot;inheritNone.style['scroll-snap-align']&quot;);
+        shouldBeEqualToString(&quot;window.getComputedStyle(inheritNone).getPropertyValue('scroll-snap-align')&quot;, &quot;none none&quot;);
+        shouldBeEmptyString(&quot;inheritNone.style['scroll-padding']&quot;);
+        shouldBeEmptyString(&quot;inheritNone.style['scroll-padding-left']&quot;);
+        shouldBeEmptyString(&quot;inheritNone.style['scroll-padding-right']&quot;);
+        shouldBeEmptyString(&quot;inheritNone.style['scroll-padding-top']&quot;);
+        shouldBeEmptyString(&quot;inheritNone.style['scroll-padding-bottom']&quot;);
+        shouldBeEqualToString(&quot;window.getComputedStyle(inheritNone).getPropertyValue('scroll-padding')&quot;, &quot;0px&quot;);
+        shouldBeEmptyString(&quot;inheritNone.style['scroll-snap-margin']&quot;);
+        shouldBeEmptyString(&quot;inheritNone.style['scroll-snap-margin-left']&quot;);
+        shouldBeEmptyString(&quot;inheritNone.style['scroll-snap-margin-right']&quot;);
+        shouldBeEmptyString(&quot;inheritNone.style['scroll-snap-margin-top']&quot;);
+        shouldBeEmptyString(&quot;inheritNone.style['scroll-snap-margin-bottom']&quot;);
+        shouldBeEqualToString(&quot;window.getComputedStyle(inheritNone).getPropertyValue('scroll-snap-margin')&quot;, &quot;0px&quot;);
</ins><span class="cx">         &lt;/script&gt;
</span><span class="cx">         &lt;script src=&quot;../../resources/js-test-post.js&quot;&gt;&lt;/script&gt;
</span><span class="cx">     &lt;/body&gt;
</span></span></pre></div>
<a id="trunkLayoutTestscss3scrollsnapscrollsnapinitialexpectedtxt"></a>
<div class="modfile"><h4>Modified: trunk/LayoutTests/css3/scroll-snap/scroll-snap-initial-expected.txt (210023 => 210024)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/css3/scroll-snap/scroll-snap-initial-expected.txt        2016-12-20 18:26:10 UTC (rev 210023)
+++ trunk/LayoutTests/css3/scroll-snap/scroll-snap-initial-expected.txt        2016-12-20 18:44:38 UTC (rev 210024)
</span><span class="lines">@@ -3,86 +3,54 @@
</span><span class="cx"> On success, you will see a series of &quot;PASS&quot; messages, followed by &quot;TEST COMPLETE&quot;.
</span><span class="cx"> 
</span><span class="cx"> 
</span><del>-PASS noInitial.style['-webkit-scroll-snap-type'] is &quot;&quot;
-PASS window.getComputedStyle(noInitial).getPropertyValue('-webkit-scroll-snap-type') is &quot;mandatory&quot;
-PASS noInitial.style['-webkit-scroll-snap-points-x'] is &quot;&quot;
-PASS window.getComputedStyle(noInitial).getPropertyValue('-webkit-scroll-snap-points-x') is &quot;repeat(100%)&quot;
-PASS noInitial.style['-webkit-scroll-snap-points-y'] is &quot;&quot;
-PASS window.getComputedStyle(noInitial).getPropertyValue('-webkit-scroll-snap-points-y') is &quot;repeat(100%)&quot;
-PASS noInitial.style['-webkit-scroll-snap-destination'] is &quot;&quot;
-PASS window.getComputedStyle(noInitial).getPropertyValue('-webkit-scroll-snap-destination') is &quot;10% 11%&quot;
-PASS noInitial.style['-webkit-scroll-snap-coordinate'] is &quot;&quot;
-PASS window.getComputedStyle(noInitial).getPropertyValue('-webkit-scroll-snap-coordinate') is &quot;none&quot;
-PASS initialType.style['-webkit-scroll-snap-type'] is &quot;initial&quot;
-PASS window.getComputedStyle(initialType).getPropertyValue('-webkit-scroll-snap-type') is &quot;none&quot;
-PASS initialType.style['-webkit-scroll-snap-points-x'] is &quot;&quot;
-PASS window.getComputedStyle(initialType).getPropertyValue('-webkit-scroll-snap-points-x') is &quot;repeat(100%)&quot;
-PASS initialType.style['-webkit-scroll-snap-points-y'] is &quot;&quot;
-PASS window.getComputedStyle(initialType).getPropertyValue('-webkit-scroll-snap-points-y') is &quot;repeat(100%)&quot;
-PASS initialType.style['-webkit-scroll-snap-destination'] is &quot;&quot;
-PASS window.getComputedStyle(initialType).getPropertyValue('-webkit-scroll-snap-destination') is &quot;0px 0px&quot;
-PASS initialType.style['-webkit-scroll-snap-coordinate'] is &quot;&quot;
-PASS window.getComputedStyle(initialType).getPropertyValue('-webkit-scroll-snap-coordinate') is &quot;15px 122px&quot;
-PASS initialXPoints.style['-webkit-scroll-snap-type'] is &quot;&quot;
-PASS window.getComputedStyle(initialXPoints).getPropertyValue('-webkit-scroll-snap-type') is &quot;mandatory&quot;
-PASS initialXPoints.style['-webkit-scroll-snap-points-x'] is &quot;initial&quot;
-PASS window.getComputedStyle(initialXPoints).getPropertyValue('-webkit-scroll-snap-points-x') is &quot;none&quot;
-PASS initialXPoints.style['-webkit-scroll-snap-points-y'] is &quot;&quot;
-PASS window.getComputedStyle(initialXPoints).getPropertyValue('-webkit-scroll-snap-points-y') is &quot;repeat(100%)&quot;
-PASS initialXPoints.style['-webkit-scroll-snap-destination'] is &quot;&quot;
-PASS window.getComputedStyle(initialXPoints).getPropertyValue('-webkit-scroll-snap-destination') is &quot;50% 70%&quot;
-PASS initialXPoints.style['-webkit-scroll-snap-coordinate'] is &quot;&quot;
-PASS window.getComputedStyle(initialXPoints).getPropertyValue('-webkit-scroll-snap-coordinate') is &quot;100% 50%&quot;
-PASS initialYPoints.style['-webkit-scroll-snap-type'] is &quot;&quot;
-PASS window.getComputedStyle(initialYPoints).getPropertyValue('-webkit-scroll-snap-type') is &quot;mandatory&quot;
-PASS initialYPoints.style['-webkit-scroll-snap-points-x'] is &quot;&quot;
-PASS window.getComputedStyle(initialYPoints).getPropertyValue('-webkit-scroll-snap-points-x') is &quot;repeat(100%)&quot;
-PASS initialYPoints.style['-webkit-scroll-snap-points-y'] is &quot;initial&quot;
-PASS window.getComputedStyle(initialYPoints).getPropertyValue('-webkit-scroll-snap-points-y') is &quot;none&quot;
-PASS initialYPoints.style['-webkit-scroll-snap-destination'] is &quot;&quot;
-PASS window.getComputedStyle(initialYPoints).getPropertyValue('-webkit-scroll-snap-destination') is &quot;10px 20px&quot;
-PASS initialYPoints.style['-webkit-scroll-snap-coordinate'] is &quot;&quot;
-PASS window.getComputedStyle(initialYPoints).getPropertyValue('-webkit-scroll-snap-coordinate') is &quot;50% 100%&quot;
-PASS initialDestination.style['-webkit-scroll-snap-type'] is &quot;&quot;
-PASS window.getComputedStyle(initialDestination).getPropertyValue('-webkit-scroll-snap-type') is &quot;proximity&quot;
-PASS initialDestination.style['-webkit-scroll-snap-points-x'] is &quot;&quot;
-PASS window.getComputedStyle(initialDestination).getPropertyValue('-webkit-scroll-snap-points-x') is &quot;repeat(100%)&quot;
-PASS initialDestination.style['-webkit-scroll-snap-points-y'] is &quot;&quot;
-PASS window.getComputedStyle(initialDestination).getPropertyValue('-webkit-scroll-snap-points-y') is &quot;repeat(100%)&quot;
-PASS initialDestination.style['-webkit-scroll-snap-destination'] is &quot;initial&quot;
-PASS window.getComputedStyle(initialDestination).getPropertyValue('-webkit-scroll-snap-destination') is &quot;0px 0px&quot;
-PASS initialDestination.style['-webkit-scroll-snap-coordinate'] is &quot;&quot;
-PASS window.getComputedStyle(initialDestination).getPropertyValue('-webkit-scroll-snap-coordinate') is &quot;10px 10px&quot;
-PASS initialSnapCoordinate.style['-webkit-scroll-snap-type'] is &quot;&quot;
-PASS window.getComputedStyle(initialSnapCoordinate).getPropertyValue('-webkit-scroll-snap-type') is &quot;mandatory&quot;
-PASS initialSnapCoordinate.style['-webkit-scroll-snap-points-x'] is &quot;&quot;
-PASS window.getComputedStyle(initialSnapCoordinate).getPropertyValue('-webkit-scroll-snap-points-x') is &quot;repeat(100%)&quot;
-PASS initialSnapCoordinate.style['-webkit-scroll-snap-points-y'] is &quot;&quot;
-PASS window.getComputedStyle(initialSnapCoordinate).getPropertyValue('-webkit-scroll-snap-points-y') is &quot;repeat(100%)&quot;
-PASS initialSnapCoordinate.style['-webkit-scroll-snap-destination'] is &quot;&quot;
-PASS window.getComputedStyle(initialSnapCoordinate).getPropertyValue('-webkit-scroll-snap-destination') is &quot;10% 10%&quot;
-PASS initialSnapCoordinate.style['-webkit-scroll-snap-coordinate'] is &quot;initial&quot;
-PASS window.getComputedStyle(initialSnapCoordinate).getPropertyValue('-webkit-scroll-snap-coordinate') is &quot;none&quot;
-PASS allInitial.style['-webkit-scroll-snap-type'] is &quot;initial&quot;
-PASS window.getComputedStyle(allInitial).getPropertyValue('-webkit-scroll-snap-type') is &quot;none&quot;
-PASS allInitial.style['-webkit-scroll-snap-points-x'] is &quot;initial&quot;
-PASS window.getComputedStyle(allInitial).getPropertyValue('-webkit-scroll-snap-points-x') is &quot;none&quot;
-PASS allInitial.style['-webkit-scroll-snap-points-y'] is &quot;initial&quot;
-PASS window.getComputedStyle(allInitial).getPropertyValue('-webkit-scroll-snap-points-y') is &quot;none&quot;
-PASS allInitial.style['-webkit-scroll-snap-destination'] is &quot;initial&quot;
-PASS window.getComputedStyle(allInitial).getPropertyValue('-webkit-scroll-snap-destination') is &quot;0px 0px&quot;
-PASS allInitial.style['-webkit-scroll-snap-coordinate'] is &quot;initial&quot;
-PASS window.getComputedStyle(allInitial).getPropertyValue('-webkit-scroll-snap-coordinate') is &quot;none&quot;
-PASS allInitialY.style['-webkit-scroll-snap-type'] is &quot;initial&quot;
-PASS window.getComputedStyle(allInitialY).getPropertyValue('-webkit-scroll-snap-type') is &quot;none&quot;
-PASS allInitialY.style['-webkit-scroll-snap-points-x'] is &quot;initial&quot;
-PASS window.getComputedStyle(allInitialY).getPropertyValue('-webkit-scroll-snap-points-x') is &quot;none&quot;
-PASS allInitialY.style['-webkit-scroll-snap-points-y'] is &quot;initial&quot;
-PASS window.getComputedStyle(allInitialY).getPropertyValue('-webkit-scroll-snap-points-y') is &quot;none&quot;
-PASS allInitialY.style['-webkit-scroll-snap-destination'] is &quot;initial&quot;
-PASS window.getComputedStyle(allInitialY).getPropertyValue('-webkit-scroll-snap-destination') is &quot;0px 0px&quot;
-PASS allInitialY.style['-webkit-scroll-snap-coordinate'] is &quot;initial&quot;
-PASS window.getComputedStyle(allInitialY).getPropertyValue('-webkit-scroll-snap-coordinate') is &quot;none&quot;
</del><ins>+PASS noInitial.style['scroll-snap-type'] is &quot;&quot;
+PASS window.getComputedStyle(noInitial).getPropertyValue('scroll-snap-type') is &quot;both proximity&quot;
+PASS noInitial.style['scroll-padding'] is &quot;&quot;
+PASS window.getComputedStyle(noInitial).getPropertyValue('scroll-padding') is &quot;20px&quot;
+PASS noInitial.style['scroll-snap-margin'] is &quot;&quot;
+PASS window.getComputedStyle(noInitial).getPropertyValue('scroll-snap-margin') is &quot;1px&quot;
+PASS noInitial.style['scroll-snap-align'] is &quot;&quot;
+PASS window.getComputedStyle(noInitial).getPropertyValue('scroll-snap-align') is &quot;center center&quot;
+PASS initialType.style['scroll-snap-type'] is &quot;initial&quot;
+PASS window.getComputedStyle(initialType).getPropertyValue('scroll-snap-type') is &quot;none&quot;
+PASS initialType.style['scroll-padding'] is &quot;&quot;
+PASS window.getComputedStyle(initialType).getPropertyValue('scroll-padding') is &quot;20px&quot;
+PASS initialType.style['scroll-snap-margin'] is &quot;&quot;
+PASS window.getComputedStyle(initialType).getPropertyValue('scroll-snap-margin') is &quot;1px&quot;
+PASS initialType.style['scroll-snap-align'] is &quot;&quot;
+PASS window.getComputedStyle(initialType).getPropertyValue('scroll-snap-align') is &quot;center center&quot;
+PASS initialPadding.style['scroll-snap-type'] is &quot;&quot;
+PASS window.getComputedStyle(initialPadding).getPropertyValue('scroll-snap-type') is &quot;both proximity&quot;
+PASS initialPadding.style['scroll-padding'] is &quot;initial&quot;
+PASS window.getComputedStyle(initialPadding).getPropertyValue('scroll-padding') is &quot;0px&quot;
+PASS initialPadding.style['scroll-snap-margin'] is &quot;&quot;
+PASS window.getComputedStyle(initialPadding).getPropertyValue('scroll-snap-margin') is &quot;1px&quot;
+PASS initialPadding.style['scroll-snap-align'] is &quot;&quot;
+PASS window.getComputedStyle(initialPadding).getPropertyValue('scroll-snap-align') is &quot;center center&quot;
+PASS initialMargin.style['scroll-snap-type'] is &quot;&quot;
+PASS window.getComputedStyle(initialMargin).getPropertyValue('scroll-snap-type') is &quot;both proximity&quot;
+PASS initialMargin.style['scroll-padding'] is &quot;&quot;
+PASS window.getComputedStyle(initialMargin).getPropertyValue('scroll-padding') is &quot;20px&quot;
+PASS initialMargin.style['scroll-snap-margin'] is &quot;initial&quot;
+PASS window.getComputedStyle(initialMargin).getPropertyValue('scroll-snap-margin') is &quot;0px&quot;
+PASS initialMargin.style['scroll-snap-align'] is &quot;&quot;
+PASS window.getComputedStyle(initialMargin).getPropertyValue('scroll-snap-align') is &quot;center center&quot;
+PASS initialAlign.style['scroll-snap-type'] is &quot;&quot;
+PASS window.getComputedStyle(initialAlign).getPropertyValue('scroll-snap-type') is &quot;both proximity&quot;
+PASS initialAlign.style['scroll-padding'] is &quot;&quot;
+PASS window.getComputedStyle(initialAlign).getPropertyValue('scroll-padding') is &quot;20px&quot;
+PASS initialAlign.style['scroll-snap-margin'] is &quot;&quot;
+PASS window.getComputedStyle(initialAlign).getPropertyValue('scroll-snap-margin') is &quot;1px&quot;
+PASS initialAlign.style['scroll-snap-align'] is &quot;initial&quot;
+PASS window.getComputedStyle(initialAlign).getPropertyValue('scroll-snap-align') is &quot;none none&quot;
+PASS allInitial.style['scroll-snap-type'] is &quot;initial&quot;
+PASS window.getComputedStyle(allInitial).getPropertyValue('scroll-snap-type') is &quot;none&quot;
+PASS allInitial.style['scroll-padding'] is &quot;initial&quot;
+PASS window.getComputedStyle(allInitial).getPropertyValue('scroll-padding') is &quot;0px&quot;
+PASS allInitial.style['scroll-snap-margin'] is &quot;initial&quot;
+PASS window.getComputedStyle(allInitial).getPropertyValue('scroll-snap-margin') is &quot;0px&quot;
+PASS allInitial.style['scroll-snap-align'] is &quot;initial&quot;
+PASS window.getComputedStyle(allInitial).getPropertyValue('scroll-snap-align') is &quot;none none&quot;
</ins><span class="cx"> PASS successfullyParsed is true
</span><span class="cx"> 
</span><span class="cx"> TEST COMPLETE
</span></span></pre></div>
<a id="trunkLayoutTestscss3scrollsnapscrollsnapinitialhtml"></a>
<div class="modfile"><h4>Modified: trunk/LayoutTests/css3/scroll-snap/scroll-snap-initial.html (210023 => 210024)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/css3/scroll-snap/scroll-snap-initial.html        2016-12-20 18:26:10 UTC (rev 210023)
+++ trunk/LayoutTests/css3/scroll-snap/scroll-snap-initial.html        2016-12-20 18:44:38 UTC (rev 210024)
</span><span class="lines">@@ -30,59 +30,45 @@
</span><span class="cx">             }
</span><span class="cx"> 
</span><span class="cx">             .noInitial {
</span><del>-                -webkit-scroll-snap-type: mandatory;
-                -webkit-scroll-snap-points-x: repeat(100%);
-                -webkit-scroll-snap-points-y: repeat(100%);
-                -webkit-scroll-snap-destination: 10% 11%;
-                -webkit-scroll-snap-coordinate: none;
</del><ins>+                scroll-snap-type: both;
+                scroll-snap-align: center;
+                scroll-padding: 20px;
+                scroll-snap-margin: 1px;
</ins><span class="cx">             }
</span><span class="cx"> 
</span><span class="cx">             .initialType {
</span><del>-                -webkit-scroll-snap-type: initial;
-                -webkit-scroll-snap-points-x: repeat(100%);
-                -webkit-scroll-snap-points-y: repeat(100%);
-                -webkit-scroll-snap-destination: 0px 0px;
-                -webkit-scroll-snap-coordinate: 15px 122px;
</del><ins>+                scroll-snap-type: initial;
+                scroll-snap-align: center;
+                scroll-padding: 20px;
+                scroll-snap-margin: 1px;
</ins><span class="cx">             }
</span><span class="cx"> 
</span><del>-            .initialXPoints {
-                -webkit-scroll-snap-type: mandatory;
-                -webkit-scroll-snap-points-x: initial;
-                -webkit-scroll-snap-points-y: repeat(100%);
-                -webkit-scroll-snap-destination: 50% 70%;
-                -webkit-scroll-snap-coordinate: 100% 50%;
</del><ins>+            .initialPadding {
+                scroll-snap-type: both;
+                scroll-snap-align: center;
+                scroll-padding: initial;
+                scroll-snap-margin: 1px;
</ins><span class="cx">             }
</span><span class="cx"> 
</span><del>-            .initialYPoints {
-                -webkit-scroll-snap-type: mandatory;
-                -webkit-scroll-snap-points-x: repeat(100%);
-                -webkit-scroll-snap-points-y: initial;
-                -webkit-scroll-snap-destination: 10px 20px;
-                -webkit-scroll-snap-coordinate: 50% 100%;
</del><ins>+            .initialMargin {
+                scroll-snap-type: both;
+                scroll-snap-align: center;
+                scroll-padding: 20px;
+                scroll-snap-margin: initial;
</ins><span class="cx">             }
</span><span class="cx"> 
</span><del>-            .initialDestination {
-                -webkit-scroll-snap-type: proximity;
-                -webkit-scroll-snap-points-x: repeat(100%);
-                -webkit-scroll-snap-points-y: repeat(100%);
-                -webkit-scroll-snap-destination: initial;
-                -webkit-scroll-snap-coordinate: 10px 10px;
</del><ins>+            .initialAlign {
+                scroll-snap-type: both;
+                scroll-snap-align: initial;
+                scroll-padding: 20px;
+                scroll-snap-margin: 1px;
</ins><span class="cx">             }
</span><span class="cx"> 
</span><del>-            .initialSnapCoordinate {
-                -webkit-scroll-snap-type: mandatory;
-                -webkit-scroll-snap-points-x: repeat(100%);
-                -webkit-scroll-snap-points-y: repeat(100%);
-                -webkit-scroll-snap-destination: 10% 10%;
-                -webkit-scroll-snap-coordinate: initial;
-            }
-
</del><span class="cx">             .allInitial {
</span><del>-                -webkit-scroll-snap-type: initial;
-                -webkit-scroll-snap-points-x: initial;
-                -webkit-scroll-snap-points-y: initial;
-                -webkit-scroll-snap-destination: initial;
-                -webkit-scroll-snap-coordinate: initial
</del><ins>+                scroll-snap-type: initial;
+                scroll-snap-align: initial;
+                scroll-padding: initial;
+                scroll-snap-margin: initial;
</ins><span class="cx">             }
</span><span class="cx"> 
</span><span class="cx">             #item0 { background-color: red; }
</span><span class="lines">@@ -106,7 +92,7 @@
</span><span class="cx">                     &lt;div id=&quot;item5&quot; class=&quot;colorBox&quot;&gt;&lt;/div&gt;
</span><span class="cx">                 &lt;/div&gt;
</span><span class="cx">             &lt;/div&gt;
</span><del>-            &lt;div id=&quot;initialType&quot; class=&quot;horizontalGallery initialType&quot; style=&quot;-webkit-scroll-snap-type: initial&quot;&gt;
</del><ins>+            &lt;div id=&quot;initialType&quot; class=&quot;horizontalGallery initialType&quot; style=&quot;scroll-snap-type: initial&quot;&gt;
</ins><span class="cx">                 &lt;div class=&quot;horizontalGalleryDrawer&quot;&gt;
</span><span class="cx">                     &lt;div id=&quot;item0&quot; class=&quot;colorBox&quot;&gt;&lt;/div&gt;
</span><span class="cx">                     &lt;div id=&quot;item1&quot; class=&quot;colorBox&quot;&gt;&lt;/div&gt;
</span><span class="lines">@@ -116,7 +102,7 @@
</span><span class="cx">                     &lt;div id=&quot;item5&quot; class=&quot;colorBox&quot;&gt;&lt;/div&gt;
</span><span class="cx">                 &lt;/div&gt;
</span><span class="cx">             &lt;/div&gt;
</span><del>-            &lt;div id=&quot;initialXPoints&quot; class=&quot;horizontalGallery initialXPoints&quot; style=&quot;-webkit-scroll-snap-points-x: initial&quot;&gt;
</del><ins>+            &lt;div id=&quot;initialPadding&quot; class=&quot;horizontalGallery initialPadding&quot; style=&quot;scroll-padding: initial&quot;&gt;
</ins><span class="cx">                 &lt;div class=&quot;horizontalGalleryDrawer&quot;&gt;
</span><span class="cx">                     &lt;div id=&quot;item0&quot; class=&quot;colorBox&quot;&gt;&lt;/div&gt;
</span><span class="cx">                     &lt;div id=&quot;item1&quot; class=&quot;colorBox&quot;&gt;&lt;/div&gt;
</span><span class="lines">@@ -126,7 +112,7 @@
</span><span class="cx">                     &lt;div id=&quot;item5&quot; class=&quot;colorBox&quot;&gt;&lt;/div&gt;
</span><span class="cx">                 &lt;/div&gt;
</span><span class="cx">             &lt;/div&gt;
</span><del>-            &lt;div id=&quot;initialYPoints&quot; class=&quot;horizontalGallery initialYPoints&quot; style=&quot;-webkit-scroll-snap-points-y: initial&quot;&gt;
</del><ins>+            &lt;div id=&quot;initialMargin&quot; class=&quot;horizontalGallery initialMargin&quot; style=&quot;scroll-snap-margin: initial&quot;&gt;
</ins><span class="cx">                 &lt;div class=&quot;horizontalGalleryDrawer&quot;&gt;
</span><span class="cx">                     &lt;div id=&quot;item0&quot; class=&quot;colorBox&quot;&gt;&lt;/div&gt;
</span><span class="cx">                     &lt;div id=&quot;item1&quot; class=&quot;colorBox&quot;&gt;&lt;/div&gt;
</span><span class="lines">@@ -136,7 +122,7 @@
</span><span class="cx">                     &lt;div id=&quot;item5&quot; class=&quot;colorBox&quot;&gt;&lt;/div&gt;
</span><span class="cx">                 &lt;/div&gt;
</span><span class="cx">             &lt;/div&gt;
</span><del>-            &lt;div id=&quot;initialDestination&quot; class=&quot;horizontalGallery initialDestination&quot; style=&quot;-webkit-scroll-snap-destination: initial&quot;&gt;
</del><ins>+            &lt;div id=&quot;initialAlign&quot; class=&quot;horizontalGallery initialAlign&quot; style=&quot;scroll-snap-align: initial&quot;&gt;
</ins><span class="cx">                 &lt;div class=&quot;horizontalGalleryDrawer&quot;&gt;
</span><span class="cx">                     &lt;div id=&quot;item0&quot; class=&quot;colorBox&quot;&gt;&lt;/div&gt;
</span><span class="cx">                     &lt;div id=&quot;item1&quot; class=&quot;colorBox&quot;&gt;&lt;/div&gt;
</span><span class="lines">@@ -146,7 +132,7 @@
</span><span class="cx">                     &lt;div id=&quot;item5&quot; class=&quot;colorBox&quot;&gt;&lt;/div&gt;
</span><span class="cx">                 &lt;/div&gt;
</span><span class="cx">             &lt;/div&gt;
</span><del>-            &lt;div id=&quot;initialSnapCoordinate&quot; class=&quot;horizontalGallery initialSnapCoordinate&quot; style=&quot;-webkit-scroll-snap-coordinate: initial&quot;&gt;
</del><ins>+            &lt;div id=&quot;allInitial&quot; class=&quot;horizontalGallery allInitial&quot; style=&quot;scroll-snap-type: initial; scroll-padding: initial; scroll-snap-margin: initial; scroll-snap-align: initial;&quot;&gt;
</ins><span class="cx">                 &lt;div class=&quot;horizontalGalleryDrawer&quot;&gt;
</span><span class="cx">                     &lt;div id=&quot;item0&quot; class=&quot;colorBox&quot;&gt;&lt;/div&gt;
</span><span class="cx">                     &lt;div id=&quot;item1&quot; class=&quot;colorBox&quot;&gt;&lt;/div&gt;
</span><span class="lines">@@ -156,17 +142,7 @@
</span><span class="cx">                     &lt;div id=&quot;item5&quot; class=&quot;colorBox&quot;&gt;&lt;/div&gt;
</span><span class="cx">                 &lt;/div&gt;
</span><span class="cx">             &lt;/div&gt;
</span><del>-            &lt;div id=&quot;allInitial&quot; class=&quot;horizontalGallery allInitial&quot; style=&quot;-webkit-scroll-snap-type: initial; -webkit-scroll-snap-points-x: initial; -webkit-scroll-snap-points-y: initial; -webkit-scroll-snap-destination: initial; -webkit-scroll-snap-coordinate: initial&quot;&gt;
-                &lt;div class=&quot;horizontalGalleryDrawer&quot;&gt;
-                    &lt;div id=&quot;item0&quot; class=&quot;colorBox&quot;&gt;&lt;/div&gt;
-                    &lt;div id=&quot;item1&quot; class=&quot;colorBox&quot;&gt;&lt;/div&gt;
-                    &lt;div id=&quot;item2&quot; class=&quot;colorBox&quot;&gt;&lt;/div&gt;
-                    &lt;div id=&quot;item3&quot; class=&quot;colorBox&quot;&gt;&lt;/div&gt;
-                    &lt;div id=&quot;item4&quot; class=&quot;colorBox&quot;&gt;&lt;/div&gt;
-                    &lt;div id=&quot;item5&quot; class=&quot;colorBox&quot;&gt;&lt;/div&gt;
-                &lt;/div&gt;
-            &lt;/div&gt;
-            &lt;div id=&quot;allInitialY&quot; class=&quot;verticalGallery noInitial&quot; style=&quot;-webkit-scroll-snap-type: initial; -webkit-scroll-snap-points-x: initial; -webkit-scroll-snap-points-y: initial; -webkit-scroll-snap-destination: initial; -webkit-scroll-snap-coordinate: initial&quot;&gt;
</del><ins>+            &lt;div id=&quot;allInitialY&quot; class=&quot;verticalGallery noInitial&quot; style=&quot;scroll-snap-type: initial; scroll-padding: initial; scroll-snap-margin: initial; scroll-snap-align: initial;&quot;&gt;
</ins><span class="cx">                 &lt;div class=&quot;verticalGalleryDrawer&quot;&gt;
</span><span class="cx">                     &lt;div id=&quot;item0&quot; class=&quot;colorBox&quot;&gt;&lt;/div&gt;
</span><span class="cx">                     &lt;div id=&quot;item1&quot; class=&quot;colorBox&quot;&gt;&lt;/div&gt;
</span><span class="lines">@@ -182,100 +158,64 @@
</span><span class="cx">         description(&quot;Tests 'initial' on scroll snap properties.&quot;);
</span><span class="cx"> 
</span><span class="cx">         var noInitial = document.getElementById('noInitial');
</span><del>-        shouldBeEmptyString(&quot;noInitial.style['-webkit-scroll-snap-type']&quot;);
-        shouldBeEqualToString(&quot;window.getComputedStyle(noInitial).getPropertyValue('-webkit-scroll-snap-type')&quot;, &quot;mandatory&quot;);
-        shouldBeEmptyString(&quot;noInitial.style['-webkit-scroll-snap-points-x']&quot;);
-        shouldBeEqualToString(&quot;window.getComputedStyle(noInitial).getPropertyValue('-webkit-scroll-snap-points-x')&quot;, &quot;repeat(100%)&quot;);
-        shouldBeEmptyString(&quot;noInitial.style['-webkit-scroll-snap-points-y']&quot;);
-        shouldBeEqualToString(&quot;window.getComputedStyle(noInitial).getPropertyValue('-webkit-scroll-snap-points-y')&quot;, &quot;repeat(100%)&quot;);
-        shouldBeEmptyString(&quot;noInitial.style['-webkit-scroll-snap-destination']&quot;);
-        shouldBeEqualToString(&quot;window.getComputedStyle(noInitial).getPropertyValue('-webkit-scroll-snap-destination')&quot;, &quot;10% 11%&quot;);
-        shouldBeEmptyString(&quot;noInitial.style['-webkit-scroll-snap-coordinate']&quot;);
-        shouldBeEqualToString(&quot;window.getComputedStyle(noInitial).getPropertyValue('-webkit-scroll-snap-coordinate')&quot;, &quot;none&quot;);
</del><ins>+        shouldBeEmptyString(&quot;noInitial.style['scroll-snap-type']&quot;);
+        shouldBeEqualToString(&quot;window.getComputedStyle(noInitial).getPropertyValue('scroll-snap-type')&quot;, &quot;both proximity&quot;);
+        shouldBeEmptyString(&quot;noInitial.style['scroll-padding']&quot;);
+        shouldBeEqualToString(&quot;window.getComputedStyle(noInitial).getPropertyValue('scroll-padding')&quot;, &quot;20px&quot;);
+        shouldBeEmptyString(&quot;noInitial.style['scroll-snap-margin']&quot;);
+        shouldBeEqualToString(&quot;window.getComputedStyle(noInitial).getPropertyValue('scroll-snap-margin')&quot;, &quot;1px&quot;);
+        shouldBeEmptyString(&quot;noInitial.style['scroll-snap-align']&quot;);
+        shouldBeEqualToString(&quot;window.getComputedStyle(noInitial).getPropertyValue('scroll-snap-align')&quot;, &quot;center center&quot;);
</ins><span class="cx"> 
</span><span class="cx">         var initialType = document.getElementById('initialType');
</span><del>-        shouldBeEqualToString(&quot;initialType.style['-webkit-scroll-snap-type']&quot;, &quot;initial&quot;);
-        shouldBeEqualToString(&quot;window.getComputedStyle(initialType).getPropertyValue('-webkit-scroll-snap-type')&quot;, &quot;none&quot;);
-        shouldBeEmptyString(&quot;initialType.style['-webkit-scroll-snap-points-x']&quot;);
-        shouldBeEqualToString(&quot;window.getComputedStyle(initialType).getPropertyValue('-webkit-scroll-snap-points-x')&quot;, &quot;repeat(100%)&quot;);
-        shouldBeEmptyString(&quot;initialType.style['-webkit-scroll-snap-points-y']&quot;);
-        shouldBeEqualToString(&quot;window.getComputedStyle(initialType).getPropertyValue('-webkit-scroll-snap-points-y')&quot;, &quot;repeat(100%)&quot;);
-        shouldBeEmptyString(&quot;initialType.style['-webkit-scroll-snap-destination']&quot;);
-        shouldBeEqualToString(&quot;window.getComputedStyle(initialType).getPropertyValue('-webkit-scroll-snap-destination')&quot;, &quot;0px 0px&quot;);
-        shouldBeEmptyString(&quot;initialType.style['-webkit-scroll-snap-coordinate']&quot;);
-        shouldBeEqualToString(&quot;window.getComputedStyle(initialType).getPropertyValue('-webkit-scroll-snap-coordinate')&quot;, &quot;15px 122px&quot;);
</del><ins>+        shouldBeEqualToString(&quot;initialType.style['scroll-snap-type']&quot;, &quot;initial&quot;);
+        shouldBeEqualToString(&quot;window.getComputedStyle(initialType).getPropertyValue('scroll-snap-type')&quot;, &quot;none&quot;);
+        shouldBeEmptyString(&quot;initialType.style['scroll-padding']&quot;);
+        shouldBeEqualToString(&quot;window.getComputedStyle(initialType).getPropertyValue('scroll-padding')&quot;, &quot;20px&quot;);
+        shouldBeEmptyString(&quot;initialType.style['scroll-snap-margin']&quot;);
+        shouldBeEqualToString(&quot;window.getComputedStyle(initialType).getPropertyValue('scroll-snap-margin')&quot;, &quot;1px&quot;);
+        shouldBeEmptyString(&quot;initialType.style['scroll-snap-align']&quot;);
+        shouldBeEqualToString(&quot;window.getComputedStyle(initialType).getPropertyValue('scroll-snap-align')&quot;, &quot;center center&quot;);
</ins><span class="cx"> 
</span><del>-        var initialXPoints = document.getElementById('initialXPoints');
-        shouldBeEmptyString(&quot;initialXPoints.style['-webkit-scroll-snap-type']&quot;);
-        shouldBeEqualToString(&quot;window.getComputedStyle(initialXPoints).getPropertyValue('-webkit-scroll-snap-type')&quot;, &quot;mandatory&quot;);
-        shouldBeEqualToString(&quot;initialXPoints.style['-webkit-scroll-snap-points-x']&quot;, &quot;initial&quot;);
-        shouldBeEqualToString(&quot;window.getComputedStyle(initialXPoints).getPropertyValue('-webkit-scroll-snap-points-x')&quot;, &quot;none&quot;);
-        shouldBeEmptyString(&quot;initialXPoints.style['-webkit-scroll-snap-points-y']&quot;);
-        shouldBeEqualToString(&quot;window.getComputedStyle(initialXPoints).getPropertyValue('-webkit-scroll-snap-points-y')&quot;, &quot;repeat(100%)&quot;);
-        shouldBeEmptyString(&quot;initialXPoints.style['-webkit-scroll-snap-destination']&quot;);
-        shouldBeEqualToString(&quot;window.getComputedStyle(initialXPoints).getPropertyValue('-webkit-scroll-snap-destination')&quot;, &quot;50% 70%&quot;);
-        shouldBeEmptyString(&quot;initialXPoints.style['-webkit-scroll-snap-coordinate']&quot;);
-        shouldBeEqualToString(&quot;window.getComputedStyle(initialXPoints).getPropertyValue('-webkit-scroll-snap-coordinate')&quot;, &quot;100% 50%&quot;);
</del><ins>+        var initialPadding = document.getElementById('initialPadding');
+        shouldBeEmptyString(&quot;initialPadding.style['scroll-snap-type']&quot;);
+        shouldBeEqualToString(&quot;window.getComputedStyle(initialPadding).getPropertyValue('scroll-snap-type')&quot;, &quot;both proximity&quot;);
+        shouldBeEqualToString(&quot;initialPadding.style['scroll-padding']&quot;, &quot;initial&quot;);
+        shouldBeEqualToString(&quot;window.getComputedStyle(initialPadding).getPropertyValue('scroll-padding')&quot;, &quot;0px&quot;);
+        shouldBeEmptyString(&quot;initialPadding.style['scroll-snap-margin']&quot;);
+        shouldBeEqualToString(&quot;window.getComputedStyle(initialPadding).getPropertyValue('scroll-snap-margin')&quot;, &quot;1px&quot;);
+        shouldBeEmptyString(&quot;initialPadding.style['scroll-snap-align']&quot;);
+        shouldBeEqualToString(&quot;window.getComputedStyle(initialPadding).getPropertyValue('scroll-snap-align')&quot;, &quot;center center&quot;);
</ins><span class="cx"> 
</span><del>-        var initialYPoints = document.getElementById('initialYPoints');
-        shouldBeEmptyString(&quot;initialYPoints.style['-webkit-scroll-snap-type']&quot;);
-        shouldBeEqualToString(&quot;window.getComputedStyle(initialYPoints).getPropertyValue('-webkit-scroll-snap-type')&quot;, &quot;mandatory&quot;);
-        shouldBeEmptyString(&quot;initialYPoints.style['-webkit-scroll-snap-points-x']&quot;);
-        shouldBeEqualToString(&quot;window.getComputedStyle(initialYPoints).getPropertyValue('-webkit-scroll-snap-points-x')&quot;, &quot;repeat(100%)&quot;);
-        shouldBeEqualToString(&quot;initialYPoints.style['-webkit-scroll-snap-points-y']&quot;, &quot;initial&quot;);
-        shouldBeEqualToString(&quot;window.getComputedStyle(initialYPoints).getPropertyValue('-webkit-scroll-snap-points-y')&quot;, &quot;none&quot;);
-        shouldBeEmptyString(&quot;initialYPoints.style['-webkit-scroll-snap-destination']&quot;);
-        shouldBeEqualToString(&quot;window.getComputedStyle(initialYPoints).getPropertyValue('-webkit-scroll-snap-destination')&quot;, &quot;10px 20px&quot;);
-        shouldBeEmptyString(&quot;initialYPoints.style['-webkit-scroll-snap-coordinate']&quot;);
-        shouldBeEqualToString(&quot;window.getComputedStyle(initialYPoints).getPropertyValue('-webkit-scroll-snap-coordinate')&quot;, &quot;50% 100%&quot;);
</del><ins>+        var initialMargin = document.getElementById('initialMargin');
+        shouldBeEmptyString(&quot;initialMargin.style['scroll-snap-type']&quot;);
+        shouldBeEqualToString(&quot;window.getComputedStyle(initialMargin).getPropertyValue('scroll-snap-type')&quot;, &quot;both proximity&quot;);
+        shouldBeEmptyString(&quot;initialMargin.style['scroll-padding']&quot;);
+        shouldBeEqualToString(&quot;window.getComputedStyle(initialMargin).getPropertyValue('scroll-padding')&quot;, &quot;20px&quot;);
+        shouldBeEqualToString(&quot;initialMargin.style['scroll-snap-margin']&quot;, &quot;initial&quot;);
+        shouldBeEqualToString(&quot;window.getComputedStyle(initialMargin).getPropertyValue('scroll-snap-margin')&quot;, &quot;0px&quot;);
+        shouldBeEmptyString(&quot;initialMargin.style['scroll-snap-align']&quot;);
+        shouldBeEqualToString(&quot;window.getComputedStyle(initialMargin).getPropertyValue('scroll-snap-align')&quot;, &quot;center center&quot;);
</ins><span class="cx"> 
</span><del>-        var initialDestination = document.getElementById('initialDestination');
-        shouldBeEmptyString(&quot;initialDestination.style['-webkit-scroll-snap-type']&quot;);
-        shouldBeEqualToString(&quot;window.getComputedStyle(initialDestination).getPropertyValue('-webkit-scroll-snap-type')&quot;, &quot;proximity&quot;);
-        shouldBeEmptyString(&quot;initialDestination.style['-webkit-scroll-snap-points-x']&quot;);
-        shouldBeEqualToString(&quot;window.getComputedStyle(initialDestination).getPropertyValue('-webkit-scroll-snap-points-x')&quot;, &quot;repeat(100%)&quot;);
-        shouldBeEmptyString(&quot;initialDestination.style['-webkit-scroll-snap-points-y']&quot;);
-        shouldBeEqualToString(&quot;window.getComputedStyle(initialDestination).getPropertyValue('-webkit-scroll-snap-points-y')&quot;, &quot;repeat(100%)&quot;);
-        shouldBeEqualToString(&quot;initialDestination.style['-webkit-scroll-snap-destination']&quot;, &quot;initial&quot;);
-        shouldBeEqualToString(&quot;window.getComputedStyle(initialDestination).getPropertyValue('-webkit-scroll-snap-destination')&quot;, &quot;0px 0px&quot;);
-        shouldBeEmptyString(&quot;initialDestination.style['-webkit-scroll-snap-coordinate']&quot;);
-        shouldBeEqualToString(&quot;window.getComputedStyle(initialDestination).getPropertyValue('-webkit-scroll-snap-coordinate')&quot;, &quot;10px 10px&quot;);
</del><ins>+        var initialAlign = document.getElementById('initialAlign');
+        shouldBeEmptyString(&quot;initialAlign.style['scroll-snap-type']&quot;);
+        shouldBeEqualToString(&quot;window.getComputedStyle(initialAlign).getPropertyValue('scroll-snap-type')&quot;, &quot;both proximity&quot;);
+        shouldBeEmptyString(&quot;initialAlign.style['scroll-padding']&quot;);
+        shouldBeEqualToString(&quot;window.getComputedStyle(initialAlign).getPropertyValue('scroll-padding')&quot;, &quot;20px&quot;);
+        shouldBeEmptyString(&quot;initialAlign.style['scroll-snap-margin']&quot;);
+        shouldBeEqualToString(&quot;window.getComputedStyle(initialAlign).getPropertyValue('scroll-snap-margin')&quot;, &quot;1px&quot;);
+        shouldBeEqualToString(&quot;initialAlign.style['scroll-snap-align']&quot;, &quot;initial&quot;);
+        shouldBeEqualToString(&quot;window.getComputedStyle(initialAlign).getPropertyValue('scroll-snap-align')&quot;, &quot;none none&quot;);
</ins><span class="cx"> 
</span><del>-        var initialSnapCoordinate = document.getElementById('initialSnapCoordinate');
-        shouldBeEmptyString(&quot;initialSnapCoordinate.style['-webkit-scroll-snap-type']&quot;);
-        shouldBeEqualToString(&quot;window.getComputedStyle(initialSnapCoordinate).getPropertyValue('-webkit-scroll-snap-type')&quot;, &quot;mandatory&quot;);
-        shouldBeEmptyString(&quot;initialSnapCoordinate.style['-webkit-scroll-snap-points-x']&quot;);
-        shouldBeEqualToString(&quot;window.getComputedStyle(initialSnapCoordinate).getPropertyValue('-webkit-scroll-snap-points-x')&quot;, &quot;repeat(100%)&quot;);
-        shouldBeEmptyString(&quot;initialSnapCoordinate.style['-webkit-scroll-snap-points-y']&quot;);
-        shouldBeEqualToString(&quot;window.getComputedStyle(initialSnapCoordinate).getPropertyValue('-webkit-scroll-snap-points-y')&quot;, &quot;repeat(100%)&quot;);
-        shouldBeEmptyString(&quot;initialSnapCoordinate.style['-webkit-scroll-snap-destination']&quot;);
-        shouldBeEqualToString(&quot;window.getComputedStyle(initialSnapCoordinate).getPropertyValue('-webkit-scroll-snap-destination')&quot;, &quot;10% 10%&quot;);
-        shouldBeEqualToString(&quot;initialSnapCoordinate.style['-webkit-scroll-snap-coordinate']&quot;, &quot;initial&quot;);
-        shouldBeEqualToString(&quot;window.getComputedStyle(initialSnapCoordinate).getPropertyValue('-webkit-scroll-snap-coordinate')&quot;, &quot;none&quot;);
-
</del><span class="cx">         var allInitial = document.getElementById('allInitial');
</span><del>-        shouldBeEqualToString(&quot;allInitial.style['-webkit-scroll-snap-type']&quot;, &quot;initial&quot;);
-        shouldBeEqualToString(&quot;window.getComputedStyle(allInitial).getPropertyValue('-webkit-scroll-snap-type')&quot;, &quot;none&quot;);
-        shouldBeEqualToString(&quot;allInitial.style['-webkit-scroll-snap-points-x']&quot;, &quot;initial&quot;);
-        shouldBeEqualToString(&quot;window.getComputedStyle(allInitial).getPropertyValue('-webkit-scroll-snap-points-x')&quot;, &quot;none&quot;);
-        shouldBeEqualToString(&quot;allInitial.style['-webkit-scroll-snap-points-y']&quot;, &quot;initial&quot;);
-        shouldBeEqualToString(&quot;window.getComputedStyle(allInitial).getPropertyValue('-webkit-scroll-snap-points-y')&quot;, &quot;none&quot;);
-        shouldBeEqualToString(&quot;allInitial.style['-webkit-scroll-snap-destination']&quot;, &quot;initial&quot;);
-        shouldBeEqualToString(&quot;window.getComputedStyle(allInitial).getPropertyValue('-webkit-scroll-snap-destination')&quot;, &quot;0px 0px&quot;);
-        shouldBeEqualToString(&quot;allInitial.style['-webkit-scroll-snap-coordinate']&quot;, &quot;initial&quot;);
-        shouldBeEqualToString(&quot;window.getComputedStyle(allInitial).getPropertyValue('-webkit-scroll-snap-coordinate')&quot;, &quot;none&quot;);
-
-        var allInitialY = document.getElementById('allInitialY');
-        shouldBeEqualToString(&quot;allInitialY.style['-webkit-scroll-snap-type']&quot;, &quot;initial&quot;);
-        shouldBeEqualToString(&quot;window.getComputedStyle(allInitialY).getPropertyValue('-webkit-scroll-snap-type')&quot;, &quot;none&quot;);
-        shouldBeEqualToString(&quot;allInitialY.style['-webkit-scroll-snap-points-x']&quot;, &quot;initial&quot;);
-        shouldBeEqualToString(&quot;window.getComputedStyle(allInitialY).getPropertyValue('-webkit-scroll-snap-points-x')&quot;, &quot;none&quot;);
-        shouldBeEqualToString(&quot;allInitialY.style['-webkit-scroll-snap-points-y']&quot;, &quot;initial&quot;);
-        shouldBeEqualToString(&quot;window.getComputedStyle(allInitialY).getPropertyValue('-webkit-scroll-snap-points-y')&quot;, &quot;none&quot;);
-        shouldBeEqualToString(&quot;allInitialY.style['-webkit-scroll-snap-destination']&quot;, &quot;initial&quot;);
-        shouldBeEqualToString(&quot;window.getComputedStyle(allInitialY).getPropertyValue('-webkit-scroll-snap-destination')&quot;, &quot;0px 0px&quot;);
-        shouldBeEqualToString(&quot;allInitialY.style['-webkit-scroll-snap-coordinate']&quot;, &quot;initial&quot;);
-        shouldBeEqualToString(&quot;window.getComputedStyle(allInitialY).getPropertyValue('-webkit-scroll-snap-coordinate')&quot;, &quot;none&quot;);
</del><ins>+        shouldBeEqualToString(&quot;allInitial.style['scroll-snap-type']&quot;, &quot;initial&quot;);
+        shouldBeEqualToString(&quot;window.getComputedStyle(allInitial).getPropertyValue('scroll-snap-type')&quot;, &quot;none&quot;);
+        shouldBeEqualToString(&quot;allInitial.style['scroll-padding']&quot;, &quot;initial&quot;);
+        shouldBeEqualToString(&quot;window.getComputedStyle(allInitial).getPropertyValue('scroll-padding')&quot;, &quot;0px&quot;);
+        shouldBeEqualToString(&quot;allInitial.style['scroll-snap-margin']&quot;, &quot;initial&quot;);
+        shouldBeEqualToString(&quot;window.getComputedStyle(allInitial).getPropertyValue('scroll-snap-margin')&quot;, &quot;0px&quot;);
+        shouldBeEqualToString(&quot;allInitial.style['scroll-snap-align']&quot;, &quot;initial&quot;);
+        shouldBeEqualToString(&quot;window.getComputedStyle(allInitial).getPropertyValue('scroll-snap-align')&quot;, &quot;none none&quot;);
</ins><span class="cx">         &lt;/script&gt;
</span><span class="cx">         &lt;script src=&quot;../../resources/js-test-post.js&quot;&gt;&lt;/script&gt;
</span><span class="cx">     &lt;/body&gt;
</span></span></pre></div>
<a id="trunkLayoutTestscss3scrollsnapscrollsnapmismatchhtml"></a>
<div class="modfile"><h4>Modified: trunk/LayoutTests/css3/scroll-snap/scroll-snap-mismatch.html (210023 => 210024)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/css3/scroll-snap/scroll-snap-mismatch.html        2016-12-20 18:26:10 UTC (rev 210023)
+++ trunk/LayoutTests/css3/scroll-snap/scroll-snap-mismatch.html        2016-12-20 18:44:38 UTC (rev 210024)
</span><span class="lines">@@ -8,14 +8,17 @@
</span><span class="cx">                 overflow-y: hidden;
</span><span class="cx">                 overflow-x: auto;
</span><span class="cx">                 margin-bottom: 2px;
</span><del>-                -webkit-scroll-snap-type: mandatory;
</del><ins>+                scroll-snap-type: x mandatory;
</ins><span class="cx">             }
</span><del>-            .horizontal-good {
-                -webkit-scroll-snap-points-x: repeat(300px);                
</del><ins>+
+            .good {
+                scroll-snap-align: start none;
</ins><span class="cx">             }
</span><del>-            .horizontal-bad {
-                -webkit-scroll-snap-points-y: repeat(100vh);
</del><ins>+
+            .bad {
+                scroll-snap-align: none start;
</ins><span class="cx">             }
</span><ins>+
</ins><span class="cx">             .horizontalGalleryDrawer {
</span><span class="cx">                 width: 1800px;
</span><span class="cx">                 height: 300px;
</span><span class="lines">@@ -62,22 +65,22 @@
</span><span class="cx">             &lt;div&gt;Tests that the scroll-snap feature works properly with mixed-up snap points.&lt;/div&gt;
</span><span class="cx">             &lt;div class=&quot;horizontalGallery horizontal-bad&quot; id=&quot;badHorizontalTarget&quot;&gt;
</span><span class="cx">                 &lt;div class=&quot;horizontalGalleryDrawer&quot;&gt;
</span><del>-                    &lt;div id=&quot;itemH0&quot; class=&quot;colorBox&quot;&gt;&lt;/div&gt;
-                    &lt;div id=&quot;itemH1&quot; class=&quot;colorBox&quot;&gt;&lt;/div&gt;
-                    &lt;div id=&quot;itemH2&quot; class=&quot;colorBox&quot;&gt;&lt;/div&gt;
-                    &lt;div id=&quot;itemH3&quot; class=&quot;colorBox&quot;&gt;&lt;/div&gt;
-                    &lt;div id=&quot;itemH4&quot; class=&quot;colorBox&quot;&gt;&lt;/div&gt;
-                    &lt;div id=&quot;itemH5&quot; class=&quot;colorBox&quot;&gt;&lt;/div&gt;
</del><ins>+                    &lt;div id=&quot;itemH0&quot; class=&quot;bad colorBox&quot;&gt;&lt;/div&gt;
+                    &lt;div id=&quot;itemH1&quot; class=&quot;bad colorBox&quot;&gt;&lt;/div&gt;
+                    &lt;div id=&quot;itemH2&quot; class=&quot;bad colorBox&quot;&gt;&lt;/div&gt;
+                    &lt;div id=&quot;itemH3&quot; class=&quot;bad colorBox&quot;&gt;&lt;/div&gt;
+                    &lt;div id=&quot;itemH4&quot; class=&quot;bad colorBox&quot;&gt;&lt;/div&gt;
+                    &lt;div id=&quot;itemH5&quot; class=&quot;bad colorBox&quot;&gt;&lt;/div&gt;
</ins><span class="cx">                 &lt;/div&gt;
</span><span class="cx">             &lt;/div&gt;
</span><span class="cx">             &lt;div class=&quot;horizontalGallery horizontal-good&quot; id=&quot;horizontalTarget&quot;&gt;
</span><span class="cx">                 &lt;div class=&quot;horizontalGalleryDrawer&quot;&gt;
</span><del>-                    &lt;div id=&quot;itemH0&quot; class=&quot;colorBox&quot;&gt;&lt;/div&gt;
-                    &lt;div id=&quot;itemH1&quot; class=&quot;colorBox&quot;&gt;&lt;/div&gt;
-                    &lt;div id=&quot;itemH2&quot; class=&quot;colorBox&quot;&gt;&lt;/div&gt;
-                    &lt;div id=&quot;itemH3&quot; class=&quot;colorBox&quot;&gt;&lt;/div&gt;
-                    &lt;div id=&quot;itemH4&quot; class=&quot;colorBox&quot;&gt;&lt;/div&gt;
-                    &lt;div id=&quot;itemH5&quot; class=&quot;colorBox&quot;&gt;&lt;/div&gt;
</del><ins>+                    &lt;div id=&quot;itemH0&quot; class=&quot;good colorBox&quot;&gt;&lt;/div&gt;
+                    &lt;div id=&quot;itemH1&quot; class=&quot;good colorBox&quot;&gt;&lt;/div&gt;
+                    &lt;div id=&quot;itemH2&quot; class=&quot;good colorBox&quot;&gt;&lt;/div&gt;
+                    &lt;div id=&quot;itemH3&quot; class=&quot;good colorBox&quot;&gt;&lt;/div&gt;
+                    &lt;div id=&quot;itemH4&quot; class=&quot;good colorBox&quot;&gt;&lt;/div&gt;
+                    &lt;div id=&quot;itemH5&quot; class=&quot;good colorBox&quot;&gt;&lt;/div&gt;
</ins><span class="cx">                 &lt;/div&gt;
</span><span class="cx">             &lt;/div&gt;
</span><span class="cx">             &lt;div id=&quot;console&quot;&gt;&lt;/div&gt;
</span></span></pre></div>
<a id="trunkLayoutTestscss3scrollsnapscrollsnapnegativerepeatexpectedtxt"></a>
<div class="delfile"><h4>Deleted: trunk/LayoutTests/css3/scroll-snap/scroll-snap-negative-repeat-expected.txt (210023 => 210024)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/css3/scroll-snap/scroll-snap-negative-repeat-expected.txt        2016-12-20 18:26:10 UTC (rev 210023)
+++ trunk/LayoutTests/css3/scroll-snap/scroll-snap-negative-repeat-expected.txt        2016-12-20 18:44:38 UTC (rev 210024)
</span><span class="lines">@@ -1,9 +0,0 @@
</span><del>-Tests that negative repeat() values don't hang on snap point computation.
-
-On success, you will see a series of &quot;PASS&quot; messages, followed by &quot;TEST COMPLETE&quot;.
-
-
-PASS successfullyParsed is true
-
-TEST COMPLETE
-
</del></span></pre></div>
<a id="trunkLayoutTestscss3scrollsnapscrollsnapnegativerepeathtml"></a>
<div class="delfile"><h4>Deleted: trunk/LayoutTests/css3/scroll-snap/scroll-snap-negative-repeat.html (210023 => 210024)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/css3/scroll-snap/scroll-snap-negative-repeat.html        2016-12-20 18:26:10 UTC (rev 210023)
+++ trunk/LayoutTests/css3/scroll-snap/scroll-snap-negative-repeat.html        2016-12-20 18:44:38 UTC (rev 210024)
</span><span class="lines">@@ -1,21 +0,0 @@
</span><del>-&lt;!DOCTYPE html&gt;
-&lt;html&gt;
-    &lt;head&gt;
-        &lt;style&gt;
-            body {
-                -webkit-scroll-snap-type: mandatory;
-                -webkit-scroll-snap-points-y: repeat(-400px);
-                height: 5000px;
-            }
-        &lt;/style&gt;
-        &lt;script src=&quot;../../resources/js-test-pre.js&quot;&gt;&lt;/script&gt;
-    &lt;/head&gt;
-    &lt;body&gt;
-        &lt;div id=&quot;console&quot;&gt;&lt;/div&gt;
-        &lt;script&gt;
-        description(&quot;Tests that negative repeat() values don't hang on snap point computation.&quot;);
-        &lt;/script&gt;
-        &lt;script src=&quot;../../resources/js-test-post.js&quot;&gt;&lt;/script&gt;
-    &lt;/body&gt;
-&lt;/html&gt;
-
</del></span></pre></div>
<a id="trunkLayoutTestscss3scrollsnapscrollsnapoffsetsexpectedtxt"></a>
<div class="modfile"><h4>Modified: trunk/LayoutTests/css3/scroll-snap/scroll-snap-offsets-expected.txt (210023 => 210024)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/css3/scroll-snap/scroll-snap-offsets-expected.txt        2016-12-20 18:26:10 UTC (rev 210023)
+++ trunk/LayoutTests/css3/scroll-snap/scroll-snap-offsets-expected.txt        2016-12-20 18:44:38 UTC (rev 210024)
</span><span class="lines">@@ -2,16 +2,16 @@
</span><span class="cx">  PASS successfullyParsed is true
</span><span class="cx"> 
</span><span class="cx"> TEST COMPLETE
</span><del>-Scroll-snap offsets for horizontalTarget: horizontal = { 0, 30, 60, 90, 120, 150 }, vertical = { 0, 7, 15 }
-Scroll-snap offsets for verticalTarget: horizontal = { 0, 7, 15 }, vertical = { 0, 30, 60, 90, 120, 150 }
-Scroll-snap offsets for horizontalBorderedTarget: horizontal = { 0, 30, 60, 90, 120, 150 }, vertical = { 0, 7, 15 }
-Scroll-snap offsets for verticalBorderedTarget: horizontal = { 0, 7, 15 }, vertical = { 0, 30, 60, 90, 120, 150 }
-Scroll-snap offsets for horizontalPaddedTarget: horizontal = { 0, 30, 60, 90, 120, 150, 170 }, vertical = { 0, 7, 39 }
-Scroll-snap offsets for verticalPaddedTarget: horizontal = { 0, 7, 35 }, vertical = { 0, 30, 60, 90, 120, 150, 174 }
-Scroll-snap offsets for horizontalBorderedPaddedTarget: horizontal = { 0, 30, 60, 90, 120, 150, 170 }, vertical = { 0, 7, 39 }
-Scroll-snap offsets for verticalBorderedPaddedTarget: horizontal = { 0, 7, 35 }, vertical = { 0, 30, 60, 90, 120, 150, 174 }
-Scroll-snap offsets for horizontalRotatedTarget: horizontal = { 0, 30, 60, 90, 120, 150, 170 }, vertical = { 0, 7, 39 }
-Scroll-snap offsets for verticalRotatedTarget: horizontal = { 0, 7, 35 }, vertical = { 0, 30, 60, 90, 120, 150, 174 }
</del><ins>+Scroll-snap offsets for horizontalTarget: horizontal = { 0, 30, 60, 90, 120, 150 }
+Scroll-snap offsets for verticalTarget: vertical = { 0, 30, 60, 90, 120, 150 }
+Scroll-snap offsets for horizontalBorderedTarget: horizontal = { 0, 30, 60, 90, 120, 150 }
+Scroll-snap offsets for verticalBorderedTarget: vertical = { 0, 30, 60, 90, 120, 150 }
+Scroll-snap offsets for horizontalPaddedTarget: horizontal = { 0, 20, 50, 80, 110, 140, 170 }
+Scroll-snap offsets for verticalPaddedTarget: vertical = { 0, 15, 45, 75, 105, 135, 165, 174 }
+Scroll-snap offsets for horizontalBorderedPaddedTarget: horizontal = { 0, 20, 50, 80, 110, 140, 170 }
+Scroll-snap offsets for verticalBorderedPaddedTarget: vertical = { 0, 15, 45, 75, 105, 135, 165, 174 }
+Scroll-snap offsets for horizontalRotatedTarget: horizontal = { 0, 20, 50, 80, 110, 140, 170 }
+Scroll-snap offsets for verticalRotatedTarget: vertical = { 0, 15, 45, 75, 105, 135, 165, 174 }
</ins><span class="cx"> PASS successfullyParsed is true
</span><span class="cx"> 
</span><span class="cx"> TEST COMPLETE
</span></span></pre></div>
<a id="trunkLayoutTestscss3scrollsnapscrollsnapoffsetshtml"></a>
<div class="modfile"><h4>Modified: trunk/LayoutTests/css3/scroll-snap/scroll-snap-offsets.html (210023 => 210024)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/css3/scroll-snap/scroll-snap-offsets.html        2016-12-20 18:26:10 UTC (rev 210023)
+++ trunk/LayoutTests/css3/scroll-snap/scroll-snap-offsets.html        2016-12-20 18:44:38 UTC (rev 210024)
</span><span class="lines">@@ -21,9 +21,7 @@
</span><span class="cx">                 overflow-x: auto;
</span><span class="cx">                 margin: 2px;
</span><span class="cx">                 -webkit-overflow-scrolling: touch;
</span><del>-                -webkit-scroll-snap-points-x: repeat(100%);
-                -webkit-scroll-snap-type: mandatory;
-                -webkit-scroll-snap-coordinate: 50% 50%;
</del><ins>+                scroll-snap-type: x mandatory;
</ins><span class="cx">             }
</span><span class="cx">             .horizontalGalleryDrawer {
</span><span class="cx">                 width: 180px;
</span><span class="lines">@@ -37,9 +35,7 @@
</span><span class="cx">                 overflow-y: auto;
</span><span class="cx">                 margin: 2px;
</span><span class="cx">                 -webkit-overflow-scrolling: touch;
</span><del>-                -webkit-scroll-snap-points-y: repeat(100%);
-                -webkit-scroll-snap-type: mandatory;
-                -webkit-scroll-snap-coordinate: 50% 50%;
</del><ins>+                scroll-snap-type: y mandatory;
</ins><span class="cx">             }
</span><span class="cx">             .verticalGalleryDrawer {
</span><span class="cx">                 width: 30px;
</span><span class="lines">@@ -50,6 +46,9 @@
</span><span class="cx">                 width: 30px;
</span><span class="cx">                 float: left;
</span><span class="cx">             }
</span><ins>+            .colorBox {
+                scroll-snap-align: start;
+            }
</ins><span class="cx">             #itemH0, #itemV0 { background-color: red; }
</span><span class="cx">             #itemH1, #itemV1 { background-color: green; }
</span><span class="cx">             #itemH2, #itemV2 { background-color: blue; }
</span></span></pre></div>
<a id="trunkLayoutTestscss3scrollsnapscrollsnappositionvaluesexpectedtxt"></a>
<div class="delfile"><h4>Deleted: trunk/LayoutTests/css3/scroll-snap/scroll-snap-position-values-expected.txt (210023 => 210024)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/css3/scroll-snap/scroll-snap-position-values-expected.txt        2016-12-20 18:26:10 UTC (rev 210023)
+++ trunk/LayoutTests/css3/scroll-snap/scroll-snap-position-values-expected.txt        2016-12-20 18:44:38 UTC (rev 210024)
</span><span class="lines">@@ -1,99 +0,0 @@
</span><del>-Tests 'initial' on scroll snap properties.
-
-On success, you will see a series of &quot;PASS&quot; messages, followed by &quot;TEST COMPLETE&quot;.
-
-
-PASS noInitial.style['-webkit-scroll-snap-type'] is &quot;&quot;
-PASS window.getComputedStyle(noInitial).getPropertyValue('-webkit-scroll-snap-type') is &quot;mandatory&quot;
-PASS noInitial.style['-webkit-scroll-snap-points-x'] is &quot;&quot;
-PASS window.getComputedStyle(noInitial).getPropertyValue('-webkit-scroll-snap-points-x') is &quot;repeat(100%)&quot;
-PASS noInitial.style['-webkit-scroll-snap-points-y'] is &quot;&quot;
-PASS window.getComputedStyle(noInitial).getPropertyValue('-webkit-scroll-snap-points-y') is &quot;repeat(100%)&quot;
-PASS noInitial.style['-webkit-scroll-snap-destination'] is &quot;100% 100%&quot;
-PASS window.getComputedStyle(noInitial).getPropertyValue('-webkit-scroll-snap-destination') is &quot;100% 100%&quot;
-PASS noInitial.style['-webkit-scroll-snap-coordinate'] is &quot;0% 0%&quot;
-PASS window.getComputedStyle(noInitial).getPropertyValue('-webkit-scroll-snap-coordinate') is &quot;0% 0%&quot;
-PASS initialType.style['-webkit-scroll-snap-type'] is &quot;initial&quot;
-PASS window.getComputedStyle(initialType).getPropertyValue('-webkit-scroll-snap-type') is &quot;none&quot;
-PASS initialType.style['-webkit-scroll-snap-points-x'] is &quot;&quot;
-PASS window.getComputedStyle(initialType).getPropertyValue('-webkit-scroll-snap-points-x') is &quot;repeat(100%)&quot;
-PASS initialType.style['-webkit-scroll-snap-points-y'] is &quot;&quot;
-PASS window.getComputedStyle(initialType).getPropertyValue('-webkit-scroll-snap-points-y') is &quot;repeat(100%)&quot;
-PASS initialType.style['-webkit-scroll-snap-destination'] is &quot;0% 0%&quot;
-PASS window.getComputedStyle(initialType).getPropertyValue('-webkit-scroll-snap-destination') is &quot;0% 0%&quot;
-PASS initialType.style['-webkit-scroll-snap-coordinate'] is &quot;100% 100%&quot;
-PASS window.getComputedStyle(initialType).getPropertyValue('-webkit-scroll-snap-coordinate') is &quot;100% 100%&quot;
-PASS initialXPoints.style['-webkit-scroll-snap-type'] is &quot;&quot;
-PASS window.getComputedStyle(initialXPoints).getPropertyValue('-webkit-scroll-snap-type') is &quot;mandatory&quot;
-PASS initialXPoints.style['-webkit-scroll-snap-points-x'] is &quot;initial&quot;
-PASS window.getComputedStyle(initialXPoints).getPropertyValue('-webkit-scroll-snap-points-x') is &quot;none&quot;
-PASS initialXPoints.style['-webkit-scroll-snap-points-y'] is &quot;&quot;
-PASS window.getComputedStyle(initialXPoints).getPropertyValue('-webkit-scroll-snap-points-y') is &quot;repeat(100%)&quot;
-PASS initialXPoints.style['-webkit-scroll-snap-destination'] is &quot;50% 50%&quot;
-PASS window.getComputedStyle(initialXPoints).getPropertyValue('-webkit-scroll-snap-destination') is &quot;50% 50%&quot;
-PASS initialXPoints.style['-webkit-scroll-snap-coordinate'] is &quot;50% 50%&quot;
-PASS window.getComputedStyle(initialXPoints).getPropertyValue('-webkit-scroll-snap-coordinate') is &quot;50% 50%&quot;
-PASS initialYPoints.style['-webkit-scroll-snap-type'] is &quot;&quot;
-PASS window.getComputedStyle(initialYPoints).getPropertyValue('-webkit-scroll-snap-type') is &quot;mandatory&quot;
-PASS initialYPoints.style['-webkit-scroll-snap-points-x'] is &quot;&quot;
-PASS window.getComputedStyle(initialYPoints).getPropertyValue('-webkit-scroll-snap-points-x') is &quot;repeat(100%)&quot;
-PASS initialYPoints.style['-webkit-scroll-snap-points-y'] is &quot;initial&quot;
-PASS window.getComputedStyle(initialYPoints).getPropertyValue('-webkit-scroll-snap-points-y') is &quot;none&quot;
-PASS initialYPoints.style['-webkit-scroll-snap-destination'] is &quot;50% 20px&quot;
-PASS window.getComputedStyle(initialYPoints).getPropertyValue('-webkit-scroll-snap-destination') is &quot;50% 20px&quot;
-PASS initialYPoints.style['-webkit-scroll-snap-coordinate'] is &quot;50% 50%&quot;
-PASS window.getComputedStyle(initialYPoints).getPropertyValue('-webkit-scroll-snap-coordinate') is &quot;50% 50%&quot;
-PASS initialDestination.style['-webkit-scroll-snap-type'] is &quot;&quot;
-PASS window.getComputedStyle(initialDestination).getPropertyValue('-webkit-scroll-snap-type') is &quot;proximity&quot;
-PASS initialDestination.style['-webkit-scroll-snap-points-x'] is &quot;&quot;
-PASS window.getComputedStyle(initialDestination).getPropertyValue('-webkit-scroll-snap-points-x') is &quot;repeat(100%)&quot;
-PASS initialDestination.style['-webkit-scroll-snap-points-y'] is &quot;&quot;
-PASS window.getComputedStyle(initialDestination).getPropertyValue('-webkit-scroll-snap-points-y') is &quot;repeat(100%)&quot;
-PASS initialDestination.style['-webkit-scroll-snap-destination'] is &quot;initial&quot;
-PASS window.getComputedStyle(initialDestination).getPropertyValue('-webkit-scroll-snap-destination') is &quot;0px 0px&quot;
-PASS initialDestination.style['-webkit-scroll-snap-coordinate'] is &quot;none&quot;
-PASS window.getComputedStyle(initialDestination).getPropertyValue('-webkit-scroll-snap-coordinate') is &quot;none&quot;
-PASS initialSnapCoordinate.style['-webkit-scroll-snap-type'] is &quot;&quot;
-PASS window.getComputedStyle(initialSnapCoordinate).getPropertyValue('-webkit-scroll-snap-type') is &quot;mandatory&quot;
-PASS initialSnapCoordinate.style['-webkit-scroll-snap-points-x'] is &quot;&quot;
-PASS window.getComputedStyle(initialSnapCoordinate).getPropertyValue('-webkit-scroll-snap-points-x') is &quot;repeat(100%)&quot;
-PASS initialSnapCoordinate.style['-webkit-scroll-snap-points-y'] is &quot;&quot;
-PASS window.getComputedStyle(initialSnapCoordinate).getPropertyValue('-webkit-scroll-snap-points-y') is &quot;repeat(100%)&quot;
-PASS initialSnapCoordinate.style['-webkit-scroll-snap-destination'] is &quot;&quot;
-PASS window.getComputedStyle(initialSnapCoordinate).getPropertyValue('-webkit-scroll-snap-destination') is &quot;0px 0px&quot;
-PASS initialSnapCoordinate.style['-webkit-scroll-snap-coordinate'] is &quot;initial&quot;
-PASS window.getComputedStyle(initialSnapCoordinate).getPropertyValue('-webkit-scroll-snap-coordinate') is &quot;none&quot;
-PASS allInitial.style['-webkit-scroll-snap-type'] is &quot;initial&quot;
-PASS window.getComputedStyle(allInitial).getPropertyValue('-webkit-scroll-snap-type') is &quot;none&quot;
-PASS allInitial.style['-webkit-scroll-snap-points-x'] is &quot;initial&quot;
-PASS window.getComputedStyle(allInitial).getPropertyValue('-webkit-scroll-snap-points-x') is &quot;none&quot;
-PASS allInitial.style['-webkit-scroll-snap-points-y'] is &quot;initial&quot;
-PASS window.getComputedStyle(allInitial).getPropertyValue('-webkit-scroll-snap-points-y') is &quot;none&quot;
-PASS allInitial.style['-webkit-scroll-snap-destination'] is &quot;initial&quot;
-PASS window.getComputedStyle(allInitial).getPropertyValue('-webkit-scroll-snap-destination') is &quot;0px 0px&quot;
-PASS allInitial.style['-webkit-scroll-snap-coordinate'] is &quot;initial&quot;
-PASS window.getComputedStyle(allInitial).getPropertyValue('-webkit-scroll-snap-coordinate') is &quot;none&quot;
-PASS noneSnapCoordinateAndDestination.style['-webkit-scroll-snap-type'] is &quot;&quot;
-PASS window.getComputedStyle(noneSnapCoordinateAndDestination).getPropertyValue('-webkit-scroll-snap-type') is &quot;mandatory&quot;
-PASS noneSnapCoordinateAndDestination.style['-webkit-scroll-snap-points-x'] is &quot;&quot;
-PASS window.getComputedStyle(noneSnapCoordinateAndDestination).getPropertyValue('-webkit-scroll-snap-points-x') is &quot;repeat(100%)&quot;
-PASS noneSnapCoordinateAndDestination.style['-webkit-scroll-snap-points-y'] is &quot;&quot;
-PASS window.getComputedStyle(noneSnapCoordinateAndDestination).getPropertyValue('-webkit-scroll-snap-points-y') is &quot;repeat(100%)&quot;
-PASS noneSnapCoordinateAndDestination.style['-webkit-scroll-snap-destination'] is &quot;&quot;
-PASS window.getComputedStyle(noneSnapCoordinateAndDestination).getPropertyValue('-webkit-scroll-snap-destination') is &quot;0px 0px&quot;
-PASS noneSnapCoordinateAndDestination.style['-webkit-scroll-snap-coordinate'] is &quot;none&quot;
-PASS window.getComputedStyle(noneSnapCoordinateAndDestination).getPropertyValue('-webkit-scroll-snap-coordinate') is &quot;none&quot;
-PASS calculatedCoordinateAndDestination.style['-webkit-scroll-snap-type'] is &quot;&quot;
-PASS window.getComputedStyle(calculatedCoordinateAndDestination).getPropertyValue('-webkit-scroll-snap-type') is &quot;mandatory&quot;
-PASS calculatedCoordinateAndDestination.style['-webkit-scroll-snap-points-x'] is &quot;&quot;
-PASS window.getComputedStyle(calculatedCoordinateAndDestination).getPropertyValue('-webkit-scroll-snap-points-x') is &quot;repeat(96%)&quot;
-PASS calculatedCoordinateAndDestination.style['-webkit-scroll-snap-points-y'] is &quot;&quot;
-PASS window.getComputedStyle(calculatedCoordinateAndDestination).getPropertyValue('-webkit-scroll-snap-points-y') is &quot;repeat(52%)&quot;
-PASS calculatedCoordinateAndDestination.style['-webkit-scroll-snap-destination'] is &quot;&quot;
-PASS window.getComputedStyle(calculatedCoordinateAndDestination).getPropertyValue('-webkit-scroll-snap-destination') is &quot;106px 25px&quot;
-PASS calculatedCoordinateAndDestination.style['-webkit-scroll-snap-coordinate'] is &quot;&quot;
-PASS window.getComputedStyle(calculatedCoordinateAndDestination).getPropertyValue('-webkit-scroll-snap-coordinate') is &quot;16px 384px&quot;
-PASS successfullyParsed is true
-
-TEST COMPLETE
-
</del></span></pre></div>
<a id="trunkLayoutTestscss3scrollsnapscrollsnappositionvalueshtml"></a>
<div class="delfile"><h4>Deleted: trunk/LayoutTests/css3/scroll-snap/scroll-snap-position-values.html (210023 => 210024)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/css3/scroll-snap/scroll-snap-position-values.html        2016-12-20 18:26:10 UTC (rev 210023)
+++ trunk/LayoutTests/css3/scroll-snap/scroll-snap-position-values.html        2016-12-20 18:44:38 UTC (rev 210024)
</span><span class="lines">@@ -1,310 +0,0 @@
</span><del>-&lt;!DOCTYPE html&gt;
-&lt;html&gt;
-    &lt;head&gt;
-        &lt;style&gt;
-            .horizontalGallery {
-                width: 400px;
-                height: 50px;
-                overflow-y: hidden;
-                overflow-x: auto;
-            }
-            .horizontalGalleryDrawer {
-                width: 3000px;
-                height: 50px;
-            }
-            .colorBox {
-                height: 50px;
-                width: 400px;
-                float: left;
-            }
-
-            .noInitial {
-                -webkit-scroll-snap-type: mandatory;
-                -webkit-scroll-snap-points-x: repeat(100%);
-                -webkit-scroll-snap-points-y: repeat(100%);
-                -webkit-scroll-snap-destination: right bottom;
-                -webkit-scroll-snap-coordinate: left top;
-            }
-
-            .initialType {
-                -webkit-scroll-snap-type: initial;
-                -webkit-scroll-snap-points-x: repeat(100%);
-                -webkit-scroll-snap-points-y: repeat(100%);
-                -webkit-scroll-snap-destination: left top;
-                -webkit-scroll-snap-coordinate: right bottom;
-            }
-
-            .initialXPoints {
-                -webkit-scroll-snap-type: mandatory;
-                -webkit-scroll-snap-points-x: initial;
-                -webkit-scroll-snap-points-y: repeat(100%);
-                -webkit-scroll-snap-destination: 50% center;
-                -webkit-scroll-snap-coordinate: center 50%;
-            }
-
-            .initialYPoints {
-                -webkit-scroll-snap-type: mandatory;
-                -webkit-scroll-snap-points-x: repeat(100%);
-                -webkit-scroll-snap-points-y: initial;
-                -webkit-scroll-snap-destination: center 20px;
-                -webkit-scroll-snap-coordinate: 50% center;
-            }
-
-            .initialDestination {
-                -webkit-scroll-snap-type: proximity;
-                -webkit-scroll-snap-points-x: repeat(100%);
-                -webkit-scroll-snap-points-y: repeat(100%);
-                -webkit-scroll-snap-destination: initial;
-                -webkit-scroll-snap-coordinate: none;
-            }
-
-            .initialSnapCoordinate {
-                -webkit-scroll-snap-type: mandatory;
-                -webkit-scroll-snap-points-x: repeat(100%);
-                -webkit-scroll-snap-points-y: repeat(100%);
-                -webkit-scroll-snap-destination: none;
-                -webkit-scroll-snap-coordinate: initial;
-            }
-
-            .noneSnapCoordinateAndDestination {
-                -webkit-scroll-snap-type: mandatory;
-                -webkit-scroll-snap-points-x: repeat(100%);
-                -webkit-scroll-snap-points-y: repeat(100%);
-                -webkit-scroll-snap-destination: none;
-                -webkit-scroll-snap-coordinate: none;
-            }
-
-            .allInitial {
-                -webkit-scroll-snap-type: initial;
-                -webkit-scroll-snap-points-x: initial;
-                -webkit-scroll-snap-points-y: initial;
-                -webkit-scroll-snap-destination: initial;
-                -webkit-scroll-snap-coordinate: initial
-            }
-
-            .calculatedCoordinateAndDestination {
-                -webkit-scroll-snap-type: mandatory;
-                -webkit-scroll-snap-points-x: repeat(-webkit-calc(100% - 4%));
-                -webkit-scroll-snap-points-y: repeat(-webkit-calc(20% + 32%));
-                -webkit-scroll-snap-destination: -webkit-calc(10px + 6em) -webkit-calc(22px + 3px);
-                -webkit-scroll-snap-coordinate: -webkit-calc(32px - 1em) -webkit-calc(19em + 5em);
-            }
-
-            #item0 { background-color: red; }
-            #item1 { background-color: green; }
-            #item2 { background-color: blue; }
-            #item3 { background-color: aqua; }
-            #item4 { background-color: yellow; }
-            #item5 { background-color: fuchsia; }
-        &lt;/style&gt;
-        &lt;script src=&quot;../../resources/js-test-pre.js&quot;&gt;&lt;/script&gt;
-    &lt;/head&gt;
-    &lt;body&gt;
-        &lt;div style=&quot;width: 400px&quot;&gt;
-            &lt;div id=&quot;noInitial&quot; class=&quot;horizontalGallery noInitial&quot; style=&quot;-webkit-scroll-snap-destination: right bottom; -webkit-scroll-snap-coordinate: left top;&quot;&gt;
-                &lt;div class=&quot;horizontalGalleryDrawer&quot;&gt;
-                    &lt;div id=&quot;item0&quot; class=&quot;colorBox&quot;&gt;&lt;/div&gt;
-                    &lt;div id=&quot;item1&quot; class=&quot;colorBox&quot;&gt;&lt;/div&gt;
-                    &lt;div id=&quot;item2&quot; class=&quot;colorBox&quot;&gt;&lt;/div&gt;
-                    &lt;div id=&quot;item3&quot; class=&quot;colorBox&quot;&gt;&lt;/div&gt;
-                    &lt;div id=&quot;item4&quot; class=&quot;colorBox&quot;&gt;&lt;/div&gt;
-                    &lt;div id=&quot;item5&quot; class=&quot;colorBox&quot;&gt;&lt;/div&gt;
-                &lt;/div&gt;
-            &lt;/div&gt;
-            &lt;div id=&quot;initialType&quot; class=&quot;horizontalGallery initialType&quot; style=&quot;-webkit-scroll-snap-type: initial; -webkit-scroll-snap-destination: left top; -webkit-scroll-snap-coordinate: right bottom;&quot;&gt;
-                &lt;div class=&quot;horizontalGalleryDrawer&quot;&gt;
-                    &lt;div id=&quot;item0&quot; class=&quot;colorBox&quot;&gt;&lt;/div&gt;
-                    &lt;div id=&quot;item1&quot; class=&quot;colorBox&quot;&gt;&lt;/div&gt;
-                    &lt;div id=&quot;item2&quot; class=&quot;colorBox&quot;&gt;&lt;/div&gt;
-                    &lt;div id=&quot;item3&quot; class=&quot;colorBox&quot;&gt;&lt;/div&gt;
-                    &lt;div id=&quot;item4&quot; class=&quot;colorBox&quot;&gt;&lt;/div&gt;
-                    &lt;div id=&quot;item5&quot; class=&quot;colorBox&quot;&gt;&lt;/div&gt;
-                &lt;/div&gt;
-            &lt;/div&gt;
-            &lt;div id=&quot;initialXPoints&quot; class=&quot;horizontalGallery initialXPoints&quot; style=&quot;-webkit-scroll-snap-points-x: initial; -webkit-scroll-snap-destination: 50% center; -webkit-scroll-snap-coordinate: center 50%;&quot;&gt;
-                &lt;div class=&quot;horizontalGalleryDrawer&quot;&gt;
-                    &lt;div id=&quot;item0&quot; class=&quot;colorBox&quot;&gt;&lt;/div&gt;
-                    &lt;div id=&quot;item1&quot; class=&quot;colorBox&quot;&gt;&lt;/div&gt;
-                    &lt;div id=&quot;item2&quot; class=&quot;colorBox&quot;&gt;&lt;/div&gt;
-                    &lt;div id=&quot;item3&quot; class=&quot;colorBox&quot;&gt;&lt;/div&gt;
-                    &lt;div id=&quot;item4&quot; class=&quot;colorBox&quot;&gt;&lt;/div&gt;
-                    &lt;div id=&quot;item5&quot; class=&quot;colorBox&quot;&gt;&lt;/div&gt;
-                &lt;/div&gt;
-            &lt;/div&gt;
-            &lt;div id=&quot;initialYPoints&quot; class=&quot;horizontalGallery initialYPoints&quot; style=&quot;-webkit-scroll-snap-points-y: initial; -webkit-scroll-snap-destination: center 20px; -webkit-scroll-snap-coordinate: 50% center;&quot;&gt;
-                &lt;div class=&quot;horizontalGalleryDrawer&quot;&gt;
-                    &lt;div id=&quot;item0&quot; class=&quot;colorBox&quot;&gt;&lt;/div&gt;
-                    &lt;div id=&quot;item1&quot; class=&quot;colorBox&quot;&gt;&lt;/div&gt;
-                    &lt;div id=&quot;item2&quot; class=&quot;colorBox&quot;&gt;&lt;/div&gt;
-                    &lt;div id=&quot;item3&quot; class=&quot;colorBox&quot;&gt;&lt;/div&gt;
-                    &lt;div id=&quot;item4&quot; class=&quot;colorBox&quot;&gt;&lt;/div&gt;
-                    &lt;div id=&quot;item5&quot; class=&quot;colorBox&quot;&gt;&lt;/div&gt;
-                &lt;/div&gt;
-            &lt;/div&gt;
-            &lt;div id=&quot;initialDestination&quot; class=&quot;horizontalGallery initialDestination&quot; style=&quot;-webkit-scroll-snap-destination: initial; -webkit-scroll-snap-coordinate: none;&quot;&gt;
-                &lt;div class=&quot;horizontalGalleryDrawer&quot;&gt;
-                    &lt;div id=&quot;item0&quot; class=&quot;colorBox&quot;&gt;&lt;/div&gt;
-                    &lt;div id=&quot;item1&quot; class=&quot;colorBox&quot;&gt;&lt;/div&gt;
-                    &lt;div id=&quot;item2&quot; class=&quot;colorBox&quot;&gt;&lt;/div&gt;
-                    &lt;div id=&quot;item3&quot; class=&quot;colorBox&quot;&gt;&lt;/div&gt;
-                    &lt;div id=&quot;item4&quot; class=&quot;colorBox&quot;&gt;&lt;/div&gt;
-                    &lt;div id=&quot;item5&quot; class=&quot;colorBox&quot;&gt;&lt;/div&gt;
-                &lt;/div&gt;
-            &lt;/div&gt;
-            &lt;div id=&quot;initialSnapCoordinate&quot; class=&quot;horizontalGallery initialSnapCoordinate&quot; style=&quot;-webkit-scroll-snap-coordinate: initial; -webkit-scroll-snap-destination: none;&quot;&gt;
-                &lt;div class=&quot;horizontalGalleryDrawer&quot;&gt;
-                    &lt;div id=&quot;item0&quot; class=&quot;colorBox&quot;&gt;&lt;/div&gt;
-                    &lt;div id=&quot;item1&quot; class=&quot;colorBox&quot;&gt;&lt;/div&gt;
-                    &lt;div id=&quot;item2&quot; class=&quot;colorBox&quot;&gt;&lt;/div&gt;
-                    &lt;div id=&quot;item3&quot; class=&quot;colorBox&quot;&gt;&lt;/div&gt;
-                    &lt;div id=&quot;item4&quot; class=&quot;colorBox&quot;&gt;&lt;/div&gt;
-                    &lt;div id=&quot;item5&quot; class=&quot;colorBox&quot;&gt;&lt;/div&gt;
-                &lt;/div&gt;
-            &lt;/div&gt;
-            &lt;div id=&quot;noneSnapCoordinateAndDestination&quot; class=&quot;horizontalGallery noneSnapCoordinateAndDestination&quot; style=&quot;-webkit-scroll-snap-destination: none; -webkit-scroll-snap-coordinate: none;&quot;&gt;
-                &lt;div class=&quot;horizontalGalleryDrawer&quot;&gt;
-                    &lt;div id=&quot;item0&quot; class=&quot;colorBox&quot;&gt;&lt;/div&gt;
-                    &lt;div id=&quot;item1&quot; class=&quot;colorBox&quot;&gt;&lt;/div&gt;
-                    &lt;div id=&quot;item2&quot; class=&quot;colorBox&quot;&gt;&lt;/div&gt;
-                    &lt;div id=&quot;item3&quot; class=&quot;colorBox&quot;&gt;&lt;/div&gt;
-                    &lt;div id=&quot;item4&quot; class=&quot;colorBox&quot;&gt;&lt;/div&gt;
-                    &lt;div id=&quot;item5&quot; class=&quot;colorBox&quot;&gt;&lt;/div&gt;
-                &lt;/div&gt;
-            &lt;/div&gt;
-            &lt;div id=&quot;allInitial&quot; class=&quot;horizontalGallery allInitial&quot; style=&quot;-webkit-scroll-snap-type: initial; -webkit-scroll-snap-points-x: initial; -webkit-scroll-snap-points-y: initial; -webkit-scroll-snap-destination: initial; -webkit-scroll-snap-coordinate: initial&quot;&gt;
-                &lt;div class=&quot;horizontalGalleryDrawer&quot;&gt;
-                    &lt;div id=&quot;item0&quot; class=&quot;colorBox&quot;&gt;&lt;/div&gt;
-                    &lt;div id=&quot;item1&quot; class=&quot;colorBox&quot;&gt;&lt;/div&gt;
-                    &lt;div id=&quot;item2&quot; class=&quot;colorBox&quot;&gt;&lt;/div&gt;
-                    &lt;div id=&quot;item3&quot; class=&quot;colorBox&quot;&gt;&lt;/div&gt;
-                    &lt;div id=&quot;item4&quot; class=&quot;colorBox&quot;&gt;&lt;/div&gt;
-                    &lt;div id=&quot;item5&quot; class=&quot;colorBox&quot;&gt;&lt;/div&gt;
-                &lt;/div&gt;
-            &lt;/div&gt;
-            &lt;div id=&quot;calculatedCoordinateAndDestination&quot; class=&quot;horizontalGallery calculatedCoordinateAndDestination&quot;&gt;
-                &lt;div class=&quot;horizontalGalleryDrawer&quot;&gt;
-                    &lt;div id=&quot;item0&quot; class=&quot;colorBox&quot;&gt;&lt;/div&gt;
-                    &lt;div id=&quot;item1&quot; class=&quot;colorBox&quot;&gt;&lt;/div&gt;
-                    &lt;div id=&quot;item2&quot; class=&quot;colorBox&quot;&gt;&lt;/div&gt;
-                    &lt;div id=&quot;item3&quot; class=&quot;colorBox&quot;&gt;&lt;/div&gt;
-                    &lt;div id=&quot;item4&quot; class=&quot;colorBox&quot;&gt;&lt;/div&gt;
-                    &lt;div id=&quot;item5&quot; class=&quot;colorBox&quot;&gt;&lt;/div&gt;
-                &lt;/div&gt;
-            &lt;/div&gt;
-        &lt;/div&gt;
-        &lt;div id=&quot;console&quot;&gt;&lt;/div&gt;
-        &lt;script&gt;
-        description(&quot;Tests 'initial' on scroll snap properties.&quot;);
-
-        var noInitial = document.getElementById('noInitial');
-        shouldBeEmptyString(&quot;noInitial.style['-webkit-scroll-snap-type']&quot;);
-        shouldBeEqualToString(&quot;window.getComputedStyle(noInitial).getPropertyValue('-webkit-scroll-snap-type')&quot;, &quot;mandatory&quot;);
-        shouldBeEmptyString(&quot;noInitial.style['-webkit-scroll-snap-points-x']&quot;);
-        shouldBeEqualToString(&quot;window.getComputedStyle(noInitial).getPropertyValue('-webkit-scroll-snap-points-x')&quot;, &quot;repeat(100%)&quot;);
-        shouldBeEmptyString(&quot;noInitial.style['-webkit-scroll-snap-points-y']&quot;);
-        shouldBeEqualToString(&quot;window.getComputedStyle(noInitial).getPropertyValue('-webkit-scroll-snap-points-y')&quot;, &quot;repeat(100%)&quot;);
-        shouldBeEqualToString(&quot;noInitial.style['-webkit-scroll-snap-destination']&quot;, &quot;100% 100%&quot;);
-        shouldBeEqualToString(&quot;window.getComputedStyle(noInitial).getPropertyValue('-webkit-scroll-snap-destination')&quot;, &quot;100% 100%&quot;);
-        shouldBeEqualToString(&quot;noInitial.style['-webkit-scroll-snap-coordinate']&quot;, &quot;0% 0%&quot;);
-        shouldBeEqualToString(&quot;window.getComputedStyle(noInitial).getPropertyValue('-webkit-scroll-snap-coordinate')&quot;, &quot;0% 0%&quot;);
-
-        var initialType = document.getElementById('initialType');
-        shouldBeEqualToString(&quot;initialType.style['-webkit-scroll-snap-type']&quot;, &quot;initial&quot;);
-        shouldBeEqualToString(&quot;window.getComputedStyle(initialType).getPropertyValue('-webkit-scroll-snap-type')&quot;, &quot;none&quot;);
-        shouldBeEmptyString(&quot;initialType.style['-webkit-scroll-snap-points-x']&quot;);
-        shouldBeEqualToString(&quot;window.getComputedStyle(initialType).getPropertyValue('-webkit-scroll-snap-points-x')&quot;, &quot;repeat(100%)&quot;);
-        shouldBeEmptyString(&quot;initialType.style['-webkit-scroll-snap-points-y']&quot;);
-        shouldBeEqualToString(&quot;window.getComputedStyle(initialType).getPropertyValue('-webkit-scroll-snap-points-y')&quot;, &quot;repeat(100%)&quot;);
-        shouldBeEqualToString(&quot;initialType.style['-webkit-scroll-snap-destination']&quot;, &quot;0% 0%&quot;);
-        shouldBeEqualToString(&quot;window.getComputedStyle(initialType).getPropertyValue('-webkit-scroll-snap-destination')&quot;, &quot;0% 0%&quot;);
-        shouldBeEqualToString(&quot;initialType.style['-webkit-scroll-snap-coordinate']&quot;, &quot;100% 100%&quot;);
-        shouldBeEqualToString(&quot;window.getComputedStyle(initialType).getPropertyValue('-webkit-scroll-snap-coordinate')&quot;, &quot;100% 100%&quot;);
-
-        var initialXPoints = document.getElementById('initialXPoints');
-        shouldBeEmptyString(&quot;initialXPoints.style['-webkit-scroll-snap-type']&quot;);
-        shouldBeEqualToString(&quot;window.getComputedStyle(initialXPoints).getPropertyValue('-webkit-scroll-snap-type')&quot;, &quot;mandatory&quot;);
-        shouldBeEqualToString(&quot;initialXPoints.style['-webkit-scroll-snap-points-x']&quot;, &quot;initial&quot;);
-        shouldBeEqualToString(&quot;window.getComputedStyle(initialXPoints).getPropertyValue('-webkit-scroll-snap-points-x')&quot;, &quot;none&quot;);
-        shouldBeEmptyString(&quot;initialXPoints.style['-webkit-scroll-snap-points-y']&quot;);
-        shouldBeEqualToString(&quot;window.getComputedStyle(initialXPoints).getPropertyValue('-webkit-scroll-snap-points-y')&quot;, &quot;repeat(100%)&quot;);
-        shouldBeEqualToString(&quot;initialXPoints.style['-webkit-scroll-snap-destination']&quot;, &quot;50% 50%&quot;);
-        shouldBeEqualToString(&quot;window.getComputedStyle(initialXPoints).getPropertyValue('-webkit-scroll-snap-destination')&quot;, &quot;50% 50%&quot;);
-        shouldBeEqualToString(&quot;initialXPoints.style['-webkit-scroll-snap-coordinate']&quot;, &quot;50% 50%&quot;);
-        shouldBeEqualToString(&quot;window.getComputedStyle(initialXPoints).getPropertyValue('-webkit-scroll-snap-coordinate')&quot;, &quot;50% 50%&quot;);
-
-        var initialYPoints = document.getElementById('initialYPoints');
-        shouldBeEmptyString(&quot;initialYPoints.style['-webkit-scroll-snap-type']&quot;);
-        shouldBeEqualToString(&quot;window.getComputedStyle(initialYPoints).getPropertyValue('-webkit-scroll-snap-type')&quot;, &quot;mandatory&quot;);
-        shouldBeEmptyString(&quot;initialYPoints.style['-webkit-scroll-snap-points-x']&quot;);
-        shouldBeEqualToString(&quot;window.getComputedStyle(initialYPoints).getPropertyValue('-webkit-scroll-snap-points-x')&quot;, &quot;repeat(100%)&quot;);
-        shouldBeEqualToString(&quot;initialYPoints.style['-webkit-scroll-snap-points-y']&quot;, &quot;initial&quot;);
-        shouldBeEqualToString(&quot;window.getComputedStyle(initialYPoints).getPropertyValue('-webkit-scroll-snap-points-y')&quot;, &quot;none&quot;);
-        shouldBeEqualToString(&quot;initialYPoints.style['-webkit-scroll-snap-destination']&quot;, &quot;50% 20px&quot;);
-        shouldBeEqualToString(&quot;window.getComputedStyle(initialYPoints).getPropertyValue('-webkit-scroll-snap-destination')&quot;, &quot;50% 20px&quot;);
-        shouldBeEqualToString(&quot;initialYPoints.style['-webkit-scroll-snap-coordinate']&quot;, &quot;50% 50%&quot;);
-        shouldBeEqualToString(&quot;window.getComputedStyle(initialYPoints).getPropertyValue('-webkit-scroll-snap-coordinate')&quot;, &quot;50% 50%&quot;);
-
-        var initialDestination = document.getElementById('initialDestination');
-        shouldBeEmptyString(&quot;initialDestination.style['-webkit-scroll-snap-type']&quot;);
-        shouldBeEqualToString(&quot;window.getComputedStyle(initialDestination).getPropertyValue('-webkit-scroll-snap-type')&quot;, &quot;proximity&quot;);
-        shouldBeEmptyString(&quot;initialDestination.style['-webkit-scroll-snap-points-x']&quot;);
-        shouldBeEqualToString(&quot;window.getComputedStyle(initialDestination).getPropertyValue('-webkit-scroll-snap-points-x')&quot;, &quot;repeat(100%)&quot;);
-        shouldBeEmptyString(&quot;initialDestination.style['-webkit-scroll-snap-points-y']&quot;);
-        shouldBeEqualToString(&quot;window.getComputedStyle(initialDestination).getPropertyValue('-webkit-scroll-snap-points-y')&quot;, &quot;repeat(100%)&quot;);
-        shouldBeEqualToString(&quot;initialDestination.style['-webkit-scroll-snap-destination']&quot;, &quot;initial&quot;);
-        shouldBeEqualToString(&quot;window.getComputedStyle(initialDestination).getPropertyValue('-webkit-scroll-snap-destination')&quot;, &quot;0px 0px&quot;);
-        shouldBeEqualToString(&quot;initialDestination.style['-webkit-scroll-snap-coordinate']&quot;, &quot;none&quot;);
-        shouldBeEqualToString(&quot;window.getComputedStyle(initialDestination).getPropertyValue('-webkit-scroll-snap-coordinate')&quot;, &quot;none&quot;);
-
-        var initialSnapCoordinate = document.getElementById('initialSnapCoordinate');
-        shouldBeEmptyString(&quot;initialSnapCoordinate.style['-webkit-scroll-snap-type']&quot;);
-        shouldBeEqualToString(&quot;window.getComputedStyle(initialSnapCoordinate).getPropertyValue('-webkit-scroll-snap-type')&quot;, &quot;mandatory&quot;);
-        shouldBeEmptyString(&quot;initialSnapCoordinate.style['-webkit-scroll-snap-points-x']&quot;);
-        shouldBeEqualToString(&quot;window.getComputedStyle(initialSnapCoordinate).getPropertyValue('-webkit-scroll-snap-points-x')&quot;, &quot;repeat(100%)&quot;);
-        shouldBeEmptyString(&quot;initialSnapCoordinate.style['-webkit-scroll-snap-points-y']&quot;);
-        shouldBeEqualToString(&quot;window.getComputedStyle(initialSnapCoordinate).getPropertyValue('-webkit-scroll-snap-points-y')&quot;, &quot;repeat(100%)&quot;);
-        shouldBeEmptyString(&quot;initialSnapCoordinate.style['-webkit-scroll-snap-destination']&quot;);
-        shouldBeEqualToString(&quot;window.getComputedStyle(initialSnapCoordinate).getPropertyValue('-webkit-scroll-snap-destination')&quot;, &quot;0px 0px&quot;);
-        shouldBeEqualToString(&quot;initialSnapCoordinate.style['-webkit-scroll-snap-coordinate']&quot;, &quot;initial&quot;);
-        shouldBeEqualToString(&quot;window.getComputedStyle(initialSnapCoordinate).getPropertyValue('-webkit-scroll-snap-coordinate')&quot;, &quot;none&quot;);
-
-        var allInitial = document.getElementById('allInitial');
-        shouldBeEqualToString(&quot;allInitial.style['-webkit-scroll-snap-type']&quot;, &quot;initial&quot;);
-        shouldBeEqualToString(&quot;window.getComputedStyle(allInitial).getPropertyValue('-webkit-scroll-snap-type')&quot;, &quot;none&quot;);
-        shouldBeEqualToString(&quot;allInitial.style['-webkit-scroll-snap-points-x']&quot;, &quot;initial&quot;);
-        shouldBeEqualToString(&quot;window.getComputedStyle(allInitial).getPropertyValue('-webkit-scroll-snap-points-x')&quot;, &quot;none&quot;);
-        shouldBeEqualToString(&quot;allInitial.style['-webkit-scroll-snap-points-y']&quot;, &quot;initial&quot;);
-        shouldBeEqualToString(&quot;window.getComputedStyle(allInitial).getPropertyValue('-webkit-scroll-snap-points-y')&quot;, &quot;none&quot;);
-        shouldBeEqualToString(&quot;allInitial.style['-webkit-scroll-snap-destination']&quot;, &quot;initial&quot;);
-        shouldBeEqualToString(&quot;window.getComputedStyle(allInitial).getPropertyValue('-webkit-scroll-snap-destination')&quot;, &quot;0px 0px&quot;);
-        shouldBeEqualToString(&quot;allInitial.style['-webkit-scroll-snap-coordinate']&quot;, &quot;initial&quot;);
-        shouldBeEqualToString(&quot;window.getComputedStyle(allInitial).getPropertyValue('-webkit-scroll-snap-coordinate')&quot;, &quot;none&quot;);
-
-        var noneSnapCoordinateAndDestination = document.getElementById('noneSnapCoordinateAndDestination');
-        shouldBeEmptyString(&quot;noneSnapCoordinateAndDestination.style['-webkit-scroll-snap-type']&quot;);
-        shouldBeEqualToString(&quot;window.getComputedStyle(noneSnapCoordinateAndDestination).getPropertyValue('-webkit-scroll-snap-type')&quot;, &quot;mandatory&quot;);
-        shouldBeEmptyString(&quot;noneSnapCoordinateAndDestination.style['-webkit-scroll-snap-points-x']&quot;);
-        shouldBeEqualToString(&quot;window.getComputedStyle(noneSnapCoordinateAndDestination).getPropertyValue('-webkit-scroll-snap-points-x')&quot;, &quot;repeat(100%)&quot;);
-        shouldBeEmptyString(&quot;noneSnapCoordinateAndDestination.style['-webkit-scroll-snap-points-y']&quot;);
-        shouldBeEqualToString(&quot;window.getComputedStyle(noneSnapCoordinateAndDestination).getPropertyValue('-webkit-scroll-snap-points-y')&quot;, &quot;repeat(100%)&quot;);
-        shouldBeEmptyString(&quot;noneSnapCoordinateAndDestination.style['-webkit-scroll-snap-destination']&quot;);
-        shouldBeEqualToString(&quot;window.getComputedStyle(noneSnapCoordinateAndDestination).getPropertyValue('-webkit-scroll-snap-destination')&quot;, &quot;0px 0px&quot;);
-        shouldBeEqualToString(&quot;noneSnapCoordinateAndDestination.style['-webkit-scroll-snap-coordinate']&quot;, &quot;none&quot;);
-        shouldBeEqualToString(&quot;window.getComputedStyle(noneSnapCoordinateAndDestination).getPropertyValue('-webkit-scroll-snap-coordinate')&quot;, &quot;none&quot;);
-
-        var calculatedCoordinateAndDestination = document.getElementById('calculatedCoordinateAndDestination');
-        shouldBeEmptyString(&quot;calculatedCoordinateAndDestination.style['-webkit-scroll-snap-type']&quot;);
-        shouldBeEqualToString(&quot;window.getComputedStyle(calculatedCoordinateAndDestination).getPropertyValue('-webkit-scroll-snap-type')&quot;, &quot;mandatory&quot;);
-        shouldBeEmptyString(&quot;calculatedCoordinateAndDestination.style['-webkit-scroll-snap-points-x']&quot;);
-        shouldBeEqualToString(&quot;window.getComputedStyle(calculatedCoordinateAndDestination).getPropertyValue('-webkit-scroll-snap-points-x')&quot;, &quot;repeat(96%)&quot;);
-        shouldBeEmptyString(&quot;calculatedCoordinateAndDestination.style['-webkit-scroll-snap-points-y']&quot;);
-        shouldBeEqualToString(&quot;window.getComputedStyle(calculatedCoordinateAndDestination).getPropertyValue('-webkit-scroll-snap-points-y')&quot;, &quot;repeat(52%)&quot;);
-        shouldBeEmptyString(&quot;calculatedCoordinateAndDestination.style['-webkit-scroll-snap-destination']&quot;);
-        shouldBeEqualToString(&quot;window.getComputedStyle(calculatedCoordinateAndDestination).getPropertyValue('-webkit-scroll-snap-destination')&quot;, &quot;106px 25px&quot;);
-        shouldBeEmptyString(&quot;calculatedCoordinateAndDestination.style['-webkit-scroll-snap-coordinate']&quot;);
-        shouldBeEqualToString(&quot;window.getComputedStyle(calculatedCoordinateAndDestination).getPropertyValue('-webkit-scroll-snap-coordinate')&quot;, &quot;16px 384px&quot;);
-        &lt;/script&gt;
-        &lt;script src=&quot;../../resources/js-test-post.js&quot;&gt;&lt;/script&gt;
-    &lt;/body&gt;
-&lt;/html&gt;
-
</del></span></pre></div>
<a id="trunkLayoutTestscss3scrollsnapscrollsnappositionsexpectedtxt"></a>
<div class="addfile"><h4>Added: trunk/LayoutTests/css3/scroll-snap/scroll-snap-positions-expected.txt (0 => 210024)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/css3/scroll-snap/scroll-snap-positions-expected.txt                                (rev 0)
+++ trunk/LayoutTests/css3/scroll-snap/scroll-snap-positions-expected.txt        2016-12-20 18:44:38 UTC (rev 210024)
</span><span class="lines">@@ -0,0 +1,8 @@
</span><ins>+PASS successfullyParsed is true
+
+TEST COMPLETE
+Scroll-snap offsets for 'container': vertical = { 0, 72, 100, 330, 445, 560, 675, 762, 790, 992, 1020, 1250, 1310, 1365, 1425, 1480, 4425 }
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
</ins></span></pre></div>
<a id="trunkLayoutTestscss3scrollsnapscrollsnappositionsmainframeexpectedtxtfromrev210023trunkLayoutTestscss3scrollsnapscrollsnapcoordinatemainframeexpectedtxt"></a>
<div class="copfile"><h4>Copied: trunk/LayoutTests/css3/scroll-snap/scroll-snap-positions-mainframe-expected.txt (from rev 210023, trunk/LayoutTests/css3/scroll-snap/scroll-snap-coordinate-mainframe-expected.txt) (0 => 210024)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/css3/scroll-snap/scroll-snap-positions-mainframe-expected.txt                                (rev 0)
+++ trunk/LayoutTests/css3/scroll-snap/scroll-snap-positions-mainframe-expected.txt        2016-12-20 18:44:38 UTC (rev 210024)
</span><span class="lines">@@ -0,0 +1,8 @@
</span><ins>+PASS successfullyParsed is true
+
+TEST COMPLETE
+Scroll-snap offsets: vertical = { 0, 600, 1200, 1800, 2400, 3000 }
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
</ins></span></pre></div>
<a id="trunkLayoutTestscss3scrollsnapscrollsnappositionsmainframehtmlfromrev210023trunkLayoutTestscss3scrollsnapscrollsnapcoordinatemainframehtml"></a>
<div class="copfile"><h4>Copied: trunk/LayoutTests/css3/scroll-snap/scroll-snap-positions-mainframe.html (from rev 210023, trunk/LayoutTests/css3/scroll-snap/scroll-snap-coordinate-mainframe.html) (0 => 210024)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/css3/scroll-snap/scroll-snap-positions-mainframe.html                                (rev 0)
+++ trunk/LayoutTests/css3/scroll-snap/scroll-snap-positions-mainframe.html        2016-12-20 18:44:38 UTC (rev 210024)
</span><span class="lines">@@ -0,0 +1,47 @@
</span><ins>+&lt;html&gt;
+
+&lt;head&gt;
+    &lt;style&gt;
+        body {
+            margin: 0;
+            scroll-snap-type: y mandatory;
+        }
+
+        .vertical {
+            width: 100%;
+            height: 600px;
+            scroll-snap-align: start;
+        }
+    &lt;/style&gt;
+
+    &lt;script src=&quot;../../resources/js-test-pre.js&quot;&gt;&lt;/script&gt;
+    &lt;script&gt;
+    function runTest()
+    {
+        debug(&quot;Scroll-snap offsets: &quot; + window.internals.scrollSnapOffsets(document.body));
+        finishJSTest();
+    }
+
+    function setup()
+    {
+        if (window.testRunner) {
+            window.jsTestIsAsync = true;
+            testRunner.dumpAsText();
+            testRunner.waitUntilDone();
+            setTimeout(runTest, 0);
+        }
+    }
+    &lt;/script&gt;
+&lt;/head&gt;
+
+&lt;body onload=&quot;setup()&quot;&gt;
+    &lt;div id=&quot;child00&quot; class=&quot;vertical&quot;&gt;&lt;div id=&quot;console&quot;&gt;&lt;/div&gt;&lt;/div&gt;
+    &lt;div id=&quot;child01&quot; class=&quot;vertical&quot;&gt;&lt;/div&gt;
+    &lt;div id=&quot;child02&quot; class=&quot;vertical&quot;&gt;&lt;/div&gt;
+    &lt;div id=&quot;child03&quot; class=&quot;vertical&quot;&gt;&lt;/div&gt;
+    &lt;div id=&quot;child04&quot; class=&quot;vertical&quot;&gt;&lt;/div&gt;
+    &lt;div id=&quot;child05&quot; class=&quot;vertical&quot;&gt;&lt;/div&gt;
+    &lt;script src=&quot;../../resources/js-test-post.js&quot;&gt;&lt;/script&gt;
+&lt;/body&gt;
+
+&lt;/html&gt;
</ins></span></pre></div>
<a id="trunkLayoutTestscss3scrollsnapscrollsnappositionsoverflowresizeexpectedtxtfromrev210023trunkLayoutTestscss3scrollsnapscrollsnapcoordinateoverflowresizeexpectedtxt"></a>
<div class="copfile"><h4>Copied: trunk/LayoutTests/css3/scroll-snap/scroll-snap-positions-overflow-resize-expected.txt (from rev 210023, trunk/LayoutTests/css3/scroll-snap/scroll-snap-coordinate-overflow-resize-expected.txt) (0 => 210024)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/css3/scroll-snap/scroll-snap-positions-overflow-resize-expected.txt                                (rev 0)
+++ trunk/LayoutTests/css3/scroll-snap/scroll-snap-positions-overflow-resize-expected.txt        2016-12-20 18:44:38 UTC (rev 210024)
</span><span class="lines">@@ -0,0 +1,9 @@
</span><ins>+PASS successfullyParsed is true
+
+TEST COMPLETE
+Scroll-snap offsets: vertical = { 0, 400, 800, 1200, 1600, 2000 }
+Scroll-snap offsets: vertical = { 0, 400, 800, 1200, 1600, 2000 }
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
</ins></span></pre></div>
<a id="trunkLayoutTestscss3scrollsnapscrollsnappositionsoverflowresizehtmlfromrev210023trunkLayoutTestscss3scrollsnapscrollsnapcoordinateoverflowresizehtml"></a>
<div class="copfile"><h4>Copied: trunk/LayoutTests/css3/scroll-snap/scroll-snap-positions-overflow-resize.html (from rev 210023, trunk/LayoutTests/css3/scroll-snap/scroll-snap-coordinate-overflow-resize.html) (0 => 210024)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/css3/scroll-snap/scroll-snap-positions-overflow-resize.html                                (rev 0)
+++ trunk/LayoutTests/css3/scroll-snap/scroll-snap-positions-overflow-resize.html        2016-12-20 18:44:38 UTC (rev 210024)
</span><span class="lines">@@ -0,0 +1,60 @@
</span><ins>+&lt;html&gt;
+
+&lt;head&gt;
+    &lt;style&gt;
+        #container {
+            width: 420px;
+            height: 400px;
+            overflow-y: scroll;
+            scroll-snap-type: y mandatory;
+        }
+
+        .cell {
+            width: 400px;
+            height: 400px;
+            scroll-snap-align: start;
+        }
+    &lt;/style&gt;
+    &lt;script src=&quot;../../resources/js-test-pre.js&quot;&gt;&lt;/script&gt;
+    &lt;script&gt;
+    function setup()
+    {
+        var container = document.getElementById(&quot;container&quot;);
+
+        function dumpSnapOffsetsAndFinishTest()
+        {
+            debug(&quot;Scroll-snap offsets: &quot; + window.internals.scrollSnapOffsets(container));
+            finishJSTest();
+        }
+
+        function dumpSnapOffsetsAndResizeElement()
+        {
+            debug(&quot;Scroll-snap offsets: &quot; + window.internals.scrollSnapOffsets(container));
+            container.style.width = &quot;425px&quot;;
+            setTimeout(dumpSnapOffsetsAndFinishTest, 0);
+        }
+
+        container.scrollTop = 800;
+        if (window.testRunner) {
+            window.jsTestIsAsync = true;
+            testRunner.dumpAsText();
+            testRunner.waitUntilDone();
+            setTimeout(dumpSnapOffsetsAndResizeElement, 0);
+        }
+    }
+    &lt;/script&gt;
+&lt;/head&gt;
+
+&lt;body onload=&quot;setup()&quot;&gt;
+    &lt;div id=&quot;container&quot;&gt;
+        &lt;div class=&quot;cell&quot;&gt;&lt;div id=&quot;console&quot;&gt;&lt;/div&gt;&lt;/div&gt;
+        &lt;div class=&quot;cell&quot;&gt;&lt;/div&gt;
+        &lt;div class=&quot;cell&quot;&gt;&lt;/div&gt;
+        &lt;div class=&quot;cell&quot;&gt;&lt;/div&gt;
+        &lt;div class=&quot;cell&quot;&gt;&lt;/div&gt;
+        &lt;div class=&quot;cell&quot;&gt;&lt;/div&gt;
+    &lt;/div&gt;
+    &lt;script src=&quot;../../resources/js-test-post.js&quot;&gt;&lt;/script&gt;
+&lt;/body&gt;
+
+&lt;/html&gt;
</ins></span></pre></div>
<a id="trunkLayoutTestscss3scrollsnapscrollsnappositionshtml"></a>
<div class="addfile"><h4>Added: trunk/LayoutTests/css3/scroll-snap/scroll-snap-positions.html (0 => 210024)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/css3/scroll-snap/scroll-snap-positions.html                                (rev 0)
+++ trunk/LayoutTests/css3/scroll-snap/scroll-snap-positions.html        2016-12-20 18:44:38 UTC (rev 210024)
</span><span class="lines">@@ -0,0 +1,156 @@
</span><ins>+&lt;!DOCTYPE html&gt;
+&lt;html&gt;
+&lt;head&gt;
+    &lt;title&gt;Snap points - nested snap coordinates&lt;/title&gt;
+    &lt;style&gt;
+        #container {
+            position: absolute;
+            width: 300px;
+            height: 300px;
+            top: 100px;
+            left: 100px;
+        }
+
+        .scrollable {
+            overflow: scroll;
+            -webkit-overflow-scrolling: touch;
+            height: 300px;
+            margin: 0 10px;
+        }
+
+        ::-webkit-scrollbar {
+            display: none;
+        }
+    
+        .center-snap-receiver {
+            scroll-snap-type: y mandatory;
+        }
+    
+        .snap-point-marker {
+            margin-top: 100px;
+            width: 15px;
+            height: 15px;
+        }
+
+        .snap-point-start {
+            scroll-snap-align: start;
+            background-color: red;
+            opacity: 0.5;
+        }
+
+        .snap-point-center {
+            scroll-snap-align: center;
+            background-color: green;
+            opacity: 0.5;
+        }
+
+        .snap-point-end {
+            scroll-snap-align: end;
+            background-color: blue;
+            opacity: 0.5;
+        }
+
+        .large-content {
+            height: 3000px;
+            width: 100%;
+        }
+    
+        .small-content {
+            height: 200px;
+            width: 100%;
+        }
+
+        .invalidContainer {
+            background-color: black;
+            opacity: 0.1;
+            height: 300px;
+            margin: 0 10px;
+            opacity: 0.5;
+            overflow: hidden;
+        }
+
+        #alignment-marker-box {
+            position: absolute;
+            top: 0;
+            left: 0;
+            width: 300px;
+            height: 300px;
+            top: 100px;
+            left: 100px;
+            z-index: -1;
+            margin: 0 10px;
+        }
+
+        .alignment-marker {
+            position: absolute;
+            width: 100%;
+            height: 1px;
+        }
+    &lt;/style&gt;
+        &lt;script src=&quot;../../resources/js-test-pre.js&quot;&gt;&lt;/script&gt;
+        &lt;script&gt;
+        function runTest()
+        {
+            var container = document.getElementById('container');
+            debug(&quot;Scroll-snap offsets for 'container': &quot; + window.internals.scrollSnapOffsets(container));
+
+            finishJSTest();
+            testRunner.notifyDone();
+        }
+
+        function onLoad()
+        {
+            if (window.testRunner) {
+                window.jsTestIsAsync = true;
+                testRunner.dumpAsText();
+                testRunner.waitUntilDone();
+                setTimeout(runTest, 0);
+            }
+        }
+        &lt;/script&gt;
+&lt;/head&gt;
+&lt;body onload=&quot;onLoad();&quot;&gt;
+    &lt;div id=&quot;container&quot; class=&quot;center-snap-receiver scrollable&quot;&gt;
+        &lt;div id=&quot;snap-child-1&quot; class=&quot;snap-point-start snap-point-marker&quot;&gt;&lt;/div&gt;
+        &lt;div class=&quot;nested&quot;&gt;
+            &lt;div id=&quot;snap-child-2&quot; class=&quot;snap-point-center snap-point-marker&quot;&gt;&lt;/div&gt;
+        &lt;/div&gt;
+        &lt;div class=&quot;nested&quot;&gt;
+            &lt;div class=&quot;nested&quot;&gt;
+                &lt;div id=&quot;snap-child-3&quot; class=&quot;snap-point-start snap-point-marker&quot;&gt;&lt;/div&gt;
+            &lt;/div&gt;
+        &lt;/div&gt;
+        &lt;div id=&quot;snap-child-4&quot; class=&quot;snap-point-start snap-point-marker&quot;&gt;&lt;/div&gt;
+        &lt;div id=&quot;snap-child-5&quot; class=&quot;snap-point-start snap-point-marker&quot;&gt;&lt;/div&gt;
+        &lt;div class=&quot;nested&quot;&gt;
+            &lt;div id=&quot;snap-child-6&quot; class=&quot;snap-point-start snap-point-marker&quot;&gt;&lt;/div&gt;
+        &lt;/div&gt;
+        &lt;div id=&quot;snap-child-7&quot; class=&quot;snap-point-start snap-point-marker&quot;&gt;&lt;/div&gt;
+        &lt;div class=&quot;nested&quot;&gt;
+            &lt;div id=&quot;snap-child-8&quot; class=&quot;snap-point-center snap-point-marker&quot;&gt;&lt;/div&gt;
+        &lt;/div&gt;
+        &lt;div id=&quot;snap-child-9&quot; class=&quot;snap-point-start snap-point-marker&quot;&gt;&lt;/div&gt;
+        &lt;div id=&quot;snap-child-10&quot; class=&quot;snap-point-center snap-point-marker&quot;&gt;&lt;/div&gt;
+        &lt;div class=&quot;nested&quot;&gt;
+            &lt;div id=&quot;snap-child-11&quot; class=&quot;snap-point-start snap-point-marker&quot;&gt;&lt;/div&gt;
+        &lt;/div&gt;
+         &lt;div id=&quot;snap-child-12&quot; class=&quot;snap-point-start snap-point-marker&quot;&gt;&lt;/div&gt;
+        &lt;div class=&quot;nested&quot;&gt;
+            &lt;div id=&quot;snap-child-13&quot; class=&quot;snap-point-start snap-point-marker&quot;&gt;&lt;/div&gt;
+        &lt;/div&gt;
+        &lt;div class=&quot;nested&quot;&gt;
+            &lt;div class=&quot;nested&quot;&gt;
+                &lt;div id=&quot;snap-child-14&quot; class=&quot;snap-point-end snap-point-marker&quot;&gt;&lt;/div&gt;
+            &lt;/div&gt;
+        &lt;/div&gt;
+        &lt;div id=&quot;snap-child-15&quot; class=&quot;snap-point-end snap-point-marker&quot;&gt;&lt;/div&gt;
+        &lt;div class=&quot;large-content&quot;&gt;&lt;/div&gt;
+    &lt;/div&gt;
+    &lt;div id=&quot;alignment-marker-box&quot;&gt;
+        &lt;div style=&quot;border-bottom: 2px red solid;&quot; class=&quot;alignment-marker&quot;&gt;&lt;/div&gt;
+        &lt;div style=&quot;border-bottom: 2px green solid; top: 150px;&quot; class=&quot;alignment-marker&quot;&gt;&lt;/div&gt;
+        &lt;div style=&quot;border-bottom: 2px blue solid; top: 300px;&quot; class=&quot;alignment-marker&quot;&gt;&lt;/div&gt;
+    &lt;/div&gt;
+    &lt;script src=&quot;../../resources/js-test-post.js&quot;&gt;&lt;/script&gt;
+&lt;/body&gt;
+&lt;/html&gt;
</ins></span></pre></div>
<a id="trunkLayoutTestscss3scrollsnapscrollsnappropertycomputedstyleexpectedtxt"></a>
<div class="modfile"><h4>Modified: trunk/LayoutTests/css3/scroll-snap/scroll-snap-property-computed-style-expected.txt (210023 => 210024)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/css3/scroll-snap/scroll-snap-property-computed-style-expected.txt        2016-12-20 18:26:10 UTC (rev 210023)
+++ trunk/LayoutTests/css3/scroll-snap/scroll-snap-property-computed-style-expected.txt        2016-12-20 18:44:38 UTC (rev 210024)
</span><span class="lines">@@ -1,182 +1,235 @@
</span><del>-Test the computed style of the -webkit-scroll-snap-* properties.
</del><ins>+Test the computed style of the scroll-snap-* properties.
</ins><span class="cx"> 
</span><span class="cx"> On success, you will see a series of &quot;PASS&quot; messages, followed by &quot;TEST COMPLETE&quot;.
</span><span class="cx"> 
</span><span class="cx"> 
</span><span class="cx"> 
</span><del>-invalid snapping type : potato
-PASS window.getComputedStyle(document.body).getPropertyValue('-webkit-scroll-snap-type') is 'none'
</del><ins>+invalid snap type: `potato`
+PASS window.getComputedStyle(document.body).getPropertyValue('scroll-snap-type') is 'none'
</ins><span class="cx"> 
</span><del>-invalid points along x axis : hello world
-PASS window.getComputedStyle(document.body).getPropertyValue('-webkit-scroll-snap-points-x') is 'none'
</del><ins>+empty string for snap type: ``
+PASS window.getComputedStyle(document.body).getPropertyValue('scroll-snap-type') is 'none'
</ins><span class="cx"> 
</span><del>-invalid points along y axis : hello world
-PASS window.getComputedStyle(document.body).getPropertyValue('-webkit-scroll-snap-points-y') is 'none'
</del><ins>+too many values: `block mandatory proximity`
+PASS window.getComputedStyle(document.body).getPropertyValue('scroll-snap-type') is 'none'
</ins><span class="cx"> 
</span><del>-typo in point definition : repaet(50px)
-PASS window.getComputedStyle(document.body).getPropertyValue('-webkit-scroll-snap-points-x') is 'none'
</del><ins>+none following axis: `both none`
+PASS window.getComputedStyle(document.body).getPropertyValue('scroll-snap-type') is 'none'
</ins><span class="cx"> 
</span><del>-another invalid point definition : ??px repeat(50px)
-PASS window.getComputedStyle(document.body).getPropertyValue('-webkit-scroll-snap-points-x') is 'none'
</del><ins>+two axis values: `block inline`
+PASS window.getComputedStyle(document.body).getPropertyValue('scroll-snap-type') is 'none'
</ins><span class="cx"> 
</span><del>-invalid destination : foo bar
-PASS window.getComputedStyle(document.body).getPropertyValue('-webkit-scroll-snap-destination') is '0px 0px'
</del><ins>+two strictness values: `proximity mandatory`
+PASS window.getComputedStyle(document.body).getPropertyValue('scroll-snap-type') is 'none'
</ins><span class="cx"> 
</span><del>-short one destination value : 50%
-PASS window.getComputedStyle(document.body).getPropertyValue('-webkit-scroll-snap-destination') is '0px 0px'
</del><ins>+axis following strictness: `mandatory inline`
+PASS window.getComputedStyle(document.body).getPropertyValue('scroll-snap-type') is 'none'
</ins><span class="cx"> 
</span><del>-extra destination value : 50px 100% 75px
-PASS window.getComputedStyle(document.body).getPropertyValue('-webkit-scroll-snap-destination') is '0px 0px'
</del><ins>+initial value: `initial`
+PASS window.getComputedStyle(document.body).getPropertyValue('scroll-snap-type') is 'none'
</ins><span class="cx"> 
</span><del>-invalid coordinates : ben bitdiddle
-PASS window.getComputedStyle(document.body).getPropertyValue('-webkit-scroll-snap-coordinate') is 'none'
</del><ins>+only strictness: `mandatory`
+PASS window.getComputedStyle(document.body).getPropertyValue('scroll-snap-type') is 'both mandatory'
</ins><span class="cx"> 
</span><del>-mismatched x coordinate : 50% 100px 75%
-PASS window.getComputedStyle(document.body).getPropertyValue('-webkit-scroll-snap-coordinate') is 'none'
</del><ins>+only axis: `both`
+PASS window.getComputedStyle(document.body).getPropertyValue('scroll-snap-type') is 'both proximity'
</ins><span class="cx"> 
</span><del>-inherited type : inherit
-PASS window.getComputedStyle(document.body).getPropertyValue('-webkit-scroll-snap-type') is 'none'
</del><ins>+none: `none`
+PASS window.getComputedStyle(document.body).getPropertyValue('scroll-snap-type') is 'none'
</ins><span class="cx"> 
</span><del>-initial type : initial
-PASS window.getComputedStyle(document.body).getPropertyValue('-webkit-scroll-snap-type') is 'none'
</del><ins>+strictness following axis: `inline mandatory`
+PASS window.getComputedStyle(document.body).getPropertyValue('scroll-snap-type') is 'inline mandatory'
</ins><span class="cx"> 
</span><del>-none type : none
-PASS window.getComputedStyle(document.body).getPropertyValue('-webkit-scroll-snap-type') is 'none'
</del><ins>+invalid snap align: `potato`
+PASS window.getComputedStyle(document.body).getPropertyValue('scroll-snap-align') is 'none none'
</ins><span class="cx"> 
</span><del>-mandatory type : mandatory
-PASS window.getComputedStyle(document.body).getPropertyValue('-webkit-scroll-snap-type') is 'mandatory'
</del><ins>+empty string: ``
+PASS window.getComputedStyle(document.body).getPropertyValue('scroll-snap-align') is 'none none'
</ins><span class="cx"> 
</span><del>-proximity type : proximity
-PASS window.getComputedStyle(document.body).getPropertyValue('-webkit-scroll-snap-type') is 'proximity'
</del><ins>+too many values: `start center end`
+PASS window.getComputedStyle(document.body).getPropertyValue('scroll-snap-align') is 'none none'
</ins><span class="cx"> 
</span><del>-inherited points along x axis : inherit
-PASS window.getComputedStyle(document.body).getPropertyValue('-webkit-scroll-snap-points-x') is 'none'
</del><ins>+invalid second value: `start wut`
+PASS window.getComputedStyle(document.body).getPropertyValue('scroll-snap-align') is 'none none'
</ins><span class="cx"> 
</span><del>-initial points along x axis : initial
-PASS window.getComputedStyle(document.body).getPropertyValue('-webkit-scroll-snap-points-x') is 'none'
</del><ins>+invalid first value: `wat center`
+PASS window.getComputedStyle(document.body).getPropertyValue('scroll-snap-align') is 'none none'
</ins><span class="cx"> 
</span><del>-element points along x axis : elements
-PASS window.getComputedStyle(document.body).getPropertyValue('-webkit-scroll-snap-points-x') is 'elements'
</del><ins>+one length: `10px`
+PASS window.getComputedStyle(document.body).getPropertyValue('scroll-snap-align') is 'none none'
</ins><span class="cx"> 
</span><del>-percentage points along x axis : 100% 50%
-PASS window.getComputedStyle(document.body).getPropertyValue('-webkit-scroll-snap-points-x') is '100% 50%'
</del><ins>+two lengths: `10px 50px`
+PASS window.getComputedStyle(document.body).getPropertyValue('scroll-snap-align') is 'none none'
</ins><span class="cx"> 
</span><del>-pixel points along x axis : 100px 50px
-PASS window.getComputedStyle(document.body).getPropertyValue('-webkit-scroll-snap-points-x') is '100px 50px'
</del><ins>+initial value: `initial`
+PASS window.getComputedStyle(document.body).getPropertyValue('scroll-snap-align') is 'none none'
</ins><span class="cx"> 
</span><del>-percentage points repeat along x axis : repeat(100%)
-PASS window.getComputedStyle(document.body).getPropertyValue('-webkit-scroll-snap-points-x') is 'repeat(100%)'
</del><ins>+single value: `start`
+PASS window.getComputedStyle(document.body).getPropertyValue('scroll-snap-align') is 'start start'
</ins><span class="cx"> 
</span><del>-pixel points repeat along x axis : repeat(25px)
-PASS window.getComputedStyle(document.body).getPropertyValue('-webkit-scroll-snap-points-x') is 'repeat(25px)'
</del><ins>+two values: `start end`
+PASS window.getComputedStyle(document.body).getPropertyValue('scroll-snap-align') is 'start end'
</ins><span class="cx"> 
</span><del>-percentage points along x axis with percentage repeat : 100% repeat(100%)
-PASS window.getComputedStyle(document.body).getPropertyValue('-webkit-scroll-snap-points-x') is '100% repeat(100%)'
</del><ins>+invalid scroll padding: `potato`
+PASS window.getComputedStyle(document.body).getPropertyValue('scroll-padding') is '0px'
+PASS window.getComputedStyle(document.body).getPropertyValue('scroll-padding-top') is '0px'
+PASS window.getComputedStyle(document.body).getPropertyValue('scroll-padding-left') is '0px'
+PASS window.getComputedStyle(document.body).getPropertyValue('scroll-padding-right') is '0px'
+PASS window.getComputedStyle(document.body).getPropertyValue('scroll-padding-bottom') is '0px'
</ins><span class="cx"> 
</span><del>-pixel points along x axis with percentage repeat : 100px 50px repeat(25%)
-PASS window.getComputedStyle(document.body).getPropertyValue('-webkit-scroll-snap-points-x') is '100px 50px repeat(25%)'
</del><ins>+empty string: ``
+PASS window.getComputedStyle(document.body).getPropertyValue('scroll-padding') is '0px'
+PASS window.getComputedStyle(document.body).getPropertyValue('scroll-padding-top') is '0px'
+PASS window.getComputedStyle(document.body).getPropertyValue('scroll-padding-left') is '0px'
+PASS window.getComputedStyle(document.body).getPropertyValue('scroll-padding-right') is '0px'
+PASS window.getComputedStyle(document.body).getPropertyValue('scroll-padding-bottom') is '0px'
</ins><span class="cx"> 
</span><del>-percentage points along x axis with pixel repeat : 100% 50% repeat(40px)
-PASS window.getComputedStyle(document.body).getPropertyValue('-webkit-scroll-snap-points-x') is '100% 50% repeat(40px)'
</del><ins>+too many values: `1px 2px 3px 4px 5px`
+PASS window.getComputedStyle(document.body).getPropertyValue('scroll-padding') is '0px'
+PASS window.getComputedStyle(document.body).getPropertyValue('scroll-padding-top') is '0px'
+PASS window.getComputedStyle(document.body).getPropertyValue('scroll-padding-left') is '0px'
+PASS window.getComputedStyle(document.body).getPropertyValue('scroll-padding-right') is '0px'
+PASS window.getComputedStyle(document.body).getPropertyValue('scroll-padding-bottom') is '0px'
</ins><span class="cx"> 
</span><del>-pixel points along x axis with pixel repeat : 100px repeat(42px)
-PASS window.getComputedStyle(document.body).getPropertyValue('-webkit-scroll-snap-points-x') is '100px repeat(42px)'
</del><ins>+attempt to use auto: `auto auto`
+PASS window.getComputedStyle(document.body).getPropertyValue('scroll-padding') is '0px'
+PASS window.getComputedStyle(document.body).getPropertyValue('scroll-padding-top') is '0px'
+PASS window.getComputedStyle(document.body).getPropertyValue('scroll-padding-left') is '0px'
+PASS window.getComputedStyle(document.body).getPropertyValue('scroll-padding-right') is '0px'
+PASS window.getComputedStyle(document.body).getPropertyValue('scroll-padding-bottom') is '0px'
</ins><span class="cx"> 
</span><del>-inherited points along y axis : inherit
-PASS window.getComputedStyle(document.body).getPropertyValue('-webkit-scroll-snap-points-y') is 'none'
</del><ins>+single length: `10px`
+PASS window.getComputedStyle(document.body).getPropertyValue('scroll-padding') is '10px'
+PASS window.getComputedStyle(document.body).getPropertyValue('scroll-padding-top') is '10px'
+PASS window.getComputedStyle(document.body).getPropertyValue('scroll-padding-left') is '10px'
+PASS window.getComputedStyle(document.body).getPropertyValue('scroll-padding-right') is '10px'
+PASS window.getComputedStyle(document.body).getPropertyValue('scroll-padding-bottom') is '10px'
</ins><span class="cx"> 
</span><del>-initial points along y axis : initial
-PASS window.getComputedStyle(document.body).getPropertyValue('-webkit-scroll-snap-points-y') is 'none'
</del><ins>+two percentages: `10% 20%`
+PASS window.getComputedStyle(document.body).getPropertyValue('scroll-padding') is '10% 20%'
+PASS window.getComputedStyle(document.body).getPropertyValue('scroll-padding-top') is '10%'
+PASS window.getComputedStyle(document.body).getPropertyValue('scroll-padding-left') is '20%'
+PASS window.getComputedStyle(document.body).getPropertyValue('scroll-padding-right') is '20%'
+PASS window.getComputedStyle(document.body).getPropertyValue('scroll-padding-bottom') is '10%'
</ins><span class="cx"> 
</span><del>-element points along y axis : elements
-PASS window.getComputedStyle(document.body).getPropertyValue('-webkit-scroll-snap-points-y') is 'elements'
</del><ins>+three lengths: `1px 2px 3px`
+PASS window.getComputedStyle(document.body).getPropertyValue('scroll-padding') is '1px 2px 3px'
+PASS window.getComputedStyle(document.body).getPropertyValue('scroll-padding-top') is '1px'
+PASS window.getComputedStyle(document.body).getPropertyValue('scroll-padding-left') is '2px'
+PASS window.getComputedStyle(document.body).getPropertyValue('scroll-padding-right') is '2px'
+PASS window.getComputedStyle(document.body).getPropertyValue('scroll-padding-bottom') is '3px'
</ins><span class="cx"> 
</span><del>-percentage points along y axis : 100% 50%
-PASS window.getComputedStyle(document.body).getPropertyValue('-webkit-scroll-snap-points-y') is '100% 50%'
</del><ins>+four values: `50px 10% 20% 50px`
+PASS window.getComputedStyle(document.body).getPropertyValue('scroll-padding') is '50px 10% 20% 50px'
+PASS window.getComputedStyle(document.body).getPropertyValue('scroll-padding-top') is '50px'
+PASS window.getComputedStyle(document.body).getPropertyValue('scroll-padding-left') is '50px'
+PASS window.getComputedStyle(document.body).getPropertyValue('scroll-padding-right') is '10%'
+PASS window.getComputedStyle(document.body).getPropertyValue('scroll-padding-bottom') is '20%'
</ins><span class="cx"> 
</span><del>-pixel points along y axis : 100px 50px
-PASS window.getComputedStyle(document.body).getPropertyValue('-webkit-scroll-snap-points-y') is '100px 50px'
</del><ins>+calc expression: `calc(50px + 10%) 20px`
+PASS window.getComputedStyle(document.body).getPropertyValue('scroll-padding') is 'calc(50px + 10%) 20px'
+PASS window.getComputedStyle(document.body).getPropertyValue('scroll-padding-top') is 'calc(50px + 10%)'
+PASS window.getComputedStyle(document.body).getPropertyValue('scroll-padding-left') is '20px'
+PASS window.getComputedStyle(document.body).getPropertyValue('scroll-padding-right') is '20px'
+PASS window.getComputedStyle(document.body).getPropertyValue('scroll-padding-bottom') is 'calc(50px + 10%)'
</ins><span class="cx"> 
</span><del>-percentage points repeat along y axis : repeat(100%)
-PASS window.getComputedStyle(document.body).getPropertyValue('-webkit-scroll-snap-points-y') is 'repeat(100%)'
</del><ins>+various units: `1em 5mm 2in 4cm`
+PASS window.getComputedStyle(document.body).getPropertyValue('scroll-padding') is '16px 18.89763832092285px 192px 151.1811065673828px'
+PASS window.getComputedStyle(document.body).getPropertyValue('scroll-padding-top') is '16px'
+PASS window.getComputedStyle(document.body).getPropertyValue('scroll-padding-left') is '151.1811065673828px'
+PASS window.getComputedStyle(document.body).getPropertyValue('scroll-padding-right') is '18.89763832092285px'
+PASS window.getComputedStyle(document.body).getPropertyValue('scroll-padding-bottom') is '192px'
</ins><span class="cx"> 
</span><del>-pixel points repeat along y axis : repeat(25px)
-PASS window.getComputedStyle(document.body).getPropertyValue('-webkit-scroll-snap-points-y') is 'repeat(25px)'
</del><ins>+subpixel values: `10.4375px 6.5px`
+PASS window.getComputedStyle(document.body).getPropertyValue('scroll-padding') is '10.4375px 6.5px'
+PASS window.getComputedStyle(document.body).getPropertyValue('scroll-padding-top') is '10.4375px'
+PASS window.getComputedStyle(document.body).getPropertyValue('scroll-padding-left') is '6.5px'
+PASS window.getComputedStyle(document.body).getPropertyValue('scroll-padding-right') is '6.5px'
+PASS window.getComputedStyle(document.body).getPropertyValue('scroll-padding-bottom') is '10.4375px'
</ins><span class="cx"> 
</span><del>-percentage points along y axis with percentage repeat : 100% repeat(100%)
-PASS window.getComputedStyle(document.body).getPropertyValue('-webkit-scroll-snap-points-y') is '100% repeat(100%)'
</del><ins>+invalid scroll padding: `potato`
+PASS window.getComputedStyle(document.body).getPropertyValue('scroll-snap-margin') is '0px'
+PASS window.getComputedStyle(document.body).getPropertyValue('scroll-snap-margin-top') is '0px'
+PASS window.getComputedStyle(document.body).getPropertyValue('scroll-snap-margin-left') is '0px'
+PASS window.getComputedStyle(document.body).getPropertyValue('scroll-snap-margin-right') is '0px'
+PASS window.getComputedStyle(document.body).getPropertyValue('scroll-snap-margin-bottom') is '0px'
</ins><span class="cx"> 
</span><del>-pixel points along y axis with percentage repeat : 100px 50px repeat(25%)
-PASS window.getComputedStyle(document.body).getPropertyValue('-webkit-scroll-snap-points-y') is '100px 50px repeat(25%)'
</del><ins>+empty string: ``
+PASS window.getComputedStyle(document.body).getPropertyValue('scroll-snap-margin') is '0px'
+PASS window.getComputedStyle(document.body).getPropertyValue('scroll-snap-margin-top') is '0px'
+PASS window.getComputedStyle(document.body).getPropertyValue('scroll-snap-margin-left') is '0px'
+PASS window.getComputedStyle(document.body).getPropertyValue('scroll-snap-margin-right') is '0px'
+PASS window.getComputedStyle(document.body).getPropertyValue('scroll-snap-margin-bottom') is '0px'
</ins><span class="cx"> 
</span><del>-percentage points along y axis with pixel repeat : 100% 50% repeat(40px)
-PASS window.getComputedStyle(document.body).getPropertyValue('-webkit-scroll-snap-points-y') is '100% 50% repeat(40px)'
</del><ins>+too many values: `1px 2px 3px 4px 5px`
+PASS window.getComputedStyle(document.body).getPropertyValue('scroll-snap-margin') is '0px'
+PASS window.getComputedStyle(document.body).getPropertyValue('scroll-snap-margin-top') is '0px'
+PASS window.getComputedStyle(document.body).getPropertyValue('scroll-snap-margin-left') is '0px'
+PASS window.getComputedStyle(document.body).getPropertyValue('scroll-snap-margin-right') is '0px'
+PASS window.getComputedStyle(document.body).getPropertyValue('scroll-snap-margin-bottom') is '0px'
</ins><span class="cx"> 
</span><del>-pixel points along y axis with pixel repeat : 100px repeat(42px)
-PASS window.getComputedStyle(document.body).getPropertyValue('-webkit-scroll-snap-points-y') is '100px repeat(42px)'
</del><ins>+attempt to use auto: `auto auto`
+PASS window.getComputedStyle(document.body).getPropertyValue('scroll-snap-margin') is '0px'
+PASS window.getComputedStyle(document.body).getPropertyValue('scroll-snap-margin-top') is '0px'
+PASS window.getComputedStyle(document.body).getPropertyValue('scroll-snap-margin-left') is '0px'
+PASS window.getComputedStyle(document.body).getPropertyValue('scroll-snap-margin-right') is '0px'
+PASS window.getComputedStyle(document.body).getPropertyValue('scroll-snap-margin-bottom') is '0px'
</ins><span class="cx"> 
</span><del>-inherited destination : inherit
-PASS window.getComputedStyle(document.body).getPropertyValue('-webkit-scroll-snap-destination') is '0px 0px'
</del><ins>+attempt to use percentage: `25% 25%`
+PASS window.getComputedStyle(document.body).getPropertyValue('scroll-snap-margin') is '0px'
+PASS window.getComputedStyle(document.body).getPropertyValue('scroll-snap-margin-top') is '0px'
+PASS window.getComputedStyle(document.body).getPropertyValue('scroll-snap-margin-left') is '0px'
+PASS window.getComputedStyle(document.body).getPropertyValue('scroll-snap-margin-right') is '0px'
+PASS window.getComputedStyle(document.body).getPropertyValue('scroll-snap-margin-bottom') is '0px'
</ins><span class="cx"> 
</span><del>-initial destination : initial
-PASS window.getComputedStyle(document.body).getPropertyValue('-webkit-scroll-snap-destination') is '0px 0px'
</del><ins>+attempt to use calc: `calc(25% + 10px)`
+PASS window.getComputedStyle(document.body).getPropertyValue('scroll-snap-margin') is '0px'
+PASS window.getComputedStyle(document.body).getPropertyValue('scroll-snap-margin-top') is '0px'
+PASS window.getComputedStyle(document.body).getPropertyValue('scroll-snap-margin-left') is '0px'
+PASS window.getComputedStyle(document.body).getPropertyValue('scroll-snap-margin-right') is '0px'
+PASS window.getComputedStyle(document.body).getPropertyValue('scroll-snap-margin-bottom') is '0px'
</ins><span class="cx"> 
</span><del>-pixel/pixel destination : 10px 50px
-PASS window.getComputedStyle(document.body).getPropertyValue('-webkit-scroll-snap-destination') is '10px 50px'
</del><ins>+single length: `10px`
+PASS window.getComputedStyle(document.body).getPropertyValue('scroll-snap-margin') is '10px'
+PASS window.getComputedStyle(document.body).getPropertyValue('scroll-snap-margin-top') is '10px'
+PASS window.getComputedStyle(document.body).getPropertyValue('scroll-snap-margin-left') is '10px'
+PASS window.getComputedStyle(document.body).getPropertyValue('scroll-snap-margin-right') is '10px'
+PASS window.getComputedStyle(document.body).getPropertyValue('scroll-snap-margin-bottom') is '10px'
</ins><span class="cx"> 
</span><del>-pixel/percentage destination : 20px 40%
-PASS window.getComputedStyle(document.body).getPropertyValue('-webkit-scroll-snap-destination') is '20px 40%'
</del><ins>+two lengths: `10px 20px`
+PASS window.getComputedStyle(document.body).getPropertyValue('scroll-snap-margin') is '10px 20px'
+PASS window.getComputedStyle(document.body).getPropertyValue('scroll-snap-margin-top') is '10px'
+PASS window.getComputedStyle(document.body).getPropertyValue('scroll-snap-margin-left') is '20px'
+PASS window.getComputedStyle(document.body).getPropertyValue('scroll-snap-margin-right') is '20px'
+PASS window.getComputedStyle(document.body).getPropertyValue('scroll-snap-margin-bottom') is '10px'
</ins><span class="cx"> 
</span><del>-percentage/pixel destination : 0% 0px
-PASS window.getComputedStyle(document.body).getPropertyValue('-webkit-scroll-snap-destination') is '0% 0px'
</del><ins>+three lengths: `1px 2px 3px`
+PASS window.getComputedStyle(document.body).getPropertyValue('scroll-snap-margin') is '1px 2px 3px'
+PASS window.getComputedStyle(document.body).getPropertyValue('scroll-snap-margin-top') is '1px'
+PASS window.getComputedStyle(document.body).getPropertyValue('scroll-snap-margin-left') is '2px'
+PASS window.getComputedStyle(document.body).getPropertyValue('scroll-snap-margin-right') is '2px'
+PASS window.getComputedStyle(document.body).getPropertyValue('scroll-snap-margin-bottom') is '3px'
</ins><span class="cx"> 
</span><del>-percentage/percentage destination : 5% 100%
-PASS window.getComputedStyle(document.body).getPropertyValue('-webkit-scroll-snap-destination') is '5% 100%'
</del><ins>+four lengths: `50px 10px 20px 50px`
+PASS window.getComputedStyle(document.body).getPropertyValue('scroll-snap-margin') is '50px 10px 20px 50px'
+PASS window.getComputedStyle(document.body).getPropertyValue('scroll-snap-margin-top') is '50px'
+PASS window.getComputedStyle(document.body).getPropertyValue('scroll-snap-margin-left') is '50px'
+PASS window.getComputedStyle(document.body).getPropertyValue('scroll-snap-margin-right') is '10px'
+PASS window.getComputedStyle(document.body).getPropertyValue('scroll-snap-margin-bottom') is '20px'
</ins><span class="cx"> 
</span><del>-inherited coordinate : inherit
-PASS window.getComputedStyle(document.body).getPropertyValue('-webkit-scroll-snap-coordinate') is 'none'
</del><ins>+various units: `1em 5mm 2in 4cm`
+PASS window.getComputedStyle(document.body).getPropertyValue('scroll-snap-margin') is '16px 18.89763832092285px 192px 151.1811065673828px'
+PASS window.getComputedStyle(document.body).getPropertyValue('scroll-snap-margin-top') is '16px'
+PASS window.getComputedStyle(document.body).getPropertyValue('scroll-snap-margin-left') is '151.1811065673828px'
+PASS window.getComputedStyle(document.body).getPropertyValue('scroll-snap-margin-right') is '18.89763832092285px'
+PASS window.getComputedStyle(document.body).getPropertyValue('scroll-snap-margin-bottom') is '192px'
</ins><span class="cx"> 
</span><del>-initial coordinate : initial
-PASS window.getComputedStyle(document.body).getPropertyValue('-webkit-scroll-snap-coordinate') is 'none'
-
-no coordinate : none
-PASS window.getComputedStyle(document.body).getPropertyValue('-webkit-scroll-snap-coordinate') is 'none'
-
-single pixel coordinate : 50px 100px
-PASS window.getComputedStyle(document.body).getPropertyValue('-webkit-scroll-snap-coordinate') is '50px 100px'
-
-single percentage coordinate : 50% 100%
-PASS window.getComputedStyle(document.body).getPropertyValue('-webkit-scroll-snap-coordinate') is '50% 100%'
-
-multiple pixel coordinates : 50px 100px 150px 100px 200px 100px
-PASS window.getComputedStyle(document.body).getPropertyValue('-webkit-scroll-snap-coordinate') is '50px 100px, 150px 100px, 200px 100px'
-
-multiple percentage coordinates : 50% 100% 150% 100% 200% 100%
-PASS window.getComputedStyle(document.body).getPropertyValue('-webkit-scroll-snap-coordinate') is '50% 100%, 150% 100%, 200% 100%'
-
-mm along x axis with pixel repeat : 10mm repeat(42mm)
-PASS window.getComputedStyle(document.body).getPropertyValue('-webkit-scroll-snap-points-x') is '37.7952766418457px repeat(158.7401580810547px)'
-
-in along x axis with pixel repeat : 10in repeat(4in)
-PASS window.getComputedStyle(document.body).getPropertyValue('-webkit-scroll-snap-points-x') is '960px repeat(384px)'
-
-pt along x axis with pixel repeat : 10pt repeat(42pt)
-PASS window.getComputedStyle(document.body).getPropertyValue('-webkit-scroll-snap-points-x') is '13.333333015441895px repeat(56px)'
-
-in/cm destination : 2in 5cm
-PASS window.getComputedStyle(document.body).getPropertyValue('-webkit-scroll-snap-destination') is '192px 188.97637939453125px'
-
-in/cm coordinate : 2in 5cm 5in 2cm
-PASS window.getComputedStyle(document.body).getPropertyValue('-webkit-scroll-snap-coordinate') is '192px 188.97637939453125px, 480px 75.5905532836914px'
-
-subpixel along x axis with pixel repeat : 100.5px repeat(50.25px)
-PASS window.getComputedStyle(document.body).getPropertyValue('-webkit-scroll-snap-points-x') is '100.5px repeat(50.25px)'
-
-subpixel destination : 0.125px 2.4375px
-PASS window.getComputedStyle(document.body).getPropertyValue('-webkit-scroll-snap-destination') is '0.125px 2.4375px'
-
-subpixel coordinate : 110.125px 25.4375px
-PASS window.getComputedStyle(document.body).getPropertyValue('-webkit-scroll-snap-coordinate') is '110.125px 25.4375px'
</del><ins>+subpixel values: `10.4375px 6.5px`
+PASS window.getComputedStyle(document.body).getPropertyValue('scroll-snap-margin') is '10.4375px 6.5px'
+PASS window.getComputedStyle(document.body).getPropertyValue('scroll-snap-margin-top') is '10.4375px'
+PASS window.getComputedStyle(document.body).getPropertyValue('scroll-snap-margin-left') is '6.5px'
+PASS window.getComputedStyle(document.body).getPropertyValue('scroll-snap-margin-right') is '6.5px'
+PASS window.getComputedStyle(document.body).getPropertyValue('scroll-snap-margin-bottom') is '10.4375px'
</ins><span class="cx"> PASS successfullyParsed is true
</span><span class="cx"> 
</span><span class="cx"> TEST COMPLETE
</span></span></pre></div>
<a id="trunkLayoutTestscss3scrollsnapscrollsnappropertycomputedstylejs"></a>
<div class="modfile"><h4>Modified: trunk/LayoutTests/css3/scroll-snap/scroll-snap-property-computed-style.js (210023 => 210024)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/css3/scroll-snap/scroll-snap-property-computed-style.js        2016-12-20 18:26:10 UTC (rev 210023)
+++ trunk/LayoutTests/css3/scroll-snap/scroll-snap-property-computed-style.js        2016-12-20 18:44:38 UTC (rev 210024)
</span><span class="lines">@@ -1,4 +1,4 @@
</span><del>-description(&quot;Test the computed style of the -webkit-scroll-snap-* properties.&quot;);
</del><ins>+description(&quot;Test the computed style of the scroll-snap-* properties.&quot;);
</ins><span class="cx"> 
</span><span class="cx"> var stylesheet;
</span><span class="cx"> var styleElement = document.createElement(&quot;style&quot;);
</span><span class="lines">@@ -5,81 +5,78 @@
</span><span class="cx"> document.head.appendChild(styleElement);
</span><span class="cx"> stylesheet = styleElement.sheet;
</span><span class="cx"> 
</span><del>-function testComputedScrollSnapRule(description, snapProperty, rule, expected)
</del><ins>+function testComputedScrollSnapRule(description, snapProperty, rule, expected, expectedShorthands = {})
</ins><span class="cx"> {
</span><span class="cx">     debug(&quot;&quot;);
</span><del>-    debug(description + &quot; : &quot; + rule);
</del><ins>+    debug(`${description}: \`${rule}\``);
</ins><span class="cx"> 
</span><del>-    stylesheet.insertRule(&quot;body { -webkit-scroll-snap-&quot; + snapProperty + &quot;: &quot; + rule + &quot;; }&quot;, 0);
</del><ins>+    stylesheet.insertRule(`body { ${snapProperty} : ${rule}; }`, 0);
</ins><span class="cx"> 
</span><del>-    shouldBe(&quot;window.getComputedStyle(document.body).getPropertyValue('-webkit-scroll-snap-&quot; + snapProperty + &quot;')&quot;, &quot;'&quot; + expected + &quot;'&quot;);
</del><ins>+    shouldBe(`window.getComputedStyle(document.body).getPropertyValue('${snapProperty}')`, `'${expected}'`);
+    for (let shorthand in expectedShorthands)
+        shouldBe(`window.getComputedStyle(document.body).getPropertyValue('${snapProperty}-${shorthand}')`, `'${expectedShorthands[shorthand]}'`);
</ins><span class="cx">     stylesheet.deleteRule(0);
</span><span class="cx"> }
</span><span class="cx"> 
</span><del>-testComputedScrollSnapRule(&quot;invalid snapping type&quot;, &quot;type&quot;, &quot;potato&quot;, &quot;none&quot;);
-testComputedScrollSnapRule(&quot;invalid points along x axis&quot;, &quot;points-x&quot;, &quot;hello world&quot;, &quot;none&quot;);
-testComputedScrollSnapRule(&quot;invalid points along y axis&quot;, &quot;points-y&quot;, &quot;hello world&quot;, &quot;none&quot;);
-testComputedScrollSnapRule(&quot;typo in point definition&quot;, &quot;points-x&quot;, &quot;repaet(50px)&quot;, &quot;none&quot;);
-testComputedScrollSnapRule(&quot;another invalid point definition&quot;, &quot;points-x&quot;, &quot;??px repeat(50px)&quot;, &quot;none&quot;);
-testComputedScrollSnapRule(&quot;invalid destination&quot;, &quot;destination&quot;, &quot;foo bar&quot;, &quot;0px 0px&quot;);
-testComputedScrollSnapRule(&quot;short one destination value&quot;, &quot;destination&quot;, &quot;50%&quot;, &quot;0px 0px&quot;);
-testComputedScrollSnapRule(&quot;extra destination value&quot;, &quot;destination&quot;, &quot;50px 100% 75px&quot;, &quot;0px 0px&quot;);
-testComputedScrollSnapRule(&quot;invalid coordinates&quot;, &quot;coordinate&quot;, &quot;ben bitdiddle&quot;, &quot;none&quot;)
-testComputedScrollSnapRule(&quot;mismatched x coordinate&quot;, &quot;coordinate&quot;, &quot;50% 100px 75%&quot;, &quot;none&quot;);
</del><ins>+// Test the scroll-snap-type property
+// Invalid declarations
+testComputedScrollSnapRule(&quot;invalid snap type&quot;, &quot;scroll-snap-type&quot;, &quot;potato&quot;, &quot;none&quot;);
+testComputedScrollSnapRule(&quot;empty string for snap type&quot;, &quot;scroll-snap-type&quot;, &quot;&quot;, &quot;none&quot;);
+testComputedScrollSnapRule(&quot;too many values&quot;, &quot;scroll-snap-type&quot;, &quot;block mandatory proximity&quot;, &quot;none&quot;);
+testComputedScrollSnapRule(&quot;none following axis&quot;, &quot;scroll-snap-type&quot;, &quot;both none&quot;, &quot;none&quot;);
+testComputedScrollSnapRule(&quot;two axis values&quot;, &quot;scroll-snap-type&quot;, &quot;block inline&quot;, &quot;none&quot;);
+testComputedScrollSnapRule(&quot;two strictness values&quot;, &quot;scroll-snap-type&quot;, &quot;proximity mandatory&quot;, &quot;none&quot;);
+testComputedScrollSnapRule(&quot;axis following strictness&quot;, &quot;scroll-snap-type&quot;, &quot;mandatory inline&quot;, &quot;none&quot;);
+// Valid declarations
+testComputedScrollSnapRule(&quot;initial value&quot;, &quot;scroll-snap-type&quot;, &quot;initial&quot;, &quot;none&quot;);
+testComputedScrollSnapRule(&quot;only strictness&quot;, &quot;scroll-snap-type&quot;, &quot;mandatory&quot;, &quot;both mandatory&quot;);
+testComputedScrollSnapRule(&quot;only axis&quot;, &quot;scroll-snap-type&quot;, &quot;both&quot;, &quot;both proximity&quot;);
+testComputedScrollSnapRule(&quot;none&quot;, &quot;scroll-snap-type&quot;, &quot;none&quot;, &quot;none&quot;);
+testComputedScrollSnapRule(&quot;strictness following axis&quot;, &quot;scroll-snap-type&quot;, &quot;inline mandatory&quot;, &quot;inline mandatory&quot;);
</ins><span class="cx"> 
</span><del>-testComputedScrollSnapRule(&quot;inherited type&quot;, &quot;type&quot;, &quot;inherit&quot;, &quot;none&quot;);
-testComputedScrollSnapRule(&quot;initial type&quot;, &quot;type&quot;, &quot;initial&quot;, &quot;none&quot;);
-testComputedScrollSnapRule(&quot;none type&quot;, &quot;type&quot;, &quot;none&quot;, &quot;none&quot;);
-testComputedScrollSnapRule(&quot;mandatory type&quot;, &quot;type&quot;, &quot;mandatory&quot;, &quot;mandatory&quot;);
-testComputedScrollSnapRule(&quot;proximity type&quot;, &quot;type&quot;, &quot;proximity&quot;, &quot;proximity&quot;);
</del><ins>+// Test the scroll-snap-align property
+// Invalid declarations
+testComputedScrollSnapRule(&quot;invalid snap align&quot;, &quot;scroll-snap-align&quot;, &quot;potato&quot;, &quot;none none&quot;);
+testComputedScrollSnapRule(&quot;empty string&quot;, &quot;scroll-snap-align&quot;, &quot;&quot;, &quot;none none&quot;);
+testComputedScrollSnapRule(&quot;too many values&quot;, &quot;scroll-snap-align&quot;, &quot;start center end&quot;, &quot;none none&quot;);
+testComputedScrollSnapRule(&quot;invalid second value&quot;, &quot;scroll-snap-align&quot;, &quot;start wut&quot;, &quot;none none&quot;);
+testComputedScrollSnapRule(&quot;invalid first value&quot;, &quot;scroll-snap-align&quot;, &quot;wat center&quot;, &quot;none none&quot;);
+testComputedScrollSnapRule(&quot;one length&quot;, &quot;scroll-snap-align&quot;, &quot;10px&quot;, &quot;none none&quot;);
+testComputedScrollSnapRule(&quot;two lengths&quot;, &quot;scroll-snap-align&quot;, &quot;10px 50px&quot;, &quot;none none&quot;);
+// Valid declarations
+testComputedScrollSnapRule(&quot;initial value&quot;, &quot;scroll-snap-align&quot;, &quot;initial&quot;, &quot;none none&quot;);
+testComputedScrollSnapRule(&quot;single value&quot;, &quot;scroll-snap-align&quot;, &quot;start&quot;, &quot;start start&quot;);
+testComputedScrollSnapRule(&quot;two values&quot;, &quot;scroll-snap-align&quot;, &quot;start end&quot;, &quot;start end&quot;);
</ins><span class="cx"> 
</span><del>-testComputedScrollSnapRule(&quot;inherited points along x axis&quot;, &quot;points-x&quot;, &quot;inherit&quot;, &quot;none&quot;);
-testComputedScrollSnapRule(&quot;initial points along x axis&quot;, &quot;points-x&quot;, &quot;initial&quot;, &quot;none&quot;);
-testComputedScrollSnapRule(&quot;element points along x axis&quot;, &quot;points-x&quot;, &quot;elements&quot;, &quot;elements&quot;);
-testComputedScrollSnapRule(&quot;percentage points along x axis&quot;, &quot;points-x&quot;, &quot;100% 50%&quot;, &quot;100% 50%&quot;);
-testComputedScrollSnapRule(&quot;pixel points along x axis&quot;, &quot;points-x&quot;, &quot;100px 50px&quot;, &quot;100px 50px&quot;);
-testComputedScrollSnapRule(&quot;percentage points repeat along x axis&quot;, &quot;points-x&quot;, &quot;repeat(100%)&quot;, &quot;repeat(100%)&quot;);
-testComputedScrollSnapRule(&quot;pixel points repeat along x axis&quot;, &quot;points-x&quot;, &quot;repeat(25px)&quot;, &quot;repeat(25px)&quot;);
-testComputedScrollSnapRule(&quot;percentage points along x axis with percentage repeat&quot;, &quot;points-x&quot;, &quot;100% repeat(100%)&quot;, &quot;100% repeat(100%)&quot;);
-testComputedScrollSnapRule(&quot;pixel points along x axis with percentage repeat&quot;, &quot;points-x&quot;, &quot;100px 50px repeat(25%)&quot;, &quot;100px 50px repeat(25%)&quot;);
-testComputedScrollSnapRule(&quot;percentage points along x axis with pixel repeat&quot;, &quot;points-x&quot;, &quot;100% 50% repeat(40px)&quot;, &quot;100% 50% repeat(40px)&quot;);
-testComputedScrollSnapRule(&quot;pixel points along x axis with pixel repeat&quot;, &quot;points-x&quot;, &quot;100px repeat(42px)&quot;, &quot;100px repeat(42px)&quot;);
</del><ins>+// Test the scroll-padding property
+// Invalid declarations
+testComputedScrollSnapRule(&quot;invalid scroll padding&quot;, &quot;scroll-padding&quot;, &quot;potato&quot;, &quot;0px&quot;, { top: &quot;0px&quot;, left: &quot;0px&quot;, right: &quot;0px&quot;, bottom: &quot;0px&quot; });
+testComputedScrollSnapRule(&quot;empty string&quot;, &quot;scroll-padding&quot;, &quot;&quot;, &quot;0px&quot;, { top: &quot;0px&quot;, left: &quot;0px&quot;, right: &quot;0px&quot;, bottom: &quot;0px&quot; });
+testComputedScrollSnapRule(&quot;too many values&quot;, &quot;scroll-padding&quot;, &quot;1px 2px 3px 4px 5px&quot;, &quot;0px&quot;, { top: &quot;0px&quot;, left: &quot;0px&quot;, right: &quot;0px&quot;, bottom: &quot;0px&quot; });
+testComputedScrollSnapRule(&quot;attempt to use auto&quot;, &quot;scroll-padding&quot;, &quot;auto auto&quot;, &quot;0px&quot;, { top: &quot;0px&quot;, left: &quot;0px&quot;, right: &quot;0px&quot;, bottom: &quot;0px&quot; });
+// Valid declarations
+testComputedScrollSnapRule(&quot;single length&quot;, &quot;scroll-padding&quot;, &quot;10px&quot;, &quot;10px&quot;, { top: &quot;10px&quot;, left: &quot;10px&quot;, right: &quot;10px&quot;, bottom: &quot;10px&quot; });
+testComputedScrollSnapRule(&quot;two percentages&quot;, &quot;scroll-padding&quot;, &quot;10% 20%&quot;, &quot;10% 20%&quot;, { top: &quot;10%&quot;, left: &quot;20%&quot;, right: &quot;20%&quot;, bottom: &quot;10%&quot; });
+testComputedScrollSnapRule(&quot;three lengths&quot;, &quot;scroll-padding&quot;, &quot;1px 2px 3px&quot;, &quot;1px 2px 3px&quot;, { top: &quot;1px&quot;, left: &quot;2px&quot;, right: &quot;2px&quot;, bottom: &quot;3px&quot; });
+testComputedScrollSnapRule(&quot;four values&quot;, &quot;scroll-padding&quot;, &quot;50px 10% 20% 50px&quot;, &quot;50px 10% 20% 50px&quot;, { top: &quot;50px&quot;, left: &quot;50px&quot;, right: &quot;10%&quot;, bottom: &quot;20%&quot; });
+testComputedScrollSnapRule(&quot;calc expression&quot;, &quot;scroll-padding&quot;, &quot;calc(50px + 10%) 20px&quot;, &quot;calc(50px + 10%) 20px&quot;, { top: &quot;calc(50px + 10%)&quot;, left: &quot;20px&quot;, right: &quot;20px&quot;, bottom: &quot;calc(50px + 10%)&quot; });
+testComputedScrollSnapRule(&quot;various units&quot;, &quot;scroll-padding&quot;, &quot;1em 5mm 2in 4cm&quot;, &quot;16px 18.89763832092285px 192px 151.1811065673828px&quot;, { top: &quot;16px&quot;, left: &quot;151.1811065673828px&quot;, right: &quot;18.89763832092285px&quot;, bottom: &quot;192px&quot; });
+testComputedScrollSnapRule(&quot;subpixel values&quot;, &quot;scroll-padding&quot;, &quot;10.4375px 6.5px&quot;, &quot;10.4375px 6.5px&quot;, { top: &quot;10.4375px&quot;, left: &quot;6.5px&quot;, right: &quot;6.5px&quot;, bottom: &quot;10.4375px&quot; });
</ins><span class="cx"> 
</span><del>-testComputedScrollSnapRule(&quot;inherited points along y axis&quot;, &quot;points-y&quot;, &quot;inherit&quot;, &quot;none&quot;);
-testComputedScrollSnapRule(&quot;initial points along y axis&quot;, &quot;points-y&quot;, &quot;initial&quot;, &quot;none&quot;);
-testComputedScrollSnapRule(&quot;element points along y axis&quot;, &quot;points-y&quot;, &quot;elements&quot;, &quot;elements&quot;);
-testComputedScrollSnapRule(&quot;percentage points along y axis&quot;, &quot;points-y&quot;, &quot;100% 50%&quot;, &quot;100% 50%&quot;);
-testComputedScrollSnapRule(&quot;pixel points along y axis&quot;, &quot;points-y&quot;, &quot;100px 50px&quot;, &quot;100px 50px&quot;);
-testComputedScrollSnapRule(&quot;percentage points repeat along y axis&quot;, &quot;points-y&quot;, &quot;repeat(100%)&quot;, &quot;repeat(100%)&quot;);
-testComputedScrollSnapRule(&quot;pixel points repeat along y axis&quot;, &quot;points-y&quot;, &quot;repeat(25px)&quot;, &quot;repeat(25px)&quot;);
-testComputedScrollSnapRule(&quot;percentage points along y axis with percentage repeat&quot;, &quot;points-y&quot;, &quot;100% repeat(100%)&quot;, &quot;100% repeat(100%)&quot;);
-testComputedScrollSnapRule(&quot;pixel points along y axis with percentage repeat&quot;, &quot;points-y&quot;, &quot;100px 50px repeat(25%)&quot;, &quot;100px 50px repeat(25%)&quot;);
-testComputedScrollSnapRule(&quot;percentage points along y axis with pixel repeat&quot;, &quot;points-y&quot;, &quot;100% 50% repeat(40px)&quot;, &quot;100% 50% repeat(40px)&quot;);
-testComputedScrollSnapRule(&quot;pixel points along y axis with pixel repeat&quot;, &quot;points-y&quot;, &quot;100px repeat(42px)&quot;, &quot;100px repeat(42px)&quot;);
</del><ins>+// Test the scroll-snap-margin property
+// Invalid declarations
+testComputedScrollSnapRule(&quot;invalid scroll padding&quot;, &quot;scroll-snap-margin&quot;, &quot;potato&quot;, &quot;0px&quot;, { top: &quot;0px&quot;, left: &quot;0px&quot;, right: &quot;0px&quot;, bottom: &quot;0px&quot; });
+testComputedScrollSnapRule(&quot;empty string&quot;, &quot;scroll-snap-margin&quot;, &quot;&quot;, &quot;0px&quot;, { top: &quot;0px&quot;, left: &quot;0px&quot;, right: &quot;0px&quot;, bottom: &quot;0px&quot; });
+testComputedScrollSnapRule(&quot;too many values&quot;, &quot;scroll-snap-margin&quot;, &quot;1px 2px 3px 4px 5px&quot;, &quot;0px&quot;, { top: &quot;0px&quot;, left: &quot;0px&quot;, right: &quot;0px&quot;, bottom: &quot;0px&quot; });
+testComputedScrollSnapRule(&quot;attempt to use auto&quot;, &quot;scroll-snap-margin&quot;, &quot;auto auto&quot;, &quot;0px&quot;, { top: &quot;0px&quot;, left: &quot;0px&quot;, right: &quot;0px&quot;, bottom: &quot;0px&quot; });
+testComputedScrollSnapRule(&quot;attempt to use percentage&quot;, &quot;scroll-snap-margin&quot;, &quot;25% 25%&quot;, &quot;0px&quot;, { top: &quot;0px&quot;, left: &quot;0px&quot;, right: &quot;0px&quot;, bottom: &quot;0px&quot; });
+testComputedScrollSnapRule(&quot;attempt to use calc&quot;, &quot;scroll-snap-margin&quot;, &quot;calc(25% + 10px)&quot;, &quot;0px&quot;, { top: &quot;0px&quot;, left: &quot;0px&quot;, right: &quot;0px&quot;, bottom: &quot;0px&quot; });
+// Valid declarations
+testComputedScrollSnapRule(&quot;single length&quot;, &quot;scroll-snap-margin&quot;, &quot;10px&quot;, &quot;10px&quot;, { top: &quot;10px&quot;, left: &quot;10px&quot;, right: &quot;10px&quot;, bottom: &quot;10px&quot; });
+testComputedScrollSnapRule(&quot;two lengths&quot;, &quot;scroll-snap-margin&quot;, &quot;10px 20px&quot;, &quot;10px 20px&quot;, { top: &quot;10px&quot;, left: &quot;20px&quot;, right: &quot;20px&quot;, bottom: &quot;10px&quot; });
+testComputedScrollSnapRule(&quot;three lengths&quot;, &quot;scroll-snap-margin&quot;, &quot;1px 2px 3px&quot;, &quot;1px 2px 3px&quot;, { top: &quot;1px&quot;, left: &quot;2px&quot;, right: &quot;2px&quot;, bottom: &quot;3px&quot; });
+testComputedScrollSnapRule(&quot;four lengths&quot;, &quot;scroll-snap-margin&quot;, &quot;50px 10px 20px 50px&quot;, &quot;50px 10px 20px 50px&quot;, { top: &quot;50px&quot;, left: &quot;50px&quot;, right: &quot;10px&quot;, bottom: &quot;20px&quot; });
+testComputedScrollSnapRule(&quot;various units&quot;, &quot;scroll-snap-margin&quot;, &quot;1em 5mm 2in 4cm&quot;, &quot;16px 18.89763832092285px 192px 151.1811065673828px&quot;, { top: &quot;16px&quot;, left: &quot;151.1811065673828px&quot;, right: &quot;18.89763832092285px&quot;, bottom: &quot;192px&quot; });
+testComputedScrollSnapRule(&quot;subpixel values&quot;, &quot;scroll-snap-margin&quot;, &quot;10.4375px 6.5px&quot;, &quot;10.4375px 6.5px&quot;, { top: &quot;10.4375px&quot;, left: &quot;6.5px&quot;, right: &quot;6.5px&quot;, bottom: &quot;10.4375px&quot; });
</ins><span class="cx"> 
</span><del>-testComputedScrollSnapRule(&quot;inherited destination&quot;, &quot;destination&quot;, &quot;inherit&quot;, &quot;0px 0px&quot;);
-testComputedScrollSnapRule(&quot;initial destination&quot;, &quot;destination&quot;, &quot;initial&quot;, &quot;0px 0px&quot;);
-testComputedScrollSnapRule(&quot;pixel/pixel destination&quot;, &quot;destination&quot;, &quot;10px 50px&quot;, &quot;10px 50px&quot;);
-testComputedScrollSnapRule(&quot;pixel/percentage destination&quot;, &quot;destination&quot;, &quot;20px 40%&quot;, &quot;20px 40%&quot;);
-testComputedScrollSnapRule(&quot;percentage/pixel destination&quot;, &quot;destination&quot;, &quot;0% 0px&quot;, &quot;0% 0px&quot;);
-testComputedScrollSnapRule(&quot;percentage/percentage destination&quot;, &quot;destination&quot;, &quot;5% 100%&quot;, &quot;5% 100%&quot;);
-
-testComputedScrollSnapRule(&quot;inherited coordinate&quot;, &quot;coordinate&quot;, &quot;inherit&quot;, &quot;none&quot;);
-testComputedScrollSnapRule(&quot;initial coordinate&quot;, &quot;coordinate&quot;, &quot;initial&quot;, &quot;none&quot;);
-testComputedScrollSnapRule(&quot;no coordinate&quot;, &quot;coordinate&quot;, &quot;none&quot;, &quot;none&quot;);
-testComputedScrollSnapRule(&quot;single pixel coordinate&quot;, &quot;coordinate&quot;, &quot;50px 100px&quot;, &quot;50px 100px&quot;);
-testComputedScrollSnapRule(&quot;single percentage coordinate&quot;, &quot;coordinate&quot;, &quot;50% 100%&quot;, &quot;50% 100%&quot;);
-testComputedScrollSnapRule(&quot;multiple pixel coordinates&quot;, &quot;coordinate&quot;, &quot;50px 100px 150px 100px 200px 100px&quot;, &quot;50px 100px, 150px 100px, 200px 100px&quot;);
-testComputedScrollSnapRule(&quot;multiple percentage coordinates&quot;, &quot;coordinate&quot;, &quot;50% 100% 150% 100% 200% 100%&quot;, &quot;50% 100%, 150% 100%, 200% 100%&quot;);
-
-testComputedScrollSnapRule(&quot;mm along x axis with pixel repeat&quot;, &quot;points-x&quot;, &quot;10mm repeat(42mm)&quot;, &quot;37.7952766418457px repeat(158.7401580810547px)&quot;);
-testComputedScrollSnapRule(&quot;in along x axis with pixel repeat&quot;, &quot;points-x&quot;, &quot;10in repeat(4in)&quot;, &quot;960px repeat(384px)&quot;);
-testComputedScrollSnapRule(&quot;pt along x axis with pixel repeat&quot;, &quot;points-x&quot;, &quot;10pt repeat(42pt)&quot;, &quot;13.333333015441895px repeat(56px)&quot;);
-testComputedScrollSnapRule(&quot;in/cm destination&quot;, &quot;destination&quot;, &quot;2in 5cm&quot;, &quot;192px 188.97637939453125px&quot;);
-testComputedScrollSnapRule(&quot;in/cm coordinate&quot;, &quot;coordinate&quot;, &quot;2in 5cm 5in 2cm&quot;, &quot;192px 188.97637939453125px, 480px 75.5905532836914px&quot;);
-
-testComputedScrollSnapRule(&quot;subpixel along x axis with pixel repeat&quot;, &quot;points-x&quot;, &quot;100.5px repeat(50.25px)&quot;, &quot;100.5px repeat(50.25px)&quot;);
-testComputedScrollSnapRule(&quot;subpixel destination&quot;, &quot;destination&quot;, &quot;0.125px 2.4375px&quot;, &quot;0.125px 2.4375px&quot;);
-testComputedScrollSnapRule(&quot;subpixel coordinate&quot;, &quot;coordinate&quot;, &quot;110.125px 25.4375px&quot;, &quot;110.125px 25.4375px&quot;);
-
</del><span class="cx"> successfullyParsed = true;
</span></span></pre></div>
<a id="trunkLayoutTestscss3scrollsnapscrollsnappropertyparsingexpectedtxt"></a>
<div class="modfile"><h4>Modified: trunk/LayoutTests/css3/scroll-snap/scroll-snap-property-parsing-expected.txt (210023 => 210024)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/css3/scroll-snap/scroll-snap-property-parsing-expected.txt        2016-12-20 18:26:10 UTC (rev 210023)
+++ trunk/LayoutTests/css3/scroll-snap/scroll-snap-property-parsing-expected.txt        2016-12-20 18:44:38 UTC (rev 210024)
</span><span class="lines">@@ -1,238 +1,113 @@
</span><del>-Test the parsing of the -webkit-scroll-snap-* properties.
</del><ins>+Test the parsing of the scroll-snap-* properties.
</ins><span class="cx"> 
</span><span class="cx"> On success, you will see a series of &quot;PASS&quot; messages, followed by &quot;TEST COMPLETE&quot;.
</span><span class="cx"> 
</span><span class="cx"> 
</span><span class="cx"> 
</span><del>-inherited type : inherit
</del><ins>+initial value : initial
</ins><span class="cx"> PASS cssRule.type is 1
</span><span class="cx"> PASS declaration.length is 1
</span><del>-PASS declaration.getPropertyValue('-webkit-scroll-snap-type') is 'inherit'
</del><ins>+PASS declaration.getPropertyValue('scroll-snap-type') is 'initial'
</ins><span class="cx"> 
</span><del>-initial type : initial
</del><ins>+only strictness : mandatory
</ins><span class="cx"> PASS cssRule.type is 1
</span><span class="cx"> PASS declaration.length is 1
</span><del>-PASS declaration.getPropertyValue('-webkit-scroll-snap-type') is 'initial'
</del><ins>+PASS declaration.getPropertyValue('scroll-snap-type') is 'mandatory'
</ins><span class="cx"> 
</span><del>-inherited points-x : inherit
</del><ins>+only axis : both
</ins><span class="cx"> PASS cssRule.type is 1
</span><span class="cx"> PASS declaration.length is 1
</span><del>-PASS declaration.getPropertyValue('-webkit-scroll-snap-points-x') is 'inherit'
</del><ins>+PASS declaration.getPropertyValue('scroll-snap-type') is 'both'
</ins><span class="cx"> 
</span><del>-initial points-x : initial
</del><ins>+none : none
</ins><span class="cx"> PASS cssRule.type is 1
</span><span class="cx"> PASS declaration.length is 1
</span><del>-PASS declaration.getPropertyValue('-webkit-scroll-snap-points-x') is 'initial'
</del><ins>+PASS declaration.getPropertyValue('scroll-snap-type') is 'none'
</ins><span class="cx"> 
</span><del>-inherited points-y : inherit
</del><ins>+strictness following axis : inline mandatory
</ins><span class="cx"> PASS cssRule.type is 1
</span><span class="cx"> PASS declaration.length is 1
</span><del>-PASS declaration.getPropertyValue('-webkit-scroll-snap-points-y') is 'inherit'
</del><ins>+PASS declaration.getPropertyValue('scroll-snap-type') is 'inline mandatory'
</ins><span class="cx"> 
</span><del>-initial points-y : initial
</del><ins>+initial value : initial
</ins><span class="cx"> PASS cssRule.type is 1
</span><span class="cx"> PASS declaration.length is 1
</span><del>-PASS declaration.getPropertyValue('-webkit-scroll-snap-points-y') is 'initial'
</del><ins>+PASS declaration.getPropertyValue('scroll-snap-align') is 'initial'
</ins><span class="cx"> 
</span><del>-inherited destination : inherit
</del><ins>+single value : start
</ins><span class="cx"> PASS cssRule.type is 1
</span><span class="cx"> PASS declaration.length is 1
</span><del>-PASS declaration.getPropertyValue('-webkit-scroll-snap-destination') is 'inherit'
</del><ins>+PASS declaration.getPropertyValue('scroll-snap-align') is 'start'
</ins><span class="cx"> 
</span><del>-initial destination : initial
</del><ins>+two values : start end
</ins><span class="cx"> PASS cssRule.type is 1
</span><span class="cx"> PASS declaration.length is 1
</span><del>-PASS declaration.getPropertyValue('-webkit-scroll-snap-destination') is 'initial'
</del><ins>+PASS declaration.getPropertyValue('scroll-snap-align') is 'start end'
</ins><span class="cx"> 
</span><del>-inherited coordinate : inherit
</del><ins>+single length : 10px
</ins><span class="cx"> PASS cssRule.type is 1
</span><del>-PASS declaration.length is 1
-PASS declaration.getPropertyValue('-webkit-scroll-snap-coordinate') is 'inherit'
</del><ins>+PASS declaration.length is 4
+PASS declaration.getPropertyValue('scroll-padding') is '10px'
</ins><span class="cx"> 
</span><del>-initial coordinate : initial
</del><ins>+two percentages : 10% 20%
</ins><span class="cx"> PASS cssRule.type is 1
</span><del>-PASS declaration.length is 1
-PASS declaration.getPropertyValue('-webkit-scroll-snap-coordinate') is 'initial'
</del><ins>+PASS declaration.length is 4
+PASS declaration.getPropertyValue('scroll-padding') is '10% 20%'
</ins><span class="cx"> 
</span><del>-mandatory type : mandatory
</del><ins>+three lengths : 1px 2px 3px
</ins><span class="cx"> PASS cssRule.type is 1
</span><del>-PASS declaration.length is 1
-PASS declaration.getPropertyValue('-webkit-scroll-snap-type') is 'mandatory'
</del><ins>+PASS declaration.length is 4
+PASS declaration.getPropertyValue('scroll-padding') is '1px 2px 3px'
</ins><span class="cx"> 
</span><del>-proximity type : proximity
</del><ins>+four values : 50px 10% 20% 50px
</ins><span class="cx"> PASS cssRule.type is 1
</span><del>-PASS declaration.length is 1
-PASS declaration.getPropertyValue('-webkit-scroll-snap-type') is 'proximity'
</del><ins>+PASS declaration.length is 4
+PASS declaration.getPropertyValue('scroll-padding') is '50px 10% 20% 50px'
</ins><span class="cx"> 
</span><del>-element points along x axis : elements
</del><ins>+calc expression : calc(50px + 10%) 20px
</ins><span class="cx"> PASS cssRule.type is 1
</span><del>-PASS declaration.length is 1
-PASS declaration.getPropertyValue('-webkit-scroll-snap-points-x') is 'elements'
</del><ins>+PASS declaration.length is 4
+PASS declaration.getPropertyValue('scroll-padding') is 'calc(50px + 10%) 20px'
</ins><span class="cx"> 
</span><del>-percentage points along x axis : 100% 50%
</del><ins>+various units : 1em 5mm 2in 4cm
</ins><span class="cx"> PASS cssRule.type is 1
</span><del>-PASS declaration.length is 1
-PASS declaration.getPropertyValue('-webkit-scroll-snap-points-x') is '100% 50%'
</del><ins>+PASS declaration.length is 4
+PASS declaration.getPropertyValue('scroll-padding') is '1em 5mm 2in 4cm'
</ins><span class="cx"> 
</span><del>-pixel points along x axis : 100px 50px
</del><ins>+subpixel values : 10.4375px 6.5px
</ins><span class="cx"> PASS cssRule.type is 1
</span><del>-PASS declaration.length is 1
-PASS declaration.getPropertyValue('-webkit-scroll-snap-points-x') is '100px 50px'
</del><ins>+PASS declaration.length is 4
+PASS declaration.getPropertyValue('scroll-padding') is '10.4375px 6.5px'
</ins><span class="cx"> 
</span><del>-percentage points repeat along x axis : repeat(100%)
</del><ins>+single length : 10px
</ins><span class="cx"> PASS cssRule.type is 1
</span><del>-PASS declaration.length is 1
-PASS declaration.getPropertyValue('-webkit-scroll-snap-points-x') is 'repeat(100%)'
</del><ins>+PASS declaration.length is 4
+PASS declaration.getPropertyValue('scroll-snap-margin') is '10px'
</ins><span class="cx"> 
</span><del>-pixe points repeat along x axis : repeat(25px)
</del><ins>+two lengths : 10px 20px
</ins><span class="cx"> PASS cssRule.type is 1
</span><del>-PASS declaration.length is 1
-PASS declaration.getPropertyValue('-webkit-scroll-snap-points-x') is 'repeat(25px)'
</del><ins>+PASS declaration.length is 4
+PASS declaration.getPropertyValue('scroll-snap-margin') is '10px 20px'
</ins><span class="cx"> 
</span><del>-percentage points along x axis with percentage repeat : 100% repeat(100%)
</del><ins>+three lengths : 1px 2px 3px
</ins><span class="cx"> PASS cssRule.type is 1
</span><del>-PASS declaration.length is 1
-PASS declaration.getPropertyValue('-webkit-scroll-snap-points-x') is '100% repeat(100%)'
</del><ins>+PASS declaration.length is 4
+PASS declaration.getPropertyValue('scroll-snap-margin') is '1px 2px 3px'
</ins><span class="cx"> 
</span><del>-pixel points along x axis with percentage repeat : 100px 50px repeat(25%)
</del><ins>+four lengths : 50px 10px 20px 50px
</ins><span class="cx"> PASS cssRule.type is 1
</span><del>-PASS declaration.length is 1
-PASS declaration.getPropertyValue('-webkit-scroll-snap-points-x') is '100px 50px repeat(25%)'
</del><ins>+PASS declaration.length is 4
+PASS declaration.getPropertyValue('scroll-snap-margin') is '50px 10px 20px 50px'
</ins><span class="cx"> 
</span><del>-percentage points along x axis with pixel repeat : 100% 50% repeat(40px)
</del><ins>+various units : 1em 5mm 2in 4cm
</ins><span class="cx"> PASS cssRule.type is 1
</span><del>-PASS declaration.length is 1
-PASS declaration.getPropertyValue('-webkit-scroll-snap-points-x') is '100% 50% repeat(40px)'
</del><ins>+PASS declaration.length is 4
+PASS declaration.getPropertyValue('scroll-snap-margin') is '1em 5mm 2in 4cm'
</ins><span class="cx"> 
</span><del>-pixel points along x axis with pixel repeat : 100px repeat(42px)
</del><ins>+subpixel values : 10.4375px 6.5px
</ins><span class="cx"> PASS cssRule.type is 1
</span><del>-PASS declaration.length is 1
-PASS declaration.getPropertyValue('-webkit-scroll-snap-points-x') is '100px repeat(42px)'
-
-element points along y axis : elements
-PASS cssRule.type is 1
-PASS declaration.length is 1
-PASS declaration.getPropertyValue('-webkit-scroll-snap-points-y') is 'elements'
-
-percentage points along y axis : 100% 50%
-PASS cssRule.type is 1
-PASS declaration.length is 1
-PASS declaration.getPropertyValue('-webkit-scroll-snap-points-y') is '100% 50%'
-
-pixel points along y axis : 100px 50px
-PASS cssRule.type is 1
-PASS declaration.length is 1
-PASS declaration.getPropertyValue('-webkit-scroll-snap-points-y') is '100px 50px'
-
-percentage points repeat along y axis : repeat(100%)
-PASS cssRule.type is 1
-PASS declaration.length is 1
-PASS declaration.getPropertyValue('-webkit-scroll-snap-points-y') is 'repeat(100%)'
-
-pixe points repeat along y axis : repeat(25px)
-PASS cssRule.type is 1
-PASS declaration.length is 1
-PASS declaration.getPropertyValue('-webkit-scroll-snap-points-y') is 'repeat(25px)'
-
-percentage points along y axis with percentage repeat : 100% repeat(100%)
-PASS cssRule.type is 1
-PASS declaration.length is 1
-PASS declaration.getPropertyValue('-webkit-scroll-snap-points-y') is '100% repeat(100%)'
-
-pixel points along y axis with percentage repeat : 100px 50px repeat(25%)
-PASS cssRule.type is 1
-PASS declaration.length is 1
-PASS declaration.getPropertyValue('-webkit-scroll-snap-points-y') is '100px 50px repeat(25%)'
-
-percentage points along y axis with pixel repeat : 100% 50% repeat(40px)
-PASS cssRule.type is 1
-PASS declaration.length is 1
-PASS declaration.getPropertyValue('-webkit-scroll-snap-points-y') is '100% 50% repeat(40px)'
-
-pixel points along y axis with pixel repeat : 100px repeat(42px)
-PASS cssRule.type is 1
-PASS declaration.length is 1
-PASS declaration.getPropertyValue('-webkit-scroll-snap-points-y') is '100px repeat(42px)'
-
-em points along x axis with pixel repeat : 100em repeat(42em)
-PASS cssRule.type is 1
-PASS declaration.length is 1
-PASS declaration.getPropertyValue('-webkit-scroll-snap-points-x') is '100em repeat(42em)'
-
-mm along x axis with pixel repeat : 100mm repeat(42mm)
-PASS cssRule.type is 1
-PASS declaration.length is 1
-PASS declaration.getPropertyValue('-webkit-scroll-snap-points-x') is '100mm repeat(42mm)'
-
-in along x axis with pixel repeat : 100in repeat(42in)
-PASS cssRule.type is 1
-PASS declaration.length is 1
-PASS declaration.getPropertyValue('-webkit-scroll-snap-points-x') is '100in repeat(42in)'
-
-pt along x axis with pixel repeat : 100pt repeat(42pt)
-PASS cssRule.type is 1
-PASS declaration.length is 1
-PASS declaration.getPropertyValue('-webkit-scroll-snap-points-x') is '100pt repeat(42pt)'
-
-pixel/pixel destination : 10px 50px
-PASS cssRule.type is 1
-PASS declaration.length is 1
-PASS declaration.getPropertyValue('-webkit-scroll-snap-destination') is '10px 50px'
-
-pixel/percentage destination : 20px 40%
-PASS cssRule.type is 1
-PASS declaration.length is 1
-PASS declaration.getPropertyValue('-webkit-scroll-snap-destination') is '20px 40%'
-
-percentage/pixel destination : 0% 0px
-PASS cssRule.type is 1
-PASS declaration.length is 1
-PASS declaration.getPropertyValue('-webkit-scroll-snap-destination') is '0% 0px'
-
-percentage/percentage destination : 5% 100%
-PASS cssRule.type is 1
-PASS declaration.length is 1
-PASS declaration.getPropertyValue('-webkit-scroll-snap-destination') is '5% 100%'
-
-em/ex destination : 12em 16ex
-PASS cssRule.type is 1
-PASS declaration.length is 1
-PASS declaration.getPropertyValue('-webkit-scroll-snap-destination') is '12em 16ex'
-
-in/cm destination : 2in 5cm
-PASS cssRule.type is 1
-PASS declaration.length is 1
-PASS declaration.getPropertyValue('-webkit-scroll-snap-destination') is '2in 5cm'
-
-single pixel coordinate : 50px 100px
-PASS cssRule.type is 1
-PASS declaration.length is 1
-PASS declaration.getPropertyValue('-webkit-scroll-snap-coordinate') is '50px 100px'
-
-single percentage coordinate : 50% 100%
-PASS cssRule.type is 1
-PASS declaration.length is 1
-PASS declaration.getPropertyValue('-webkit-scroll-snap-coordinate') is '50% 100%'
-
-multiple pixel coordinates : 50px 100px 150px 100px 200px 100px
-PASS cssRule.type is 1
-PASS declaration.length is 1
-PASS declaration.getPropertyValue('-webkit-scroll-snap-coordinate') is '50px 100px 150px 100px 200px 100px'
-
-multiple percentage coordinates : 50% 100% 150% 100% 200% 100%
-PASS cssRule.type is 1
-PASS declaration.length is 1
-PASS declaration.getPropertyValue('-webkit-scroll-snap-coordinate') is '50% 100% 150% 100% 200% 100%'
-
-em/ex coordinate : 12em 16ex 16em 12ex
-PASS cssRule.type is 1
-PASS declaration.length is 1
-PASS declaration.getPropertyValue('-webkit-scroll-snap-coordinate') is '12em 16ex 16em 12ex'
-
-in/cm coordinate : 2in 5cm 5in 2cm
-PASS cssRule.type is 1
-PASS declaration.length is 1
-PASS declaration.getPropertyValue('-webkit-scroll-snap-coordinate') is '2in 5cm 5in 2cm'
</del><ins>+PASS declaration.length is 4
+PASS declaration.getPropertyValue('scroll-snap-margin') is '10.4375px 6.5px'
</ins><span class="cx"> PASS successfullyParsed is true
</span><span class="cx"> 
</span><span class="cx"> TEST COMPLETE
</span></span></pre></div>
<a id="trunkLayoutTestscss3scrollsnapscrollsnappropertyparsingjs"></a>
<div class="modfile"><h4>Modified: trunk/LayoutTests/css3/scroll-snap/scroll-snap-property-parsing.js (210023 => 210024)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/css3/scroll-snap/scroll-snap-property-parsing.js        2016-12-20 18:26:10 UTC (rev 210023)
+++ trunk/LayoutTests/css3/scroll-snap/scroll-snap-property-parsing.js        2016-12-20 18:44:38 UTC (rev 210024)
</span><span class="lines">@@ -1,4 +1,4 @@
</span><del>-description(&quot;Test the parsing of the -webkit-scroll-snap-* properties.&quot;);
</del><ins>+description(&quot;Test the parsing of the scroll-snap-* properties.&quot;);
</ins><span class="cx"> 
</span><span class="cx"> var stylesheet, cssRule, declaration;
</span><span class="cx"> var styleElement = document.createElement(&quot;style&quot;);
</span><span class="lines">@@ -5,78 +5,41 @@
</span><span class="cx"> document.head.appendChild(styleElement);
</span><span class="cx"> stylesheet = styleElement.sheet;
</span><span class="cx"> 
</span><del>-function testScrollSnapRule(description, snapProperty, rule, expectedValue)
</del><ins>+function testScrollSnapRule(description, snapProperty, rule, expectedValue, expectedLength)
</ins><span class="cx"> {
</span><span class="cx">     debug(&quot;&quot;);
</span><span class="cx">     debug(description + &quot; : &quot; + rule);
</span><span class="cx"> 
</span><del>-    stylesheet.insertRule(&quot;body { -webkit-scroll-snap-&quot; + snapProperty + &quot;: &quot; + rule + &quot;; }&quot;, 0);
</del><ins>+    stylesheet.insertRule(`body { ${snapProperty} : ${rule}; }`, 0);
</ins><span class="cx">     cssRule = stylesheet.cssRules.item(0);
</span><span class="cx"> 
</span><span class="cx">     shouldBe(&quot;cssRule.type&quot;, &quot;1&quot;);
</span><span class="cx"> 
</span><span class="cx">     declaration = cssRule.style;
</span><del>-    shouldBe(&quot;declaration.length&quot;, &quot;1&quot;);
-    shouldBe(&quot;declaration.getPropertyValue('-webkit-scroll-snap-&quot; + snapProperty + &quot;')&quot;, &quot;'&quot; + expectedValue + &quot;'&quot;);
</del><ins>+    shouldBe(&quot;declaration.length&quot;, `${expectedLength}`);
+    shouldBe(`declaration.getPropertyValue('${snapProperty}')`, `'${expectedValue}'`);
</ins><span class="cx"> }
</span><span class="cx"> 
</span><del>-testScrollSnapRule(&quot;inherited type&quot;, &quot;type&quot;, &quot;inherit&quot;, &quot;inherit&quot;);
-testScrollSnapRule(&quot;initial type&quot;, &quot;type&quot;, &quot;initial&quot;, &quot;initial&quot;);
</del><ins>+testScrollSnapRule(&quot;initial value&quot;, &quot;scroll-snap-type&quot;, &quot;initial&quot;, &quot;initial&quot;, 1);
+testScrollSnapRule(&quot;only strictness&quot;, &quot;scroll-snap-type&quot;, &quot;mandatory&quot;, &quot;mandatory&quot;, 1);
+testScrollSnapRule(&quot;only axis&quot;, &quot;scroll-snap-type&quot;, &quot;both&quot;, &quot;both&quot;, 1);
+testScrollSnapRule(&quot;none&quot;, &quot;scroll-snap-type&quot;, &quot;none&quot;, &quot;none&quot;, 1);
+testScrollSnapRule(&quot;strictness following axis&quot;, &quot;scroll-snap-type&quot;, &quot;inline mandatory&quot;, &quot;inline mandatory&quot;, 1);
+testScrollSnapRule(&quot;initial value&quot;, &quot;scroll-snap-align&quot;, &quot;initial&quot;, &quot;initial&quot;, 1);
+testScrollSnapRule(&quot;single value&quot;, &quot;scroll-snap-align&quot;, &quot;start&quot;, &quot;start&quot;, 1);
+testScrollSnapRule(&quot;two values&quot;, &quot;scroll-snap-align&quot;, &quot;start end&quot;, &quot;start end&quot;, 1);
+testScrollSnapRule(&quot;single length&quot;, &quot;scroll-padding&quot;, &quot;10px&quot;, &quot;10px&quot;, 4);
+testScrollSnapRule(&quot;two percentages&quot;, &quot;scroll-padding&quot;, &quot;10% 20%&quot;, &quot;10% 20%&quot;, 4);
+testScrollSnapRule(&quot;three lengths&quot;, &quot;scroll-padding&quot;, &quot;1px 2px 3px&quot;, &quot;1px 2px 3px&quot;, 4);
+testScrollSnapRule(&quot;four values&quot;, &quot;scroll-padding&quot;, &quot;50px 10% 20% 50px&quot;, &quot;50px 10% 20% 50px&quot;, 4);
+testScrollSnapRule(&quot;calc expression&quot;, &quot;scroll-padding&quot;, &quot;calc(50px + 10%) 20px&quot;, &quot;calc(50px + 10%) 20px&quot;, 4);
+testScrollSnapRule(&quot;various units&quot;, &quot;scroll-padding&quot;, &quot;1em 5mm 2in 4cm&quot;, &quot;1em 5mm 2in 4cm&quot;, 4);
+testScrollSnapRule(&quot;subpixel values&quot;, &quot;scroll-padding&quot;, &quot;10.4375px 6.5px&quot;, &quot;10.4375px 6.5px&quot;, 4);
+testScrollSnapRule(&quot;single length&quot;, &quot;scroll-snap-margin&quot;, &quot;10px&quot;, &quot;10px&quot;, 4);
+testScrollSnapRule(&quot;two lengths&quot;, &quot;scroll-snap-margin&quot;, &quot;10px 20px&quot;, &quot;10px 20px&quot;, 4);
+testScrollSnapRule(&quot;three lengths&quot;, &quot;scroll-snap-margin&quot;, &quot;1px 2px 3px&quot;, &quot;1px 2px 3px&quot;, 4);
+testScrollSnapRule(&quot;four lengths&quot;, &quot;scroll-snap-margin&quot;, &quot;50px 10px 20px 50px&quot;, &quot;50px 10px 20px 50px&quot;, 4);
+testScrollSnapRule(&quot;various units&quot;, &quot;scroll-snap-margin&quot;, &quot;1em 5mm 2in 4cm&quot;, &quot;1em 5mm 2in 4cm&quot;, 4);
+testScrollSnapRule(&quot;subpixel values&quot;, &quot;scroll-snap-margin&quot;, &quot;10.4375px 6.5px&quot;, &quot;10.4375px 6.5px&quot;, 4);
</ins><span class="cx"> 
</span><del>-testScrollSnapRule(&quot;inherited points-x&quot;, &quot;points-x&quot;, &quot;inherit&quot;, &quot;inherit&quot;);
-testScrollSnapRule(&quot;initial points-x&quot;, &quot;points-x&quot;, &quot;initial&quot;, &quot;initial&quot;);
-
-testScrollSnapRule(&quot;inherited points-y&quot;, &quot;points-y&quot;, &quot;inherit&quot;, &quot;inherit&quot;);
-testScrollSnapRule(&quot;initial points-y&quot;, &quot;points-y&quot;, &quot;initial&quot;, &quot;initial&quot;);
-
-testScrollSnapRule(&quot;inherited destination&quot;, &quot;destination&quot;, &quot;inherit&quot;, &quot;inherit&quot;);
-testScrollSnapRule(&quot;initial destination&quot;, &quot;destination&quot;, &quot;initial&quot;, &quot;initial&quot;);
-
-testScrollSnapRule(&quot;inherited coordinate&quot;, &quot;coordinate&quot;, &quot;inherit&quot;, &quot;inherit&quot;);
-testScrollSnapRule(&quot;initial coordinate&quot;, &quot;coordinate&quot;, &quot;initial&quot;, &quot;initial&quot;);
-
-testScrollSnapRule(&quot;mandatory type&quot;, &quot;type&quot;, &quot;mandatory&quot;, &quot;mandatory&quot;);
-testScrollSnapRule(&quot;proximity type&quot;, &quot;type&quot;, &quot;proximity&quot;, &quot;proximity&quot;);
-
-testScrollSnapRule(&quot;element points along x axis&quot;, &quot;points-x&quot;, &quot;elements&quot;, &quot;elements&quot;);
-testScrollSnapRule(&quot;percentage points along x axis&quot;, &quot;points-x&quot;, &quot;100% 50%&quot;, &quot;100% 50%&quot;);
-testScrollSnapRule(&quot;pixel points along x axis&quot;, &quot;points-x&quot;, &quot;100px 50px&quot;, &quot;100px 50px&quot;);
-testScrollSnapRule(&quot;percentage points repeat along x axis&quot;, &quot;points-x&quot;, &quot;repeat(100%)&quot;, &quot;repeat(100%)&quot;);
-testScrollSnapRule(&quot;pixe points repeat along x axis&quot;, &quot;points-x&quot;, &quot;repeat(25px)&quot;, &quot;repeat(25px)&quot;);
-testScrollSnapRule(&quot;percentage points along x axis with percentage repeat&quot;, &quot;points-x&quot;, &quot;100% repeat(100%)&quot;, &quot;100% repeat(100%)&quot;);
-testScrollSnapRule(&quot;pixel points along x axis with percentage repeat&quot;, &quot;points-x&quot;, &quot;100px 50px repeat(25%)&quot;, &quot;100px 50px repeat(25%)&quot;);
-testScrollSnapRule(&quot;percentage points along x axis with pixel repeat&quot;, &quot;points-x&quot;, &quot;100% 50% repeat(40px)&quot;, &quot;100% 50% repeat(40px)&quot;);
-testScrollSnapRule(&quot;pixel points along x axis with pixel repeat&quot;, &quot;points-x&quot;, &quot;100px repeat(42px)&quot;, &quot;100px repeat(42px)&quot;);
-
-testScrollSnapRule(&quot;element points along y axis&quot;, &quot;points-y&quot;, &quot;elements&quot;, &quot;elements&quot;);
-testScrollSnapRule(&quot;percentage points along y axis&quot;, &quot;points-y&quot;, &quot;100% 50%&quot;, &quot;100% 50%&quot;);
-testScrollSnapRule(&quot;pixel points along y axis&quot;, &quot;points-y&quot;, &quot;100px 50px&quot;, &quot;100px 50px&quot;);
-testScrollSnapRule(&quot;percentage points repeat along y axis&quot;, &quot;points-y&quot;, &quot;repeat(100%)&quot;, &quot;repeat(100%)&quot;);
-testScrollSnapRule(&quot;pixe points repeat along y axis&quot;, &quot;points-y&quot;, &quot;repeat(25px)&quot;, &quot;repeat(25px)&quot;);
-testScrollSnapRule(&quot;percentage points along y axis with percentage repeat&quot;, &quot;points-y&quot;, &quot;100% repeat(100%)&quot;, &quot;100% repeat(100%)&quot;);
-testScrollSnapRule(&quot;pixel points along y axis with percentage repeat&quot;, &quot;points-y&quot;, &quot;100px 50px repeat(25%)&quot;, &quot;100px 50px repeat(25%)&quot;);
-testScrollSnapRule(&quot;percentage points along y axis with pixel repeat&quot;, &quot;points-y&quot;, &quot;100% 50% repeat(40px)&quot;, &quot;100% 50% repeat(40px)&quot;);
-testScrollSnapRule(&quot;pixel points along y axis with pixel repeat&quot;, &quot;points-y&quot;, &quot;100px repeat(42px)&quot;, &quot;100px repeat(42px)&quot;);
-
-testScrollSnapRule(&quot;em points along x axis with pixel repeat&quot;, &quot;points-x&quot;, &quot;100em repeat(42em)&quot;, &quot;100em repeat(42em)&quot;);
-testScrollSnapRule(&quot;mm along x axis with pixel repeat&quot;, &quot;points-x&quot;, &quot;100mm repeat(42mm)&quot;, &quot;100mm repeat(42mm)&quot;);
-testScrollSnapRule(&quot;in along x axis with pixel repeat&quot;, &quot;points-x&quot;, &quot;100in repeat(42in)&quot;, &quot;100in repeat(42in)&quot;);
-testScrollSnapRule(&quot;pt along x axis with pixel repeat&quot;, &quot;points-x&quot;, &quot;100pt repeat(42pt)&quot;, &quot;100pt repeat(42pt)&quot;);
-
-testScrollSnapRule(&quot;pixel/pixel destination&quot;, &quot;destination&quot;, &quot;10px 50px&quot;, &quot;10px 50px&quot;);
-testScrollSnapRule(&quot;pixel/percentage destination&quot;, &quot;destination&quot;, &quot;20px 40%&quot;, &quot;20px 40%&quot;);
-testScrollSnapRule(&quot;percentage/pixel destination&quot;, &quot;destination&quot;, &quot;0% 0px&quot;, &quot;0% 0px&quot;);
-testScrollSnapRule(&quot;percentage/percentage destination&quot;, &quot;destination&quot;, &quot;5% 100%&quot;, &quot;5% 100%&quot;);
-
-testScrollSnapRule(&quot;em/ex destination&quot;, &quot;destination&quot;, &quot;12em 16ex&quot;, &quot;12em 16ex&quot;);
-testScrollSnapRule(&quot;in/cm destination&quot;, &quot;destination&quot;, &quot;2in 5cm&quot;, &quot;2in 5cm&quot;);
-
-testScrollSnapRule(&quot;single pixel coordinate&quot;, &quot;coordinate&quot;, &quot;50px 100px&quot;, &quot;50px 100px&quot;);
-testScrollSnapRule(&quot;single percentage coordinate&quot;, &quot;coordinate&quot;, &quot;50% 100%&quot;, &quot;50% 100%&quot;);
-testScrollSnapRule(&quot;multiple pixel coordinates&quot;, &quot;coordinate&quot;, &quot;50px 100px 150px 100px 200px 100px&quot;, &quot;50px 100px 150px 100px 200px 100px&quot;);
-testScrollSnapRule(&quot;multiple percentage coordinates&quot;, &quot;coordinate&quot;, &quot;50% 100% 150% 100% 200% 100%&quot;, &quot;50% 100% 150% 100% 200% 100%&quot;);
-
-testScrollSnapRule(&quot;em/ex coordinate&quot;, &quot;coordinate&quot;, &quot;12em 16ex 16em 12ex&quot;, &quot;12em 16ex 16em 12ex&quot;);
-testScrollSnapRule(&quot;in/cm coordinate&quot;, &quot;coordinate&quot;, &quot;2in 5cm 5in 2cm&quot;, &quot;2in 5cm 5in 2cm&quot;);
-
</del><span class="cx"> successfullyParsed = true;
</span></span></pre></div>
<a id="trunkLayoutTestscss3scrollsnapscrollsnapstylechangedalignexpectedtxt"></a>
<div class="addfile"><h4>Added: trunk/LayoutTests/css3/scroll-snap/scroll-snap-style-changed-align-expected.txt (0 => 210024)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/css3/scroll-snap/scroll-snap-style-changed-align-expected.txt                                (rev 0)
+++ trunk/LayoutTests/css3/scroll-snap/scroll-snap-style-changed-align-expected.txt        2016-12-20 18:44:38 UTC (rev 210024)
</span><span class="lines">@@ -0,0 +1,9 @@
</span><ins>+PASS successfullyParsed is true
+
+TEST COMPLETE
+Original snap offsets with `start` alignment: vertical = { 0, 300, 600, 900, 1200 }
+Updated alignment to `center`: vertical = { 0, 150, 450, 750, 1050, 1200 }
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
</ins></span></pre></div>
<a id="trunkLayoutTestscss3scrollsnapscrollsnapstylechangedalignhtmlfromrev210023trunkLayoutTestscss3scrollsnapscrollsnapstylechangedcoordinateshtml"></a>
<div class="copfile"><h4>Copied: trunk/LayoutTests/css3/scroll-snap/scroll-snap-style-changed-align.html (from rev 210023, trunk/LayoutTests/css3/scroll-snap/scroll-snap-style-changed-coordinates.html) (0 => 210024)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/css3/scroll-snap/scroll-snap-style-changed-align.html                                (rev 0)
+++ trunk/LayoutTests/css3/scroll-snap/scroll-snap-style-changed-align.html        2016-12-20 18:44:38 UTC (rev 210024)
</span><span class="lines">@@ -0,0 +1,74 @@
</span><ins>+&lt;html&gt;
+
+    &lt;head&gt;
+        &lt;style&gt;
+            #gallery {
+                width: 315px;
+                height: 600px;
+                scroll-snap-type: y mandatory;
+                -webkit-overflow-scrolling: touch;
+                overflow-y: scroll;
+                position: absolute;
+            }
+
+            .vertical {
+                width: 300px;
+                height: 300px;
+                scroll-snap-align: start;
+                position: absolute;
+            }
+
+            #child00 { background-color: #DD0000; left: 0; top: 0px; }
+            #child01 { background-color: #FF6666; left: 0; top: 300px; }
+            #child02 { background-color: #00DD00; left: 0; top: 600px; }
+            #child03 { background-color: #66FF66; left: 0; top: 900px; }
+            #child04 { background-color: #0000DD; left: 0; top: 1200px; }
+            #child05 { background-color: #6666FF; left: 0; top: 1500px; }
+        &lt;/style&gt;
+        &lt;script src=&quot;../../resources/js-test-pre.js&quot;&gt;&lt;/script&gt;
+        &lt;script&gt;
+        function setup() {
+            var gallery = document.getElementById(&quot;gallery&quot;);
+            var coordinateChildElements = document.getElementsByClassName(&quot;vertical&quot;);
+
+            function snapOffsets() {
+                return window.internals.scrollSnapOffsets(gallery);
+            }
+
+            function dumpGalleryAndUpdateCoordinates() {
+                debug(&quot;Original snap offsets with `start` alignment: &quot; + snapOffsets());
+                for (var index = 0; index &lt; coordinateChildElements.length; ++index)
+                    coordinateChildElements[index].style.scrollSnapAlign = &quot;center&quot;;
+
+                setTimeout(dumpGalleryAndFinishTest, 0);
+            }
+
+            function dumpGalleryAndFinishTest() {
+                debug(&quot;Updated alignment to `center`: &quot; + snapOffsets());
+                finishJSTest();
+                testRunner.notifyDone();
+            }
+
+            if (window.testRunner) {
+                window.jsTestIsAsync = true;
+                testRunner.dumpAsText();
+                testRunner.waitUntilDone();
+                setTimeout(dumpGalleryAndUpdateCoordinates, 0);
+            }
+        }
+        &lt;/script&gt;
+    &lt;/head&gt;
+
+    &lt;body onload=&quot;setup()&quot;&gt;
+        &lt;div id=&quot;gallery&quot;&gt;
+            &lt;div class=&quot;vertical&quot; id=&quot;child00&quot;&gt;&lt;/div&gt;
+            &lt;div class=&quot;vertical&quot; id=&quot;child01&quot;&gt;&lt;/div&gt;
+            &lt;div class=&quot;vertical&quot; id=&quot;child02&quot;&gt;&lt;/div&gt;
+            &lt;div class=&quot;vertical&quot; id=&quot;child03&quot;&gt;&lt;/div&gt;
+            &lt;div class=&quot;vertical&quot; id=&quot;child04&quot;&gt;&lt;/div&gt;
+            &lt;div class=&quot;vertical&quot; id=&quot;child05&quot;&gt;&lt;/div&gt;
+        &lt;/div&gt;
+        &lt;script src=&quot;../../resources/js-test-post.js&quot;&gt;&lt;/script&gt;
+    &lt;/body&gt;
+
+&lt;/html&gt;
</ins></span></pre></div>
<a id="trunkLayoutTestscss3scrollsnapscrollsnapstylechangedcoordinatesexpectedtxt"></a>
<div class="delfile"><h4>Deleted: trunk/LayoutTests/css3/scroll-snap/scroll-snap-style-changed-coordinates-expected.txt (210023 => 210024)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/css3/scroll-snap/scroll-snap-style-changed-coordinates-expected.txt        2016-12-20 18:26:10 UTC (rev 210023)
+++ trunk/LayoutTests/css3/scroll-snap/scroll-snap-style-changed-coordinates-expected.txt        2016-12-20 18:44:38 UTC (rev 210024)
</span><span class="lines">@@ -1,9 +0,0 @@
</span><del>-PASS successfullyParsed is true
-
-TEST COMPLETE
-Original snap offsets: vertical = { 0, 500, 1000, 1500, 2000, 2500 }
-Updated child coordinates to 0px 250px: vertical = { 0, 250, 750, 1250, 1750, 2250, 2500 }
-PASS successfullyParsed is true
-
-TEST COMPLETE
-
</del></span></pre></div>
<a id="trunkLayoutTestscss3scrollsnapscrollsnapstylechangedcoordinateshtml"></a>
<div class="delfile"><h4>Deleted: trunk/LayoutTests/css3/scroll-snap/scroll-snap-style-changed-coordinates.html (210023 => 210024)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/css3/scroll-snap/scroll-snap-style-changed-coordinates.html        2016-12-20 18:26:10 UTC (rev 210023)
+++ trunk/LayoutTests/css3/scroll-snap/scroll-snap-style-changed-coordinates.html        2016-12-20 18:44:38 UTC (rev 210024)
</span><span class="lines">@@ -1,74 +0,0 @@
</span><del>-&lt;html&gt;
-
-    &lt;head&gt;
-        &lt;style&gt;
-            #gallery {
-                width: 515px;
-                height: 500px;
-                -webkit-scroll-snap-type: mandatory;
-                -webkit-overflow-scrolling: touch;
-                overflow-y: scroll;
-                position: absolute;
-            }
-
-            .vertical {
-                width: 500px;
-                height: 500px;
-                -webkit-scroll-snap-coordinate: 0% 0%;
-                position: absolute;
-            }
-
-            #child00 { background-color: #DD0000; left: 0; top: 0px; }
-            #child01 { background-color: #FF6666; left: 0; top: 500px; }
-            #child02 { background-color: #00DD00; left: 0; top: 1000px; }
-            #child03 { background-color: #66FF66; left: 0; top: 1500px; }
-            #child04 { background-color: #0000DD; left: 0; top: 2000px; }
-            #child05 { background-color: #6666FF; left: 0; top: 2500px; }
-        &lt;/style&gt;
-        &lt;script src=&quot;../../resources/js-test-pre.js&quot;&gt;&lt;/script&gt;
-        &lt;script&gt;
-        function setup() {
-            var gallery = document.getElementById(&quot;gallery&quot;);
-            var coordinateChildElements = document.getElementsByClassName(&quot;vertical&quot;);
-
-            function snapOffsets() {
-                return window.internals.scrollSnapOffsets(gallery);
-            }
-
-            function dumpGalleryAndUpdateCoordinates() {
-                debug(&quot;Original snap offsets: &quot; + snapOffsets());
-                for (var index = 0; index &lt; coordinateChildElements.length; ++index)
-                    coordinateChildElements[index].style.webkitScrollSnapCoordinate = &quot;0px 250px&quot;;
-
-                setTimeout(dumpGalleryAndFinishTest, 0);
-            }
-
-            function dumpGalleryAndFinishTest() {
-                debug(&quot;Updated child coordinates to 0px 250px: &quot; + snapOffsets());
-                finishJSTest();
-                testRunner.notifyDone();
-            }
-
-            if (window.testRunner) {
-                window.jsTestIsAsync = true;
-                testRunner.dumpAsText();
-                testRunner.waitUntilDone();
-                setTimeout(dumpGalleryAndUpdateCoordinates, 0);
-            }
-        }
-        &lt;/script&gt;
-    &lt;/head&gt;
-
-    &lt;body onload=&quot;setup()&quot;&gt;
-        &lt;div id=&quot;gallery&quot;&gt;
-            &lt;div class=&quot;vertical&quot; id=&quot;child00&quot;&gt;&lt;/div&gt;
-            &lt;div class=&quot;vertical&quot; id=&quot;child01&quot;&gt;&lt;/div&gt;
-            &lt;div class=&quot;vertical&quot; id=&quot;child02&quot;&gt;&lt;/div&gt;
-            &lt;div class=&quot;vertical&quot; id=&quot;child03&quot;&gt;&lt;/div&gt;
-            &lt;div class=&quot;vertical&quot; id=&quot;child04&quot;&gt;&lt;/div&gt;
-            &lt;div class=&quot;vertical&quot; id=&quot;child05&quot;&gt;&lt;/div&gt;
-        &lt;/div&gt;
-        &lt;script src=&quot;../../resources/js-test-post.js&quot;&gt;&lt;/script&gt;
-    &lt;/body&gt;
-
-&lt;/html&gt;
</del></span></pre></div>
<a id="trunkLayoutTestscss3scrollsnapscrollsnapstylechangedrepeatexpectedtxt"></a>
<div class="delfile"><h4>Deleted: trunk/LayoutTests/css3/scroll-snap/scroll-snap-style-changed-repeat-expected.txt (210023 => 210024)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/css3/scroll-snap/scroll-snap-style-changed-repeat-expected.txt        2016-12-20 18:26:10 UTC (rev 210023)
+++ trunk/LayoutTests/css3/scroll-snap/scroll-snap-style-changed-repeat-expected.txt        2016-12-20 18:44:38 UTC (rev 210024)
</span><span class="lines">@@ -1,11 +0,0 @@
</span><del>-PASS successfullyParsed is true
-
-TEST COMPLETE
-Original snap offsets: vertical = { 0, 500, 1000, 1500, 2000, 2500 }
-Updated points-y to repeat(1000px): vertical = { 0, 1000, 2000, 2500 }
-Updated destination to 0px 250px: vertical = { 0, 750, 1750, 2500 }
-Updated type to none:
-PASS successfullyParsed is true
-
-TEST COMPLETE
-
</del></span></pre></div>
<a id="trunkLayoutTestscss3scrollsnapscrollsnapstylechangedrepeathtml"></a>
<div class="delfile"><h4>Deleted: trunk/LayoutTests/css3/scroll-snap/scroll-snap-style-changed-repeat.html (210023 => 210024)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/css3/scroll-snap/scroll-snap-style-changed-repeat.html        2016-12-20 18:26:10 UTC (rev 210023)
+++ trunk/LayoutTests/css3/scroll-snap/scroll-snap-style-changed-repeat.html        2016-12-20 18:44:38 UTC (rev 210024)
</span><span class="lines">@@ -1,83 +0,0 @@
</span><del>-&lt;html&gt;
-
-    &lt;head&gt;
-        &lt;style&gt;
-            #gallery {
-                width: 515px;
-                height: 500px;
-                -webkit-scroll-snap-type: mandatory;
-                -webkit-overflow-scrolling: touch;
-                -webkit-scroll-snap-points-y: repeat(500px);
-                overflow-y: scroll;
-                position: absolute;
-            }
-
-            .vertical {
-                width: 500px;
-                height: 500px;
-            }
-
-            #child00 { background-color: #DD0000; }
-            #child01 { background-color: #FF6666; }
-            #child02 { background-color: #00DD00; }
-            #child03 { background-color: #66FF66; }
-            #child04 { background-color: #0000DD; }
-            #child05 { background-color: #6666FF; }
-        &lt;/style&gt;
-        &lt;script src=&quot;../../resources/js-test-pre.js&quot;&gt;&lt;/script&gt;
-        &lt;script&gt;
-        function setup() {
-            var gallery = document.getElementById(&quot;gallery&quot;);
-
-            function snapOffsets() {
-                return window.internals.scrollSnapOffsets(gallery);
-            }
-
-            // Test starts here. Each function call triggers the next.
-            function dumpSnapOffsetsAndUpdatePointsY() {
-                debug(&quot;Original snap offsets: &quot; + snapOffsets());
-                gallery.style.webkitScrollSnapPointsY = &quot;repeat(1000px)&quot;;
-                setTimeout(dumpSnapOffsetsAndUpdateDestination, 0);
-            }
-
-            function dumpSnapOffsetsAndUpdateDestination() {
-                debug(&quot;Updated points-y to repeat(1000px): &quot; + snapOffsets());
-                gallery.style.webkitScrollSnapDestination = &quot;0px 250px&quot;;
-                setTimeout(dumpSnapOffsetsAndUpdateType, 0);
-            }
-
-            function dumpSnapOffsetsAndUpdateType() {
-                debug(&quot;Updated destination to 0px 250px: &quot; + snapOffsets());
-                gallery.style.webkitScrollSnapType = &quot;none&quot;;
-                setTimeout(dumpSnapOffsetsAndFinishTest, 0);
-            }
-
-            function dumpSnapOffsetsAndFinishTest() {
-                debug(&quot;Updated type to none:&quot; + snapOffsets());
-                finishJSTest();
-                testRunner.notifyDone();
-            }
-
-            if (window.testRunner) {
-                window.jsTestIsAsync = true;
-                testRunner.dumpAsText();
-                testRunner.waitUntilDone();
-                setTimeout(dumpSnapOffsetsAndUpdatePointsY, 0);
-            }
-        }
-        &lt;/script&gt;
-    &lt;/head&gt;
-
-    &lt;body onload=&quot;setup()&quot;&gt;
-        &lt;div id=&quot;gallery&quot;&gt;
-            &lt;div class=&quot;vertical&quot; id=&quot;child00&quot;&gt;&lt;/div&gt;
-            &lt;div class=&quot;vertical&quot; id=&quot;child01&quot;&gt;&lt;/div&gt;
-            &lt;div class=&quot;vertical&quot; id=&quot;child02&quot;&gt;&lt;/div&gt;
-            &lt;div class=&quot;vertical&quot; id=&quot;child03&quot;&gt;&lt;/div&gt;
-            &lt;div class=&quot;vertical&quot; id=&quot;child04&quot;&gt;&lt;/div&gt;
-            &lt;div class=&quot;vertical&quot; id=&quot;child05&quot;&gt;&lt;/div&gt;
-        &lt;/div&gt;
-        &lt;script src=&quot;../../resources/js-test-post.js&quot;&gt;&lt;/script&gt;
-    &lt;/body&gt;
-
-&lt;/html&gt;
</del></span></pre></div>
<a id="trunkLayoutTestscss3scrollsnapscrollsnapsubpixelrepeatexpectedtxt"></a>
<div class="delfile"><h4>Deleted: trunk/LayoutTests/css3/scroll-snap/scroll-snap-subpixel-repeat-expected.txt (210023 => 210024)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/css3/scroll-snap/scroll-snap-subpixel-repeat-expected.txt        2016-12-20 18:26:10 UTC (rev 210023)
+++ trunk/LayoutTests/css3/scroll-snap/scroll-snap-subpixel-repeat-expected.txt        2016-12-20 18:44:38 UTC (rev 210024)
</span><span class="lines">@@ -1,13 +0,0 @@
</span><del>-Tests that small positive repeat() values generates a reasonable number of snap offsets.
-
-On success, you will see a series of &quot;PASS&quot; messages, followed by &quot;TEST COMPLETE&quot;.
-
-
-PASS successfullyParsed is true
-
-TEST COMPLETE
-Number of snap offsets: 99
-PASS successfullyParsed is true
-
-TEST COMPLETE
-
</del></span></pre></div>
<a id="trunkLayoutTestscss3scrollsnapscrollsnapsubpixelrepeathtml"></a>
<div class="delfile"><h4>Deleted: trunk/LayoutTests/css3/scroll-snap/scroll-snap-subpixel-repeat.html (210023 => 210024)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/css3/scroll-snap/scroll-snap-subpixel-repeat.html        2016-12-20 18:26:10 UTC (rev 210023)
+++ trunk/LayoutTests/css3/scroll-snap/scroll-snap-subpixel-repeat.html        2016-12-20 18:44:38 UTC (rev 210024)
</span><span class="lines">@@ -1,71 +0,0 @@
</span><del>-&lt;!DOCTYPE html&gt;
-&lt;html&gt;
-    &lt;head&gt;
-        &lt;style&gt;
-            #gallery {
-                height: 100px;
-                width: 100px;
-                overflow-x: hidden;
-                overflow-y: auto;
-                -webkit-scroll-snap-type: mandatory;
-                -webkit-scroll-snap-points-y: repeat(0.0001px);
-                margin: 0;
-                padding: 0;
-            }
-
-            .colorBox {
-                width: 100px;
-                height: 100px;
-            }
-
-            #item0 { background-color: red; }
-            #item1 { background-color: green; }
-        &lt;/style&gt;
-        &lt;script src=&quot;../../resources/js-test-pre.js&quot;&gt;&lt;/script&gt;
-        &lt;script&gt;
-        function runTest()
-        {
-            var gallery = document.getElementById(&quot;gallery&quot;);
-
-            if (window.testRunner) {
-                window.jsTestIsAsync = true;
-                testRunner.dumpAsText();
-                testRunner.waitUntilDone();
-                setTimeout(dumpSnapOffsets, 0);
-            }
-
-            function snapOffsetsFromString(offsetsAsString)
-            {
-                var startIndex = offsetsAsString.search(/\{/);
-                var endIndex = offsetsAsString.search(/\}/);
-                if (startIndex == -1 || endIndex == -1 || endIndex &lt;= startIndex)
-                    return []
-
-                return offsetsAsString
-                    .substring(startIndex + 1, endIndex - startIndex - 1)
-                    .trim()
-                    .split(&quot;,&quot;)
-                    .map(function(s) { return parseFloat(s.trim()) });
-            }
-
-            function dumpSnapOffsets()
-            {
-                var offsets = snapOffsetsFromString(window.internals.scrollSnapOffsets(gallery));
-                debug(&quot;Number of snap offsets: &quot; + offsets.length);
-                finishJSTest();
-            }
-        }
-        &lt;/script&gt;
-    &lt;/head&gt;
-    &lt;body onload=&quot;runTest()&quot;&gt;
-        &lt;div id=&quot;gallery&quot;&gt;
-            &lt;div id=&quot;item0&quot; class=&quot;colorBox&quot;&gt;&lt;/div&gt;
-            &lt;div id=&quot;item1&quot; class=&quot;colorBox&quot;&gt;&lt;/div&gt;
-        &lt;/div&gt;
-        &lt;div id=&quot;console&quot;&gt;&lt;/div&gt;
-        &lt;script&gt;
-        description(&quot;Tests that small positive repeat() values generates a reasonable number of snap offsets.&quot;);
-        &lt;/script&gt;
-        &lt;script src=&quot;../../resources/js-test-post.js&quot;&gt;&lt;/script&gt;
-    &lt;/body&gt;
-&lt;/html&gt;
</del></span></pre></div>
<a id="trunkLayoutTestscss3scrollsnapscrollsnapwithscrollpaddingexpectedtxt"></a>
<div class="addfile"><h4>Added: trunk/LayoutTests/css3/scroll-snap/scroll-snap-with-scroll-padding-expected.txt (0 => 210024)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/css3/scroll-snap/scroll-snap-with-scroll-padding-expected.txt                                (rev 0)
+++ trunk/LayoutTests/css3/scroll-snap/scroll-snap-with-scroll-padding-expected.txt        2016-12-20 18:44:38 UTC (rev 210024)
</span><span class="lines">@@ -0,0 +1,5 @@
</span><ins>+Scroll-snap offsets are: vertical = { 0, 670, 1390, 2110, 2830, 3550, 3600 }
+After resizing, the offsets should not have changed: vertical = { 0, 670, 1390, 2110, 2830, 3550, 3600 }
+After removing scroll-padding, the offsets are: vertical = { 0, 720, 1440, 2160, 2880, 3600 }
+After resizing, the offsets should not have changed: vertical = { 0, 720, 1440, 2160, 2880, 3600 }
+
</ins></span></pre></div>
<a id="trunkLayoutTestscss3scrollsnapscrollsnapwithscrollpaddinghtml"></a>
<div class="addfile"><h4>Added: trunk/LayoutTests/css3/scroll-snap/scroll-snap-with-scroll-padding.html (0 => 210024)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/css3/scroll-snap/scroll-snap-with-scroll-padding.html                                (rev 0)
+++ trunk/LayoutTests/css3/scroll-snap/scroll-snap-with-scroll-padding.html        2016-12-20 18:44:38 UTC (rev 210024)
</span><span class="lines">@@ -0,0 +1,93 @@
</span><ins>+&lt;!DOCTYPE html&gt;
+&lt;html&gt;
+&lt;head&gt;
+    &lt;style&gt;
+        body {
+            overflow: hidden;
+        }
+        #container {
+            position: absolute;
+            width: 400px;
+            height: 400px;
+            top: 0;
+            left: 0;
+            scroll-snap-type: y mandatory;
+            scroll-padding: 50px;
+            overflow-x: hidden;
+            overflow-y: scroll;
+            border: 1px black dashed;
+            opacity: 0.75;
+            background-color: #EEE;
+        }
+
+        .child {
+            width: 400px;
+            height: 400px;
+            scroll-snap-align: start;
+            position: absolute;
+            left: 0;
+        }
+    &lt;/style&gt;
+    &lt;script&gt;
+    let write = s =&gt; output.innerHTML += s + &quot;&lt;br&gt;&quot;;
+    if (window.testRunner) {
+        testRunner.dumpAsText();
+        testRunner.waitUntilDone();
+    }
+
+    function zeroDelayTimeout(action) {
+        return new Promise((resolve) =&gt; {
+            setTimeout(() =&gt; {
+                action();
+                resolve();
+            });
+        });
+    }
+
+    function run()
+    {
+        if (!window.testRunner || !window.internals) {
+            write(`To manually test, verify that scrolling snaps 50px above each colored box.`);
+            return;
+        }
+
+        zeroDelayTimeout(() =&gt; {
+            write(&quot;Scroll-snap offsets are: &quot; + internals.scrollSnapOffsets(container));
+            container.scrollTop += 100;
+            container.style.width = &quot;500px&quot;;
+        })
+        .then(() =&gt; {
+            zeroDelayTimeout(() =&gt; {
+                write(&quot;After resizing, the offsets should not have changed: &quot; + internals.scrollSnapOffsets(container));
+                container.scrollTop += 100;
+                container.style.scrollPadding = &quot;0px&quot;;
+            });
+        })
+        .then(() =&gt; {
+            zeroDelayTimeout(() =&gt; {
+                write(&quot;After removing scroll-padding, the offsets are: &quot; + internals.scrollSnapOffsets(container));
+                container.scrollTop += 100;
+                container.style.width = &quot;400px&quot;;
+            });
+        })
+        .then(() =&gt; {
+            zeroDelayTimeout(() =&gt; {
+                write(&quot;After resizing, the offsets should not have changed: &quot; + internals.scrollSnapOffsets(container));
+                testRunner.notifyDone();
+            });
+        });
+    }
+    &lt;/script&gt;
+&lt;/head&gt;
+&lt;body onload=run()&gt;
+    &lt;div id=&quot;container&quot;&gt;
+        &lt;div class=&quot;child&quot; style=&quot;background-color: red;     top: 0px;&quot;&gt;&lt;/div&gt;
+        &lt;div class=&quot;child&quot; style=&quot;background-color: green;   top: 720px;&quot;&gt;&lt;/div&gt;
+        &lt;div class=&quot;child&quot; style=&quot;background-color: blue;    top: 1440px;&quot;&gt;&lt;/div&gt;
+        &lt;div class=&quot;child&quot; style=&quot;background-color: aqua;    top: 2160px;&quot;&gt;&lt;/div&gt;
+        &lt;div class=&quot;child&quot; style=&quot;background-color: yellow;  top: 2880px;&quot;&gt;&lt;/div&gt;
+        &lt;div class=&quot;child&quot; style=&quot;background-color: fuchsia; top: 3600px;&quot;&gt;&lt;/div&gt;
+    &lt;/div&gt;
+    &lt;div id=&quot;output&quot;&gt;&lt;/div&gt;
+&lt;/body&gt;
+&lt;/html&gt;
</ins></span></pre></div>
<a id="trunkLayoutTestsplatformiossimulatorTestExpectations"></a>
<div class="modfile"><h4>Modified: trunk/LayoutTests/platform/ios-simulator/TestExpectations (210023 => 210024)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/platform/ios-simulator/TestExpectations        2016-12-20 18:26:10 UTC (rev 210023)
+++ trunk/LayoutTests/platform/ios-simulator/TestExpectations        2016-12-20 18:44:38 UTC (rev 210024)
</span><span class="lines">@@ -2232,7 +2232,6 @@
</span><span class="cx"> compositing/geometry/ancestor-overflow-change.html [ Failure ]
</span><span class="cx"> compositing/layer-creation/will-change-layer-creation.html [ Failure ]
</span><span class="cx"> css3/scroll-snap/nested-elements.html [ Failure ]
</span><del>-css3/scroll-snap/scroll-snap-coordinate.html [ Failure ]
</del><span class="cx"> fast/block/lineboxcontain/block-with-ideographs.xhtml [ Failure ]
</span><span class="cx"> fast/css/text-overflow-ellipsis-text-align-center.html [ Failure ]
</span><span class="cx"> fast/css/text-overflow-ellipsis-text-align-left.html [ Failure ]
</span></span></pre></div>
<a id="trunkLayoutTestsplatformmacwk2TestExpectations"></a>
<div class="modfile"><h4>Modified: trunk/LayoutTests/platform/mac-wk2/TestExpectations (210023 => 210024)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/platform/mac-wk2/TestExpectations        2016-12-20 18:26:10 UTC (rev 210023)
+++ trunk/LayoutTests/platform/mac-wk2/TestExpectations        2016-12-20 18:44:38 UTC (rev 210024)
</span><span class="lines">@@ -267,7 +267,6 @@
</span><span class="cx"> webkit.org/b/136554 tiled-drawing/scrolling/frames/frameset-nested-frame-scrollability.html [ Pass Failure ]
</span><span class="cx"> webkit.org/b/139901 tiled-drawing/scrolling/frames/frameset-frame-scrollability.html [ Pass Failure ]
</span><span class="cx"> 
</span><del>-webkit.org/b/162505 tiled-drawing/scrolling/latched-div-with-scroll-snap.html [ Pass Failure ]
</del><span class="cx"> webkit.org/b/148407 tiled-drawing/scrolling/scroll-snap/scroll-snap-mandatory-mainframe-slow-horizontal.html [ Pass Failure ]
</span><span class="cx"> webkit.org/b/148407 tiled-drawing/scrolling/scroll-snap/scroll-snap-mandatory-mainframe-slow-vertical.html [ Pass Failure ]
</span><span class="cx"> webkit.org/b/165196 tiled-drawing/scrolling/scroll-snap/scroll-snap-iframe.html [ Pass Failure ]
</span></span></pre></div>
<a id="trunkLayoutTeststileddrawingscrollinglatcheddivwithscrollsnapexpectedtxt"></a>
<div class="modfile"><h4>Modified: trunk/LayoutTests/tiled-drawing/scrolling/latched-div-with-scroll-snap-expected.txt (210023 => 210024)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/tiled-drawing/scrolling/latched-div-with-scroll-snap-expected.txt        2016-12-20 18:26:10 UTC (rev 210023)
+++ trunk/LayoutTests/tiled-drawing/scrolling/latched-div-with-scroll-snap-expected.txt        2016-12-20 18:44:38 UTC (rev 210024)
</span><span class="lines">@@ -1,10 +1,27 @@
</span><del>-Tests that the scroll-snap feature works properly in overflow regions.
-PASS div scrolled to next window.
-PASS div honored snap points.
-Testing that latch moves to bottom div:
-PASS top div did not move.
-PASS div scrolled to next window.
-PASS successfullyParsed is true
</del><ins>+Manually test with the following steps:
</ins><span class="cx"> 
</span><del>-TEST COMPLETE
</del><ins>+1. Scroll with momentum to the green box in the first div.
</ins><span class="cx"> 
</span><ins>+2. In the first div, drag so the blue box is partially visible, then let go so the div snaps back to show green.
+
+3. Scroll with momentum to the green box in the second div.
+
+4. In the second div, drag so the blue box is partially visible, then let go so the div snaps back to show green.
+
+* Swiping with momentum in topTarget with scroll offset 0
+topTarget now has scroll offset 400
+bottomTarget now has scroll offset 0
+
+* Swiping without momentum in topTarget with scroll offset 400
+topTarget now has scroll offset 400
+bottomTarget now has scroll offset 0
+
+* Swiping with momentum in bottomTarget with scroll offset 0
+topTarget now has scroll offset 400
+bottomTarget now has scroll offset 400
+
+* Swiping without momentum in bottomTarget with scroll offset 400
+topTarget now has scroll offset 400
+bottomTarget now has scroll offset 400
+
+
</ins></span></pre></div>
<a id="trunkLayoutTeststileddrawingscrollinglatcheddivwithscrollsnaphtml"></a>
<div class="modfile"><h4>Modified: trunk/LayoutTests/tiled-drawing/scrolling/latched-div-with-scroll-snap.html (210023 => 210024)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/tiled-drawing/scrolling/latched-div-with-scroll-snap.html        2016-12-20 18:26:10 UTC (rev 210023)
+++ trunk/LayoutTests/tiled-drawing/scrolling/latched-div-with-scroll-snap.html        2016-12-20 18:44:38 UTC (rev 210024)
</span><span class="lines">@@ -2,23 +2,44 @@
</span><span class="cx"> &lt;html&gt;
</span><span class="cx">     &lt;head&gt;
</span><span class="cx">         &lt;style&gt;
</span><ins>+            body {
+                margin: 0;
+            }
+
+            #topTarget {
+                position: absolute;
+                top: 0;
+                left: 0;
+                border: 1px black solid;
+            }
+
+            #bottomTarget {
+                position: absolute;
+                top: 400px;
+                left: 0;
+                border: 1px black solid;
+            }
+
</ins><span class="cx">             .gallery {
</span><del>-                width: 200px;
-                height: 200px;
</del><ins>+                width: 400px;
+                height: 400px;
</ins><span class="cx">                 overflow-y: hidden;
</span><span class="cx">                 overflow-x: auto;
</span><span class="cx">                 margin-bottom: 2px;
</span><del>-                -webkit-scroll-snap-points-x: repeat(100%);
-                -webkit-scroll-snap-type: mandatory;
</del><ins>+                scroll-snap-type: x mandatory;
+                opacity: 0.5;
</ins><span class="cx">             }
</span><ins>+
</ins><span class="cx">             .galleryDrawer {
</span><del>-                width: 1200px;
-                height: 200px;
</del><ins>+                width: 2400px;
+                height: 400px;
</ins><span class="cx">             }
</span><ins>+
</ins><span class="cx">             .colorBox {
</span><del>-                height: 200px;
-                width: 200px;
</del><ins>+                height: 400px;
+                width: 400px;
</ins><span class="cx">                 float: left;
</span><ins>+                scroll-snap-align: start;
</ins><span class="cx">             }
</span><span class="cx">             #itemH0, #itemV0 { background-color: red; }
</span><span class="cx">             #itemH1, #itemV1 { background-color: green; }
</span><span class="lines">@@ -27,15 +48,7 @@
</span><span class="cx">             #itemH4, #itemV4 { background-color: yellow; }
</span><span class="cx">             #itemH5, #itemV5 { background-color: fuchsia; }
</span><span class="cx">         &lt;/style&gt;
</span><del>-        &lt;script src=&quot;../../resources/js-test.js&quot;&gt;&lt;/script&gt;
</del><span class="cx">         &lt;script&gt;
</span><del>-        window.jsTestIsAsync = true;
-
-        var divScrollPositionBeforeGlide;
-        var divScrollPositionBeforeSnap;
-        var divScrollPositionBeforeSecondaryMove;
-        var bottomDivScrollPositionBeforeSecondaryMove;
-
</del><span class="cx">         function locationInWindowCoordinates(element)
</span><span class="cx">         {
</span><span class="cx">             var position = {};
</span><span class="lines">@@ -54,169 +67,53 @@
</span><span class="cx">             return position;
</span><span class="cx">         }
</span><span class="cx"> 
</span><del>-
-        function checkForSecondaryScrollGlide(targetLabel)
</del><ins>+        let swipeWithMomentum = (element) =&gt; swipeInElement(element, true);
+        let swipeWithoutMomentum = (element) =&gt; swipeInElement(element, false);
+        function swipeInElement(element, momentum)
</ins><span class="cx">         {
</span><del>-            var topDivTarget = document.getElementById(&quot;topTarget&quot;);
-
-            var actualTopPosition = topDivTarget.scrollLeft;
-            var expectedTopPosition = divScrollPositionBeforeSecondaryMove;
-
-            // The top div should NOT have scrolled (glided) to the next snap point.
-            if (actualTopPosition == expectedTopPosition)
-                testPassed(&quot;top div did not move.&quot;);
-            else
-                testFailed(&quot;top div was improperly latched. Expected &quot; + expectedTopPosition + &quot;, but got &quot; + actualTopPosition);
-
-            var divTarget = document.getElementById(&quot;bottomTarget&quot;);
-
-            var actualPosition = divTarget.scrollLeft;
-            var expectedPosition = divTarget.clientWidth;
-
-            // The div should have scrolled (glided) to the next snap point.
-            if (actualPosition == expectedPosition)
-                testPassed(&quot;div scrolled to next window.&quot;);
-            else
-                testFailed(&quot;div did not honor snap points. Expected &quot; + expectedPosition + &quot;, but got &quot; + actualPosition);
-
-            finishJSTest();
-        }
-
-        function performSwipeGestureOnElementEnd()
-        {
-            eventSender.mouseScrollByWithWheelAndMomentumPhases(-1, 0, 'none', 'begin');
-            eventSender.mouseScrollByWithWheelAndMomentumPhases(-1, 0, 'none', 'continue');
-            eventSender.mouseScrollByWithWheelAndMomentumPhases(0, 0, 'none', 'end');
-        }
-
-        function performSwipeGestureOnElement(divTarget)
-        {
-            var windowPosition = locationInWindowCoordinates(divTarget);
-            var startPosX = windowPosition.x + 0.5 * divTarget.clientWidth;
-            var startPosY = windowPosition.y + 0.5 * divTarget.clientHeight;
-
-            eventSender.monitorWheelEvents();
-            eventSender.mouseMoveTo(startPosX, startPosY);
-            eventSender.mouseScrollByWithWheelAndMomentumPhases(-1, 0, 'began', 'none');
-            eventSender.mouseScrollByWithWheelAndMomentumPhases(-1, 0, 'changed', 'none');
-            eventSender.mouseScrollByWithWheelAndMomentumPhases(-1, 0, 'changed', 'none');
-            eventSender.mouseScrollByWithWheelAndMomentumPhases(-1, 0, 'changed', 'none');
-            eventSender.mouseScrollByWithWheelAndMomentumPhases(0, 0, 'ended', 'none');
-        }
-
-        function scrollInSecondDiv()
-        {
-            debug(&quot;Testing that latch moves to bottom div:&quot;);
-            var topDivTarget = document.getElementById(&quot;topTarget&quot;);
-            divScrollPositionBeforeSecondaryMove = topDivTarget.scrollLeft;
-
-            var divTarget = document.getElementById(&quot;bottomTarget&quot;);
-
-            performSwipeGestureOnElement(divTarget);
-
-            eventSender.callAfterScrollingCompletes(function() { 
-                performSwipeGestureOnElementEnd();
-                eventSender.callAfterScrollingCompletes(function() {
-                    setTimeout(function() { checkForSecondaryScrollGlide(); }, 10); 
</del><ins>+            return new Promise(resolve =&gt; {
+                write(`* Swiping ${momentum ? &quot;with&quot; : &quot;without&quot;} momentum in ${element.id} with scroll offset ${element.scrollLeft}`);
+                let location = locationInWindowCoordinates(element);
+                eventSender.monitorWheelEvents();
+                eventSender.mouseMoveTo(location.x, location.y);
+                eventSender.mouseScrollByWithWheelAndMomentumPhases(-1, 0, &quot;began&quot;, &quot;none&quot;);
+                eventSender.mouseScrollByWithWheelAndMomentumPhases(-1, 0, &quot;changed&quot;, &quot;none&quot;);
+                eventSender.mouseScrollByWithWheelAndMomentumPhases(-1, 0, &quot;changed&quot;, &quot;none&quot;);
+                eventSender.mouseScrollByWithWheelAndMomentumPhases(0, 0, &quot;ended&quot;, &quot;none&quot;);
+                if (momentum) {
+                    eventSender.mouseScrollByWithWheelAndMomentumPhases(-1, 0, &quot;none&quot;, &quot;begin&quot;);
+                    eventSender.mouseScrollByWithWheelAndMomentumPhases(-1, 0, &quot;none&quot;, &quot;continue&quot;);
+                    eventSender.mouseScrollByWithWheelAndMomentumPhases(0, 0, &quot;none&quot;, &quot;end&quot;);
+                }
+                eventSender.callAfterScrollingCompletes(() =&gt; {
+                    write(`  topTarget now has scroll offset ${topTarget.scrollLeft}`);
+                    write(`  bottomTarget now has scroll offset ${bottomTarget.scrollLeft}`);
+                    write(&quot;&quot;);
+                    resolve();
</ins><span class="cx">                 });
</span><del>-            });           
</del><ins>+            });
</ins><span class="cx">         }
</span><span class="cx"> 
</span><del>-        function checkForScrollSnap()
</del><ins>+        function run()
</ins><span class="cx">         {
</span><del>-            var divTarget = document.getElementById(&quot;topTarget&quot;);
-
-            var actualPosition = divTarget.scrollLeft;
-
-            // The div should have snapped back to the previous position
-            if (actualPosition != divScrollPositionBeforeSnap) {
-                testFailed(&quot;div did not snap back to proper location for &quot; + divTarget +&quot;. Expected &quot; + divScrollPositionBeforeSnap + &quot;, but got &quot; + actualPosition);
-                finishJSTest();
</del><ins>+            if (!window.eventSender)
</ins><span class="cx">                 return;
</span><del>-            } else
-                testPassed(&quot;div honored snap points.&quot;);
-            scrollInSecondDiv();
-        }
</del><span class="cx"> 
</span><del>-        function scrollSnapTest()
-        {
-            var divTarget = document.getElementById(&quot;topTarget&quot;);

-            divScrollPositionBeforeSnap = divTarget.scrollLeft;
-
-            var windowPosition = locationInWindowCoordinates(divTarget);
-            var startPosX = windowPosition.x + 0.5 * divTarget.clientWidth;
-            var startPosY = windowPosition.y + 0.5 * divTarget.clientHeight;
-
-            eventSender.monitorWheelEvents();
-            eventSender.mouseMoveTo(startPosX, startPosY); // Make sure we are just outside the iFrame
-            eventSender.mouseScrollByWithWheelAndMomentumPhases(-1, 0, 'began', 'none');
-            eventSender.mouseScrollByWithWheelAndMomentumPhases(-1, 0, 'changed', 'none');
-            eventSender.mouseScrollByWithWheelAndMomentumPhases(-1, 0, 'changed', 'none');
-            eventSender.mouseScrollByWithWheelAndMomentumPhases(0, 0, 'ended', 'none');
-            eventSender.callAfterScrollingCompletes(function() { checkForScrollSnap(); });
</del><ins>+            swipeWithMomentum(topTarget)
+                .then(() =&gt; swipeWithoutMomentum(topTarget))
+                .then(() =&gt; swipeWithMomentum(bottomTarget))
+                .then(() =&gt; swipeWithoutMomentum(bottomTarget))
+                .then(() =&gt; testRunner.notifyDone());
</ins><span class="cx">         }
</span><del>-
-        function checkForScrollGlide(targetLabel)
-        {
-            var divTarget = document.getElementById(&quot;topTarget&quot;);
-
-            var actualPosition = divTarget.scrollLeft;
-            var expectedPosition = divTarget.clientWidth;
-
-            // The div should have scrolled (glided) to the next snap point.
-            if (actualPosition == expectedPosition)
-                testPassed(&quot;div scrolled to next window.&quot;);
-            else {
-                testFailed(&quot;div did not honor snap points. Expected &quot; + expectedPosition + &quot;, but got &quot; + actualPosition);
-                finishJSTest();
-                return;
-            }
-            scrollSnapTest();
-        }
-
-        function scrollGlideTest()
-        {
-            var divTarget = document.getElementById(&quot;topTarget&quot;);

-            divScrollPositionBeforeGlide = divTarget.scrollLeft;
-
-            performSwipeGestureOnElement(divTarget);
-            eventSender.callAfterScrollingCompletes(function() { 
-                performSwipeGestureOnElementEnd();
-                eventSender.callAfterScrollingCompletes(function() {
-                    setTimeout(function() { checkForScrollGlide(); }, 10); 
-                });
-            });           
-        }
-
-        function onLoad()
-        {
-            if (window.eventSender) {
-                testRunner.dumpAsText();
-                scrollGlideTest();
-            } else {
-                var messageLocationH = document.getElementById('itemH0');
-                var message = document.createElement('div');
-                message.innerHTML = &quot;&lt;p&gt;This test is better run under WebKitTestRunner.&lt;br/&gt;To manually test it, place the mouse pointer&lt;br/&gt;&quot;
-                    + &quot;inside the red region at the top of the page,&lt;br/&gt;and then use the mouse wheel or a two-finger&lt;br/&gt;swipe to make a&quot;
-                    + &quot;small swipe gesture with&lt;br/&gt;some momentum.&lt;br/&gt;&lt;br/&gt;&quot;
-                    + &quot;The region should scroll to show a green region.&lt;br/&gt;&lt;br/&gt;&quot;
-                    + &quot;Next, perform a small scroll gesture that does&lt;br/&gt;not involve momentum. You should begin to&lt;br/&gt;see one of the colors &quot;
-                    + &quot;to the side of the current&lt;br/&gt;green box. When you release the wheel, the&lt;br/&gt;region should scroll back to a single color.&quot;;
-                messageLocationH.appendChild(message);
-
-                var messageLocationV = document.getElementById('itemV0');
-                var message = document.createElement('div');
-                message.innerHTML = &quot;&lt;p&gt;You should also be able to repeat these tests steps for this vertical region.&lt;br/&gt;&quot;
-                messageLocationV.appendChild(message);
-            }
-        }
</del><span class="cx">         &lt;/script&gt;
</span><span class="cx">     &lt;/head&gt;
</span><del>-    &lt;body onload=&quot;onLoad();&quot;&gt;
-        &lt;div style=&quot;position: relative; width: 200px&quot;&gt;
-            &lt;div&gt;Tests that the scroll-snap feature works properly in overflow regions.&lt;/div&gt;
</del><ins>+    &lt;body onload=run()&gt;
+        &lt;div style=&quot;position: relative; width: 400px&quot;&gt;
+            &lt;p&gt;Manually test with the following steps:&lt;/p&gt;
+            &lt;p&gt;1. Scroll with momentum to the green box in the first div.&lt;/p&gt;
+            &lt;p&gt;2. In the first div, drag so the blue box is partially visible, then let go so the div snaps back to show green.&lt;/p&gt;
+            &lt;p&gt;3. Scroll with momentum to the green box in the second div.&lt;/p&gt;
+            &lt;p&gt;4. In the second div, drag so the blue box is partially visible, then let go so the div snaps back to show green.&lt;/p&gt;
</ins><span class="cx">             &lt;div class=&quot;gallery&quot; id=&quot;topTarget&quot;&gt;
</span><span class="cx">                 &lt;div class=&quot;galleryDrawer&quot;&gt;
</span><span class="cx">                     &lt;div id=&quot;itemH0&quot; class=&quot;colorBox&quot;&gt;&lt;/div&gt;
</span><span class="lines">@@ -237,7 +134,12 @@
</span><span class="cx">                     &lt;div id=&quot;itemV5&quot; class=&quot;colorBox&quot;&gt;&lt;/div&gt;
</span><span class="cx">                 &lt;/div&gt;
</span><span class="cx">             &lt;/div&gt;
</span><del>-            &lt;div id=&quot;console&quot;&gt;&lt;/div&gt;
</del><ins>+            &lt;div id=&quot;output&quot;&gt;&lt;/div&gt;
+            &lt;script&gt;
+                let write = s =&gt; output.innerHTML += s + &quot;&lt;br&gt;&quot;;
+                testRunner.dumpAsText();
+                testRunner.waitUntilDone();
+            &lt;/script&gt;
</ins><span class="cx">         &lt;/div&gt;
</span><span class="cx">     &lt;/body&gt;
</span><span class="cx"> &lt;/html&gt;
</span><span class="cx">\ No newline at end of file
</span></span></pre></div>
<a id="trunkLayoutTeststileddrawingscrollingscrollsnapresourceshorizontalmainframehtml"></a>
<div class="modfile"><h4>Modified: trunk/LayoutTests/tiled-drawing/scrolling/scroll-snap/resources/horizontal-mainframe.html (210023 => 210024)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/tiled-drawing/scrolling/scroll-snap/resources/horizontal-mainframe.html        2016-12-20 18:26:10 UTC (rev 210023)
+++ trunk/LayoutTests/tiled-drawing/scrolling/scroll-snap/resources/horizontal-mainframe.html        2016-12-20 18:44:38 UTC (rev 210024)
</span><span class="lines">@@ -7,13 +7,13 @@
</span><span class="cx">                 height: 100vh;
</span><span class="cx">                 margin: 0;
</span><span class="cx">                 padding: 0;
</span><del>-                -webkit-scroll-snap-points-x: repeat(100vw);
-                -webkit-scroll-snap-type: mandatory;
</del><ins>+                scroll-snap-type: x mandatory;
</ins><span class="cx">             }
</span><span class="cx">             .colorBox {
</span><span class="cx">                 height: 100vh;
</span><span class="cx">                 width: 100vw;
</span><span class="cx">                 float: left;
</span><ins>+                scroll-snap-align: start;
</ins><span class="cx">             }
</span><span class="cx">             #item0 { background-color: red; }
</span><span class="cx">             #item1 { background-color: green; }
</span></span></pre></div>
<a id="trunkLayoutTeststileddrawingscrollingscrollsnapresourcesverticalmainframehtml"></a>
<div class="modfile"><h4>Modified: trunk/LayoutTests/tiled-drawing/scrolling/scroll-snap/resources/vertical-mainframe.html (210023 => 210024)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/tiled-drawing/scrolling/scroll-snap/resources/vertical-mainframe.html        2016-12-20 18:26:10 UTC (rev 210023)
+++ trunk/LayoutTests/tiled-drawing/scrolling/scroll-snap/resources/vertical-mainframe.html        2016-12-20 18:44:38 UTC (rev 210024)
</span><span class="lines">@@ -7,13 +7,13 @@
</span><span class="cx">                 height: 600vh;
</span><span class="cx">                 margin: 0;
</span><span class="cx">                 padding: 0;
</span><del>-                -webkit-scroll-snap-points-y: repeat(100vh);
-                -webkit-scroll-snap-type: mandatory;
</del><ins>+                scroll-snap-type: y mandatory;
</ins><span class="cx">             }
</span><span class="cx">             .colorBox {
</span><span class="cx">                 height: 100vh;
</span><span class="cx">                 width: 100vw;
</span><span class="cx">                 float: left;
</span><ins>+                scroll-snap-align: start;
</ins><span class="cx">             }
</span><span class="cx">             #item0 { background-color: red; }
</span><span class="cx">             #item1 { background-color: green; }
</span></span></pre></div>
<a id="trunkLayoutTeststileddrawingscrollingscrollsnapscrollsnapdestinationlockupexpectedtxt"></a>
<div class="delfile"><h4>Deleted: trunk/LayoutTests/tiled-drawing/scrolling/scroll-snap/scroll-snap-destination-lock-up-expected.txt (210023 => 210024)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/tiled-drawing/scrolling/scroll-snap/scroll-snap-destination-lock-up-expected.txt        2016-12-20 18:26:10 UTC (rev 210023)
+++ trunk/LayoutTests/tiled-drawing/scrolling/scroll-snap/scroll-snap-destination-lock-up-expected.txt        2016-12-20 18:44:38 UTC (rev 210024)
</span><span class="lines">@@ -1,20 +0,0 @@
</span><del>-This test passes if it doesn't time out.
-Tests infinite loop calculating scroll snap point offsets.
-
-On success, you will see a series of &quot;PASS&quot; messages, followed by &quot;TEST COMPLETE&quot;.
-
-
-PASS lockUpSnapCoordinate.style['-webkit-scroll-snap-type'] is &quot;&quot;
-PASS window.getComputedStyle(lockUpSnapCoordinate).getPropertyValue('-webkit-scroll-snap-type') is &quot;mandatory&quot;
-PASS lockUpSnapCoordinate.style['-webkit-scroll-snap-points-x'] is &quot;&quot;
-PASS window.getComputedStyle(lockUpSnapCoordinate).getPropertyValue('-webkit-scroll-snap-points-x') is &quot;repeat(100%)&quot;
-PASS lockUpSnapCoordinate.style['-webkit-scroll-snap-points-y'] is &quot;&quot;
-PASS window.getComputedStyle(lockUpSnapCoordinate).getPropertyValue('-webkit-scroll-snap-points-y') is &quot;repeat(100%)&quot;
-PASS lockUpSnapCoordinate.style['-webkit-scroll-snap-destination'] is &quot;&quot;
-PASS window.getComputedStyle(lockUpSnapCoordinate).getPropertyValue('-webkit-scroll-snap-destination') is &quot;100% 100%&quot;
-PASS lockUpSnapCoordinate.style['-webkit-scroll-snap-coordinate'] is &quot;&quot;
-PASS window.getComputedStyle(lockUpSnapCoordinate).getPropertyValue('-webkit-scroll-snap-coordinate') is &quot;none&quot;
-PASS successfullyParsed is true
-
-TEST COMPLETE
-
</del></span></pre></div>
<a id="trunkLayoutTeststileddrawingscrollingscrollsnapscrollsnapdestinationlockuphtml"></a>
<div class="delfile"><h4>Deleted: trunk/LayoutTests/tiled-drawing/scrolling/scroll-snap/scroll-snap-destination-lock-up.html (210023 => 210024)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/tiled-drawing/scrolling/scroll-snap/scroll-snap-destination-lock-up.html        2016-12-20 18:26:10 UTC (rev 210023)
+++ trunk/LayoutTests/tiled-drawing/scrolling/scroll-snap/scroll-snap-destination-lock-up.html        2016-12-20 18:44:38 UTC (rev 210024)
</span><span class="lines">@@ -1,71 +0,0 @@
</span><del>-&lt;!DOCTYPE html&gt;
-&lt;html&gt;
-    &lt;head&gt;
-        &lt;style&gt;
-            .horizontalGallery {
-                width: 400px;
-                height: 50px;
-                overflow-y: hidden;
-                overflow-x: auto;
-            }
-            .horizontalGalleryDrawer {
-                width: 3000px;
-                height: 50px;
-            }
-            .colorBox {
-                height: 50px;
-                width: 400px;
-                float: left;
-            }
-
-            .lockUpSnapCoordinate {
-                -webkit-scroll-snap-type: mandatory;
-                -webkit-scroll-snap-points-x: repeat(100%);
-                -webkit-scroll-snap-points-y: repeat(100%);
-                -webkit-scroll-snap-destination: 100% 100%;
-                -webkit-scroll-snap-coordinate: initial;
-            }
-
-            #item0 { background-color: red; }
-            #item1 { background-color: green; }
-            #item2 { background-color: blue; }
-            #item3 { background-color: aqua; }
-            #item4 { background-color: yellow; }
-            #item5 { background-color: fuchsia; }
-        &lt;/style&gt;
-        &lt;script src=&quot;../../../resources/js-test-pre.js&quot;&gt;&lt;/script&gt;
-    &lt;/head&gt;
-    &lt;body&gt;
-        &lt;div style=&quot;width: 400px&quot;&gt;
-            &lt;div id=&quot;lockUpSnapCoordinate&quot; class=&quot;horizontalGallery lockUpSnapCoordinate&quot;&gt;
-                &lt;div class=&quot;horizontalGalleryDrawer&quot;&gt;
-                    &lt;div id=&quot;item0&quot; class=&quot;colorBox&quot;&gt;&lt;/div&gt;
-                    &lt;div id=&quot;item1&quot; class=&quot;colorBox&quot;&gt;&lt;/div&gt;
-                    &lt;div id=&quot;item2&quot; class=&quot;colorBox&quot;&gt;&lt;/div&gt;
-                    &lt;div id=&quot;item3&quot; class=&quot;colorBox&quot;&gt;&lt;/div&gt;
-                    &lt;div id=&quot;item4&quot; class=&quot;colorBox&quot;&gt;&lt;/div&gt;
-                    &lt;div id=&quot;item5&quot; class=&quot;colorBox&quot;&gt;&lt;/div&gt;
-                &lt;/div&gt;
-            &lt;/div&gt;
-        &lt;/div&gt;
-        This test passes if it doesn't time out.
-        &lt;div id=&quot;console&quot;&gt;&lt;/div&gt;
-        &lt;script&gt;
-        description(&quot;Tests infinite loop calculating scroll snap point offsets.&quot;);
-
-        var lockUpSnapCoordinate = document.getElementById('lockUpSnapCoordinate');
-        shouldBeEmptyString(&quot;lockUpSnapCoordinate.style['-webkit-scroll-snap-type']&quot;);
-        shouldBeEqualToString(&quot;window.getComputedStyle(lockUpSnapCoordinate).getPropertyValue('-webkit-scroll-snap-type')&quot;, &quot;mandatory&quot;);
-        shouldBeEmptyString(&quot;lockUpSnapCoordinate.style['-webkit-scroll-snap-points-x']&quot;);
-        shouldBeEqualToString(&quot;window.getComputedStyle(lockUpSnapCoordinate).getPropertyValue('-webkit-scroll-snap-points-x')&quot;, &quot;repeat(100%)&quot;);
-        shouldBeEmptyString(&quot;lockUpSnapCoordinate.style['-webkit-scroll-snap-points-y']&quot;);
-        shouldBeEqualToString(&quot;window.getComputedStyle(lockUpSnapCoordinate).getPropertyValue('-webkit-scroll-snap-points-y')&quot;, &quot;repeat(100%)&quot;);
-        shouldBeEmptyString(&quot;lockUpSnapCoordinate.style['-webkit-scroll-snap-destination']&quot;);
-        shouldBeEqualToString(&quot;window.getComputedStyle(lockUpSnapCoordinate).getPropertyValue('-webkit-scroll-snap-destination')&quot;, &quot;100% 100%&quot;);
-        shouldBeEmptyString(&quot;lockUpSnapCoordinate.style['-webkit-scroll-snap-coordinate']&quot;);
-        shouldBeEqualToString(&quot;window.getComputedStyle(lockUpSnapCoordinate).getPropertyValue('-webkit-scroll-snap-coordinate')&quot;, &quot;none&quot;);
-        &lt;/script&gt;
-        &lt;script src=&quot;../../../resources/js-test-post.js&quot;&gt;&lt;/script&gt;
-    &lt;/body&gt;
-&lt;/html&gt;
-
</del></span></pre></div>
<a id="trunkLayoutTeststileddrawingscrollingscrollsnapscrollsnapmandatory2doverflowhtml"></a>
<div class="modfile"><h4>Modified: trunk/LayoutTests/tiled-drawing/scrolling/scroll-snap/scroll-snap-mandatory-2d-overflow.html (210023 => 210024)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/tiled-drawing/scrolling/scroll-snap/scroll-snap-mandatory-2d-overflow.html        2016-12-20 18:26:10 UTC (rev 210023)
+++ trunk/LayoutTests/tiled-drawing/scrolling/scroll-snap/scroll-snap-mandatory-2d-overflow.html        2016-12-20 18:44:38 UTC (rev 210024)
</span><span class="lines">@@ -8,8 +8,7 @@
</span><span class="cx">                 overflow: scroll;
</span><span class="cx">                 white-space: nowrap;
</span><span class="cx">                 -webkit-overflow-scrolling: touch;
</span><del>-                -webkit-scroll-snap-type: mandatory;
-                -webkit-scroll-snap-destination: 0 0;
</del><ins>+                scroll-snap-type: both mandatory;
</ins><span class="cx">                 line-height: 0px;
</span><span class="cx">             }
</span><span class="cx"> 
</span><span class="lines">@@ -17,7 +16,7 @@
</span><span class="cx">                 width: 400px;
</span><span class="cx">                 height: 400px;
</span><span class="cx">                 display: inline-block;
</span><del>-                -webkit-scroll-snap-coordinate: 0 0;
</del><ins>+                scroll-snap-align: start;
</ins><span class="cx">                 background-color: red;
</span><span class="cx">                 margin: 0;
</span><span class="cx">                 padding: 0;
</span></span></pre></div>
<a id="trunkLayoutTeststileddrawingscrollingscrollsnapscrollsnapmandatorybordershtml"></a>
<div class="modfile"><h4>Modified: trunk/LayoutTests/tiled-drawing/scrolling/scroll-snap/scroll-snap-mandatory-borders.html (210023 => 210024)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/tiled-drawing/scrolling/scroll-snap/scroll-snap-mandatory-borders.html        2016-12-20 18:26:10 UTC (rev 210023)
+++ trunk/LayoutTests/tiled-drawing/scrolling/scroll-snap/scroll-snap-mandatory-borders.html        2016-12-20 18:44:38 UTC (rev 210024)
</span><span class="lines">@@ -13,8 +13,7 @@
</span><span class="cx">                 border-right: 9px solid black;
</span><span class="cx">                 margin-bottom: 2px;
</span><span class="cx">                 -webkit-overflow-scrolling: touch;
</span><del>-                -webkit-scroll-snap-points-x: repeat(100%);
-                -webkit-scroll-snap-type: mandatory;
</del><ins>+                scroll-snap-type: x mandatory;
</ins><span class="cx">             }
</span><span class="cx">             .horizontalGalleryDrawer {
</span><span class="cx">                 width: 1800px;
</span><span class="lines">@@ -32,8 +31,7 @@
</span><span class="cx">                 border-right: 9px solid black;
</span><span class="cx">                 margin-top: 2px;
</span><span class="cx">                 -webkit-overflow-scrolling: touch;
</span><del>-                -webkit-scroll-snap-points-y: repeat(100%);
-                -webkit-scroll-snap-type: mandatory;
</del><ins>+                scroll-snap-type: y mandatory;
</ins><span class="cx">             }
</span><span class="cx">             .verticalGalleryDrawer {
</span><span class="cx">                 width: 300px;
</span><span class="lines">@@ -43,6 +41,7 @@
</span><span class="cx">                 height: 300px;
</span><span class="cx">                 width: 300px;
</span><span class="cx">                 float: left;
</span><ins>+                scroll-snap-align: start;
</ins><span class="cx">             }
</span><span class="cx">             #itemH0, #itemV0 { background-color: red; }
</span><span class="cx">             #itemH1, #itemV1 { background-color: green; }
</span></span></pre></div>
<a id="trunkLayoutTeststileddrawingscrollingscrollsnapscrollsnapmandatorymainframehorizontalhtml"></a>
<div class="modfile"><h4>Modified: trunk/LayoutTests/tiled-drawing/scrolling/scroll-snap/scroll-snap-mandatory-mainframe-horizontal.html (210023 => 210024)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/tiled-drawing/scrolling/scroll-snap/scroll-snap-mandatory-mainframe-horizontal.html        2016-12-20 18:26:10 UTC (rev 210023)
+++ trunk/LayoutTests/tiled-drawing/scrolling/scroll-snap/scroll-snap-mandatory-mainframe-horizontal.html        2016-12-20 18:44:38 UTC (rev 210024)
</span><span class="lines">@@ -7,13 +7,13 @@
</span><span class="cx">                 height: 100vh;
</span><span class="cx">                 margin: 0;
</span><span class="cx">                 padding: 0;
</span><del>-                -webkit-scroll-snap-points-x: repeat(100vw);
-                -webkit-scroll-snap-type: mandatory;
</del><ins>+                scroll-snap-type: x mandatory;
</ins><span class="cx">             }
</span><span class="cx">             .colorBox {
</span><span class="cx">                 height: 100vh;
</span><span class="cx">                 width: 100vw;
</span><span class="cx">                 float: left;
</span><ins>+                scroll-snap-align: start;
</ins><span class="cx">             }
</span><span class="cx">             #item0 { background-color: red; }
</span><span class="cx">             #item1 { background-color: green; }
</span></span></pre></div>
<a id="trunkLayoutTeststileddrawingscrollingscrollsnapscrollsnapmandatorymainframeslowhorizontalhtml"></a>
<div class="modfile"><h4>Modified: trunk/LayoutTests/tiled-drawing/scrolling/scroll-snap/scroll-snap-mandatory-mainframe-slow-horizontal.html (210023 => 210024)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/tiled-drawing/scrolling/scroll-snap/scroll-snap-mandatory-mainframe-slow-horizontal.html        2016-12-20 18:26:10 UTC (rev 210023)
+++ trunk/LayoutTests/tiled-drawing/scrolling/scroll-snap/scroll-snap-mandatory-mainframe-slow-horizontal.html        2016-12-20 18:44:38 UTC (rev 210024)
</span><span class="lines">@@ -7,13 +7,13 @@
</span><span class="cx">                 height: 100vh;
</span><span class="cx">                 margin: 0;
</span><span class="cx">                 padding: 0;
</span><del>-                -webkit-scroll-snap-points-x: repeat(100vw);
-                -webkit-scroll-snap-type: mandatory;
</del><ins>+                scroll-snap-type: x mandatory;
</ins><span class="cx">             }
</span><span class="cx">             .colorBox {
</span><span class="cx">                 height: 100vh;
</span><span class="cx">                 width: 100vw;
</span><span class="cx">                 float: left;
</span><ins>+                scroll-snap-align: start;
</ins><span class="cx">             }
</span><span class="cx">             #item0 { background-color: red; background-image: url('../../resources/green-blue.png'); background-attachment: fixed;}
</span><span class="cx">             #item1 { background-color: green; }
</span></span></pre></div>
<a id="trunkLayoutTeststileddrawingscrollingscrollsnapscrollsnapmandatorymainframeslowverticalhtml"></a>
<div class="modfile"><h4>Modified: trunk/LayoutTests/tiled-drawing/scrolling/scroll-snap/scroll-snap-mandatory-mainframe-slow-vertical.html (210023 => 210024)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/tiled-drawing/scrolling/scroll-snap/scroll-snap-mandatory-mainframe-slow-vertical.html        2016-12-20 18:26:10 UTC (rev 210023)
+++ trunk/LayoutTests/tiled-drawing/scrolling/scroll-snap/scroll-snap-mandatory-mainframe-slow-vertical.html        2016-12-20 18:44:38 UTC (rev 210024)
</span><span class="lines">@@ -7,13 +7,13 @@
</span><span class="cx">                 height: 600vh;
</span><span class="cx">                 margin: 0;
</span><span class="cx">                 padding: 0;
</span><del>-                -webkit-scroll-snap-points-y: repeat(100vh);
-                -webkit-scroll-snap-type: mandatory;
</del><ins>+                scroll-snap-type: y mandatory;
</ins><span class="cx">             }
</span><span class="cx">             .colorBox {
</span><span class="cx">                 height: 100vh;
</span><span class="cx">                 width: 100vw;
</span><span class="cx">                 float: left;
</span><ins>+                scroll-snap-align: start;
</ins><span class="cx">             }
</span><span class="cx">             #item0 { background-color: red; background-image: url('../../resources/green-blue.png'); background-attachment: fixed;}
</span><span class="cx">             #item1 { background-color: green; }
</span></span></pre></div>
<a id="trunkLayoutTeststileddrawingscrollingscrollsnapscrollsnapmandatorymainframeverticalthenhorizontalhtml"></a>
<div class="modfile"><h4>Modified: trunk/LayoutTests/tiled-drawing/scrolling/scroll-snap/scroll-snap-mandatory-mainframe-vertical-then-horizontal.html (210023 => 210024)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/tiled-drawing/scrolling/scroll-snap/scroll-snap-mandatory-mainframe-vertical-then-horizontal.html        2016-12-20 18:26:10 UTC (rev 210023)
+++ trunk/LayoutTests/tiled-drawing/scrolling/scroll-snap/scroll-snap-mandatory-mainframe-vertical-then-horizontal.html        2016-12-20 18:44:38 UTC (rev 210024)
</span><span class="lines">@@ -7,13 +7,13 @@
</span><span class="cx">                 height: 600vh;
</span><span class="cx">                 margin: 0;
</span><span class="cx">                 padding: 0;
</span><del>-                -webkit-scroll-snap-points-y: repeat(100vh);
-                -webkit-scroll-snap-type: mandatory;
</del><ins>+                scroll-snap-type: y mandatory;
</ins><span class="cx">             }
</span><span class="cx">             .colorBox {
</span><span class="cx">                 height: 100vh;
</span><span class="cx">                 width: 100vw;
</span><span class="cx">                 float: left;
</span><ins>+                scroll-snap-align: start;
</ins><span class="cx">             }
</span><span class="cx">             #item0 { background-color: red; }
</span><span class="cx">             #item1 { background-color: green; }
</span></span></pre></div>
<a id="trunkLayoutTeststileddrawingscrollingscrollsnapscrollsnapmandatorymainframeverticalhtml"></a>
<div class="modfile"><h4>Modified: trunk/LayoutTests/tiled-drawing/scrolling/scroll-snap/scroll-snap-mandatory-mainframe-vertical.html (210023 => 210024)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/tiled-drawing/scrolling/scroll-snap/scroll-snap-mandatory-mainframe-vertical.html        2016-12-20 18:26:10 UTC (rev 210023)
+++ trunk/LayoutTests/tiled-drawing/scrolling/scroll-snap/scroll-snap-mandatory-mainframe-vertical.html        2016-12-20 18:44:38 UTC (rev 210024)
</span><span class="lines">@@ -7,13 +7,13 @@
</span><span class="cx">                 height: 600vh;
</span><span class="cx">                 margin: 0;
</span><span class="cx">                 padding: 0;
</span><del>-                -webkit-scroll-snap-points-y: repeat(100vh);
-                -webkit-scroll-snap-type: mandatory;
</del><ins>+                scroll-snap-type: y mandatory;
</ins><span class="cx">             }
</span><span class="cx">             .colorBox {
</span><span class="cx">                 height: 100vh;
</span><span class="cx">                 width: 100vw;
</span><span class="cx">                 float: left;
</span><ins>+                scroll-snap-align: start;
</ins><span class="cx">             }
</span><span class="cx">             #item0 { background-color: red; }
</span><span class="cx">             #item1 { background-color: green; }
</span></span></pre></div>
<a id="trunkLayoutTeststileddrawingscrollingscrollsnapscrollsnapmandatoryoverflowstatelesshtml"></a>
<div class="modfile"><h4>Modified: trunk/LayoutTests/tiled-drawing/scrolling/scroll-snap/scroll-snap-mandatory-overflow-stateless.html (210023 => 210024)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/tiled-drawing/scrolling/scroll-snap/scroll-snap-mandatory-overflow-stateless.html        2016-12-20 18:26:10 UTC (rev 210023)
+++ trunk/LayoutTests/tiled-drawing/scrolling/scroll-snap/scroll-snap-mandatory-overflow-stateless.html        2016-12-20 18:44:38 UTC (rev 210024)
</span><span class="lines">@@ -8,12 +8,12 @@
</span><span class="cx">                 display: inline-block;
</span><span class="cx">                 overflow-x: hidden;
</span><span class="cx">                 overflow-y: auto;
</span><del>-                -webkit-scroll-snap-points-y: repeat(400px);
-                -webkit-scroll-snap-type: mandatory;
</del><ins>+                scroll-snap-type: y mandatory;
</ins><span class="cx">             }
</span><span class="cx">             .colorBox {
</span><span class="cx">                 height: 400px;
</span><span class="cx">                 width: 400px;
</span><ins>+                scroll-snap-align: start;
</ins><span class="cx">             }
</span><span class="cx">             #item0, #item2 { background-color: red; }
</span><span class="cx">             #item1 { background-color: green; }
</span></span></pre></div>
<a id="trunkLayoutTeststileddrawingscrollingscrollsnapscrollsnapmandatoryoverflowhtml"></a>
<div class="modfile"><h4>Modified: trunk/LayoutTests/tiled-drawing/scrolling/scroll-snap/scroll-snap-mandatory-overflow.html (210023 => 210024)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/tiled-drawing/scrolling/scroll-snap/scroll-snap-mandatory-overflow.html        2016-12-20 18:26:10 UTC (rev 210023)
+++ trunk/LayoutTests/tiled-drawing/scrolling/scroll-snap/scroll-snap-mandatory-overflow.html        2016-12-20 18:44:38 UTC (rev 210024)
</span><span class="lines">@@ -8,8 +8,7 @@
</span><span class="cx">                 overflow-y: hidden;
</span><span class="cx">                 overflow-x: auto;
</span><span class="cx">                 margin-bottom: 2px;
</span><del>-                -webkit-scroll-snap-points-x: repeat(100%);
-                -webkit-scroll-snap-type: mandatory;
</del><ins>+                scroll-snap-type: x mandatory;
</ins><span class="cx">             }
</span><span class="cx">             .horizontalGalleryDrawer {
</span><span class="cx">                 width: 1800px;
</span><span class="lines">@@ -22,8 +21,7 @@
</span><span class="cx">                 overflow-x: hidden;
</span><span class="cx">                 overflow-y: auto;
</span><span class="cx">                 margin-top: 2px;
</span><del>-                -webkit-scroll-snap-points-y: repeat(100%);
-                -webkit-scroll-snap-type: mandatory;
</del><ins>+                scroll-snap-type: y mandatory;
</ins><span class="cx">             }
</span><span class="cx">             .verticalGalleryDrawer {
</span><span class="cx">                 width: 300px;
</span><span class="lines">@@ -33,6 +31,7 @@
</span><span class="cx">                 height: 300px;
</span><span class="cx">                 width: 300px;
</span><span class="cx">                 float: left;
</span><ins>+                scroll-snap-align: start;
</ins><span class="cx">             }
</span><span class="cx">             #itemH0, #itemV0 { background-color: red; }
</span><span class="cx">             #itemH1, #itemV1 { background-color: green; }
</span></span></pre></div>
<a id="trunkLayoutTeststileddrawingscrollingscrollsnapscrollsnapmandatorypaddinghtml"></a>
<div class="modfile"><h4>Modified: trunk/LayoutTests/tiled-drawing/scrolling/scroll-snap/scroll-snap-mandatory-padding.html (210023 => 210024)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/tiled-drawing/scrolling/scroll-snap/scroll-snap-mandatory-padding.html        2016-12-20 18:26:10 UTC (rev 210023)
+++ trunk/LayoutTests/tiled-drawing/scrolling/scroll-snap/scroll-snap-mandatory-padding.html        2016-12-20 18:44:38 UTC (rev 210024)
</span><span class="lines">@@ -12,8 +12,7 @@
</span><span class="cx">                 padding-top: 15px;
</span><span class="cx">                 padding-bottom: 9px;
</span><span class="cx">                 margin-bottom: 2px;
</span><del>-                -webkit-scroll-snap-points-x: repeat(100%);
-                -webkit-scroll-snap-type: mandatory;
</del><ins>+                scroll-snap-type: x mandatory;
</ins><span class="cx">             }
</span><span class="cx">             .horizontalGalleryDrawer {
</span><span class="cx">                 width: 1800px;
</span><span class="lines">@@ -30,8 +29,7 @@
</span><span class="cx">                 padding-top: 15px;
</span><span class="cx">                 padding-bottom: 9px;
</span><span class="cx">                 margin-top: 2px;
</span><del>-                -webkit-scroll-snap-points-y: repeat(100%);
-                -webkit-scroll-snap-type: mandatory;
</del><ins>+                scroll-snap-type: y mandatory;
</ins><span class="cx">             }
</span><span class="cx">             .verticalGalleryDrawer {
</span><span class="cx">                 width: 300px;
</span><span class="lines">@@ -41,6 +39,7 @@
</span><span class="cx">                 height: 300px;
</span><span class="cx">                 width: 300px;
</span><span class="cx">                 float: left;
</span><ins>+                scroll-snap-align: start;
</ins><span class="cx">             }
</span><span class="cx">             #itemH0, #itemV0 { background-color: red; }
</span><span class="cx">             #itemH1, #itemV1 { background-color: green; }
</span><span class="lines">@@ -128,10 +127,10 @@
</span><span class="cx">             var style = window.getComputedStyle(divTarget, null);
</span><span class="cx"> 
</span><span class="cx">             var actualPosition = divTarget.scrollTop;
</span><del>-            var expectedPosition = divTarget.clientHeight - style.getPropertyValue('padding-top').replace(&quot;px&quot;, &quot;&quot;) - style.getPropertyValue('padding-bottom').replace(&quot;px&quot;, &quot;&quot;);
</del><ins>+            var expectedPosition = 300 + parseInt(style.paddingTop.replace(&quot;px&quot;, &quot;&quot;));
</ins><span class="cx">             if (targetLabel == 'horizontalTarget') {
</span><span class="cx">                 actualPosition = divTarget.scrollLeft;
</span><del>-                expectedPosition = divTarget.clientWidth - style.getPropertyValue('padding-right').replace(&quot;px&quot;, &quot;&quot;) - style.getPropertyValue('padding-left').replace(&quot;px&quot;, &quot;&quot;);
</del><ins>+                expectedPosition = 300 + parseInt(style.paddingLeft.replace(&quot;px&quot;, &quot;&quot;));
</ins><span class="cx">             }
</span><span class="cx"> 
</span><span class="cx">             // The div should have scrolled (glided) to the next snap point.
</span></span></pre></div>
<a id="trunkLayoutTeststileddrawingscrollingscrollsnapscrollsnapmandatoryrotatedhtml"></a>
<div class="modfile"><h4>Modified: trunk/LayoutTests/tiled-drawing/scrolling/scroll-snap/scroll-snap-mandatory-rotated.html (210023 => 210024)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/tiled-drawing/scrolling/scroll-snap/scroll-snap-mandatory-rotated.html        2016-12-20 18:26:10 UTC (rev 210023)
+++ trunk/LayoutTests/tiled-drawing/scrolling/scroll-snap/scroll-snap-mandatory-rotated.html        2016-12-20 18:44:38 UTC (rev 210024)
</span><span class="lines">@@ -9,8 +9,7 @@
</span><span class="cx">                 overflow-x: auto;
</span><span class="cx">                 border: 2px solid black;
</span><span class="cx">                 margin-bottom: 15px;
</span><del>-                -webkit-scroll-snap-points-x: repeat(100%);
-                -webkit-scroll-snap-type: mandatory;
</del><ins>+                scroll-snap-type: x mandatory;
</ins><span class="cx">             }
</span><span class="cx">             .horizontalGalleryDrawer {
</span><span class="cx">                 width: 1800px;
</span><span class="lines">@@ -24,8 +23,7 @@
</span><span class="cx">                 overflow-y: auto;
</span><span class="cx">                 border: 2px solid black;
</span><span class="cx">                 margin-top: 15px;
</span><del>-                -webkit-scroll-snap-points-y: repeat(100%);
-                -webkit-scroll-snap-type: mandatory;
</del><ins>+                scroll-snap-type: y mandatory;
</ins><span class="cx">             }
</span><span class="cx">             .verticalGalleryDrawer {
</span><span class="cx">                 width: 300px;
</span><span class="lines">@@ -35,6 +33,7 @@
</span><span class="cx">                 height: 300px;
</span><span class="cx">                 width: 300px;
</span><span class="cx">                 float: left;
</span><ins>+                scroll-snap-align: start;
</ins><span class="cx">             }
</span><span class="cx">             #itemH0, #itemV0 { background-color: red; }
</span><span class="cx">             #itemH1, #itemV1 { background-color: green; }
</span></span></pre></div>
<a id="trunkLayoutTeststileddrawingscrollingscrollsnapscrollsnapscrollingjumpstotophtml"></a>
<div class="modfile"><h4>Modified: trunk/LayoutTests/tiled-drawing/scrolling/scroll-snap/scroll-snap-scrolling-jumps-to-top.html (210023 => 210024)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/tiled-drawing/scrolling/scroll-snap/scroll-snap-scrolling-jumps-to-top.html        2016-12-20 18:26:10 UTC (rev 210023)
+++ trunk/LayoutTests/tiled-drawing/scrolling/scroll-snap/scroll-snap-scrolling-jumps-to-top.html        2016-12-20 18:44:38 UTC (rev 210024)
</span><span class="lines">@@ -14,7 +14,6 @@
</span><span class="cx">                 overflow-x: hidden;
</span><span class="cx">                 overflow-y: auto;
</span><span class="cx">                 scroll-snap-type: y mandatory;
</span><del>-                -webkit-scroll-snap-type: mandatory;
</del><span class="cx">             }
</span><span class="cx"> 
</span><span class="cx">             .child {
</span><span class="lines">@@ -22,7 +21,6 @@
</span><span class="cx">                 width: 300px;
</span><span class="cx">                 float: left;
</span><span class="cx">                 scroll-snap-align: start;
</span><del>-                -webkit-scroll-snap-coordinate: 0 0;
</del><span class="cx">             }
</span><span class="cx">         &lt;/style&gt;
</span><span class="cx">         &lt;script&gt;
</span></span></pre></div>
<a id="trunkSourceWebCoreChangeLog"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/ChangeLog (210023 => 210024)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/ChangeLog        2016-12-20 18:26:10 UTC (rev 210023)
+++ trunk/Source/WebCore/ChangeLog        2016-12-20 18:44:38 UTC (rev 210024)
</span><span class="lines">@@ -1,3 +1,294 @@
</span><ins>+2016-12-20  Wenson Hsieh  &lt;wenson_hsieh@apple.com&gt;
+
+        Implement the updated port/area-based Scroll Snap Module Level 1 Spec
+        https://bugs.webkit.org/show_bug.cgi?id=165317
+        &lt;rdar://problem/29490956&gt;
+
+        Reviewed by Dean Jackson.
+
+        Implements the changes drafted in the latest iteration of the Scroll Snap Module Level 1 spec, which uses a
+        snap-area and snap-port-based method for determining snap positions in a scroll snapping container.
+        Additionally, removes the now-obsolete and prefixed implementation of the scroll snap spec and refactors all
+        affected layout tests to use the new CSS properties. Also adds new layout tests covering some behaviors detailed
+        in the new version of the spec, such as scroll snapping with transformed child elements.
+
+        See below for more detailed descriptions of the changes.
+
+        Tests: css3/scroll-snap/scroll-snap-2d-change-axis-type.html
+               css3/scroll-snap/scroll-snap-2d-offsets-computed-independently.html
+               css3/scroll-snap/scroll-snap-children-with-scroll-snap-margin.html
+               css3/scroll-snap/scroll-snap-children-with-transforms.html
+               css3/scroll-snap/scroll-snap-positions-mainframe.html
+               css3/scroll-snap/scroll-snap-positions-overflow-resize.html
+               css3/scroll-snap/scroll-snap-positions.html
+               css3/scroll-snap/scroll-snap-style-changed-align.html
+               css3/scroll-snap/scroll-snap-with-scroll-padding.html
+
+        * WebCore.xcodeproj/project.pbxproj:
+        * css/CSSCalculationValue.cpp:
+        (WebCore::hasDoubleValue):
+
+        Removed use of length repeat.
+
+        * css/CSSComputedStyleDeclaration.cpp:
+        (WebCore::valueForScrollSnapType):
+        (WebCore::valueForScrollSnapAlignment):
+        (WebCore::ComputedStyleExtractor::propertyValue):
+        (WebCore::scrollSnapDestination): Deleted.
+        (WebCore::scrollSnapPoints): Deleted.
+        (WebCore::scrollSnapCoordinates): Deleted.
+
+        Removed helper functions used to create CSS values for scroll snap coordinates and destination, and added
+        helpers for computed scroll snap type (a combination of axis and strictness values) as well as scroll snap align
+        (an alignment value per axis).
+
+        * css/CSSPrimitiveValue.cpp:
+        (WebCore::isValidCSSUnitTypeForDoubleConversion):
+        (WebCore::isStringType):
+        (WebCore::CSSPrimitiveValue::cleanup):
+        (WebCore::CSSPrimitiveValue::formatNumberForCustomCSSText):
+        (WebCore::CSSPrimitiveValue::cloneForCSSOM):
+        (WebCore::CSSPrimitiveValue::equals):
+
+        Removed usages of the length repeat type, since repeat(*) is no longer being used anywhere.
+
+        * css/CSSPrimitiveValue.h:
+        * css/CSSPrimitiveValueMappings.h:
+        (WebCore::CSSPrimitiveValue::CSSPrimitiveValue):
+        (WebCore::CSSPrimitiveValue::operator ScrollSnapStrictness):
+        (WebCore::CSSPrimitiveValue::operator ScrollSnapAxis):
+        (WebCore::CSSPrimitiveValue::operator ScrollSnapAxisAlignType):
+        (WebCore::CSSPrimitiveValue::operator ScrollSnapType): Deleted.
+
+        Added CSSPrimitiveValue mappings to ScrollSnapAxisAlignType, ScrollSnapStrictness, and ScrollSnapAxis. Removed
+        the old ScrollSnapType mapping.
+
+        * css/CSSProperties.json:
+
+        Replaced the old scroll snap CSS properties with the new ones. Note that scroll-snap-margin and scroll-padding
+        have 4 shorthands each, for the individual top/bottom/left/right values.
+
+        * css/CSSValueKeywords.in:
+
+        Added CSS keywords {x, y}, which are necessary to support the new scroll snapping properties.
+
+        * css/LengthRepeat.h: Removed.
+
+        Removed LengthRepeat entirely. This represented the `repeat(&lt;length&gt;)` CSS value, which was only used for the
+        scroll-snap-points-x and scroll-snap-points-y values.
+
+        * css/StyleBuilderConverter.h:
+        (WebCore::StyleBuilderConverter::convertScrollSnapType):
+        (WebCore::StyleBuilderConverter::convertScrollSnapAlign):
+        (WebCore::StyleBuilderConverter::parseSnapCoordinate): Deleted.
+        (WebCore::StyleBuilderConverter::convertScrollSnapPoints): Deleted.
+        (WebCore::StyleBuilderConverter::convertSnapCoordinatePair): Deleted.
+        (WebCore::StyleBuilderConverter::convertScrollSnapCoordinates): Deleted.
+
+        Added helper functions to convert scroll snap type and scroll snap alignment from parsed CSS values to their
+        primary representation in WebCore as ScrollSnapType and ScrollSnapAlign. These methods assume that the given
+        CSS values have successfully cleared the parsing step and are represented as CSSValueLists or length 1 or 2.
+
+        * css/StyleBuilderCustom.h:
+        (WebCore::StyleBuilderCustom::applyInitialWebkitScrollSnapPointsX): Deleted.
+        (WebCore::StyleBuilderCustom::applyInheritWebkitScrollSnapPointsX): Deleted.
+        (WebCore::StyleBuilderCustom::applyInitialWebkitScrollSnapPointsY): Deleted.
+        (WebCore::StyleBuilderCustom::applyInheritWebkitScrollSnapPointsY): Deleted.
+        * css/StyleProperties.cpp:
+        (WebCore::StyleProperties::getPropertyValue):
+        (WebCore::StyleProperties::asText):
+
+        Adds support for the scroll-snap-margin and scroll-padding.
+
+        * css/parser/CSSParser.cpp:
+        (WebCore::isValidKeywordPropertyAndValue):
+        (WebCore::CSSParser::parseValue):
+        (WebCore::isScrollSnapAxisAlign):
+        (WebCore::isScrollSnapStrictness):
+        (WebCore::CSSParser::parseScrollSnapAlign):
+        (WebCore::CSSParser::parseScrollSnapType):
+        (WebCore::CSSParser::parseNonElementSnapPoints): Deleted.
+        (WebCore::CSSParser::parseScrollSnapPositions): Deleted.
+        (WebCore::CSSParser::parseScrollSnapDestination): Deleted.
+        (WebCore::CSSParser::parseScrollSnapCoordinate): Deleted.
+        * css/parser/CSSParser.h:
+
+        Removed references to LengthRepeat, and added support for parsing new scroll snapping properties. Scroll snap
+        margin and scroll padding, along with their shorthands, are parsed using the same helper functions as normal
+        margin and padding. For type and align, I added new helper functions that build up lists of 1 or 2
+        CSSPrimitiveValues for each of the properties.
+
+        Parsing scroll-snap-align is straightforward -- we either have one or two values in the set {none, start,
+        center, end}. For scroll-snap-type, we allow a single axis value {x, y, inline, block, both}, or a single
+        strictness value {none, proximity, mandatory}, or an axis value followed by a non-'none' strictness (i.e. either
+        proximity or mandatory).
+
+        * css/parser/CSSParserFastPaths.cpp:
+        (WebCore::CSSParserFastPaths::isValidKeywordPropertyAndValue):
+        (WebCore::CSSParserFastPaths::isKeywordPropertyID):
+        * css/parser/CSSParserValues.cpp:
+        (WebCore::CSSParserValue::createCSSValue):
+
+        Removed references to LengthRepeat.
+
+        * css/parser/CSSPropertyParser.cpp:
+        (WebCore::CSSPropertyParser::parseSingleValue):
+        (WebCore::CSSPropertyParser::parseShorthand):
+        (WebCore::consumeSnapPointCoordinateList): Deleted.
+        (WebCore::consumeScrollSnapCoordinate): Deleted.
+        (WebCore::consumeScrollSnapDestination): Deleted.
+        (WebCore::consumeScrollSnapPoints): Deleted.
+        (WebCore::consumeScrollSnapAlign):
+        (WebCore::consumeScrollSnapType):
+        (WebCore::CSSPropertyParser::parseSingleValue):
+
+        Added parsing for the longhand properties of scroll-snap-margin and scroll-padding, which use the existing
+        consumeLength and consumeLengthOrPercent helpers, respectively. Removed code for parsing scroll snap
+        coordinates, destinations and points. Added parsing logic for align and type.
+
+        * page/scrolling/AxisScrollSnapOffsets.cpp:
+        (WebCore::computeScrollSnapPortOrAreaRect):
+        (WebCore::computeScrollSnapAlignOffset):
+        (WebCore::snapOffsetsToString):
+        (WebCore::snapPortOrAreaToString):
+        (WebCore::updateSnapOffsetsForScrollableArea):
+        (WebCore::appendChildSnapOffsets): Deleted.
+        (WebCore::destinationOffsetForViewSize): Deleted.
+        (WebCore::updateFromStyle): Deleted.
+        (WebCore::styleUsesElements): Deleted.
+
+        Overhauled updateSnapOffsetsForScrollableArea to work with the new scroll snapping model. In the new way of
+        computing scroll snap offsets, we:
+
+        Compute the scroll container's scroll snap port, which is the padding box inset by the scroll padding
+        For each child with snap positions (i.e. scroll-snap-align is not none on both axes)
+          Compute the child's scroll snap area, which is the bounding box of the transformed border box
+            If the container snaps along the horizontal axis and the snap area contributes a horizontal snap offset:
+              Emit the distance from the alignment offset in the horizontal of the snap port to the corresponding offset
+              in the snap area as a snap position.
+            If the container snaps along the vertical axis and the snap area contributes a vertical snap offset:
+              Emit the distance from the alignment offset in the vertical of the snap port to the corresponding offset
+              in the snap area as a snap position.
+        For the snap offsets in each axis, if there is at least one snap offset:
+          Clamp the offsets to the min and max scroll offsets
+          Ensure that the offsets are sorted and do not contain duplicated offsets
+
+        * platform/cocoa/ScrollController.mm:
+        (WebCore::ScrollController::updateScrollSnapState):
+
+        Clear out the ScrollController's snap offsets and state along an axis when its ScrollableArea no longer has snap
+        offsets in that axis.
+
+        * rendering/RenderBox.cpp:
+        (WebCore::RenderBox::styleWillChange):
+        (WebCore::RenderBox::willBeRemovedFromTree):
+        * rendering/RenderLayerModelObject.cpp:
+        (WebCore::scrollSnapContainerRequiresUpdateForStyleUpdate):
+        (WebCore::RenderLayerModelObject::styleDidChange):
+        * rendering/RenderView.cpp:
+        (WebCore::RenderView::registerBoxWithScrollSnapPositions):
+        (WebCore::RenderView::unregisterBoxWithScrollSnapPositions):
+        (WebCore::RenderView::registerBoxWithScrollSnapCoordinates): Deleted.
+        (WebCore::RenderView::unregisterBoxWithScrollSnapCoordinates): Deleted.
+        * rendering/RenderView.h:
+
+        Tweaked the scroll snap child registration logic. registerBoxWithScrollSnapCoordinates is renamed to
+        unregisterBoxWithScrollSnapPositions, since the notion of scroll snap coordinates no longer exists, and instead
+        of checking if the list of scroll snap coordinates is empty for the absence of scroll positions, we instead
+        check for a computed scroll snap align that is not none on both axes.
+
+        * rendering/style/RenderStyle.cpp:
+        (WebCore::RenderStyle::initialScrollSnapType):
+        (WebCore::RenderStyle::initialScrollSnapAlign):
+        (WebCore::RenderStyle::scrollSnapArea):
+        (WebCore::RenderStyle::scrollSnapPort):
+        (WebCore::RenderStyle::scrollSnapType):
+        (WebCore::RenderStyle::scrollPadding):
+        (WebCore::RenderStyle::scrollPaddingTop):
+        (WebCore::RenderStyle::scrollPaddingBottom):
+        (WebCore::RenderStyle::scrollPaddingLeft):
+        (WebCore::RenderStyle::scrollPaddingRight):
+        (WebCore::RenderStyle::scrollSnapAlign):
+        (WebCore::RenderStyle::scrollSnapMargin):
+        (WebCore::RenderStyle::scrollSnapMarginTop):
+        (WebCore::RenderStyle::scrollSnapMarginBottom):
+        (WebCore::RenderStyle::scrollSnapMarginLeft):
+        (WebCore::RenderStyle::scrollSnapMarginRight):
+        (WebCore::RenderStyle::setScrollSnapType):
+        (WebCore::RenderStyle::setScrollPaddingTop):
+        (WebCore::RenderStyle::setScrollPaddingBottom):
+        (WebCore::RenderStyle::setScrollPaddingLeft):
+        (WebCore::RenderStyle::setScrollPaddingRight):
+        (WebCore::RenderStyle::setScrollSnapAlign):
+        (WebCore::RenderStyle::setScrollSnapMarginTop):
+        (WebCore::RenderStyle::setScrollSnapMarginBottom):
+        (WebCore::RenderStyle::setScrollSnapMarginLeft):
+        (WebCore::RenderStyle::setScrollSnapMarginRight):
+        (WebCore::RenderStyle::initialScrollSnapDestination): Deleted.
+        (WebCore::RenderStyle::initialScrollSnapCoordinates): Deleted.
+        (WebCore::RenderStyle::scrollSnapPointsX): Deleted.
+        (WebCore::RenderStyle::scrollSnapPointsY): Deleted.
+        (WebCore::RenderStyle::scrollSnapDestination): Deleted.
+        (WebCore::RenderStyle::scrollSnapCoordinates): Deleted.
+        (WebCore::RenderStyle::setScrollSnapPointsX): Deleted.
+        (WebCore::RenderStyle::setScrollSnapPointsY): Deleted.
+        (WebCore::RenderStyle::setScrollSnapDestination): Deleted.
+        (WebCore::RenderStyle::setScrollSnapCoordinates): Deleted.
+        * rendering/style/RenderStyle.h:
+        (WebCore::RenderStyle::initialScrollSnapMargin):
+        (WebCore::RenderStyle::initialScrollPadding):
+        (WebCore::RenderStyle::scrollSnapType): Deleted.
+        (WebCore::RenderStyle::setScrollSnapType): Deleted.
+        (WebCore::RenderStyle::initialScrollSnapType): Deleted.
+        (WebCore::RenderStyle::initialScrollSnapPointsX): Deleted.
+        (WebCore::RenderStyle::initialScrollSnapPointsY): Deleted.
+
+        Added boilerplate code for returning various new scroll snap style properties, and removed similar code for
+        handling the old scroll snap properties.
+
+        * rendering/style/RenderStyleConstants.h:
+
+        Added three new enum classes:
+        - ScrollSnapStrictness represents the strictness of scroll snapping along one or both axes
+        - ScrollSnapAxis designates the axes along which scroll snapping should occur
+        - ScrollSnapAxisAlignType indicates which offsets along the x or y axes of the snap port and snap area should be
+          used to compute the snap position emitted by a snap area.
+
+        * rendering/style/StyleRareNonInheritedData.cpp:
+        (WebCore::StyleRareNonInheritedData::StyleRareNonInheritedData):
+        (WebCore::StyleRareNonInheritedData::operator==):
+        * rendering/style/StyleRareNonInheritedData.h:
+
+        Replaces the StyleScrollSnapPoints object (which, confusingly, was in charge of storing both the scroll
+        container's and child elements' scroll snap styles) with StyleScrollSnapPort and StyleScrollSnapArea objects,
+        which keep track of the style properties on the scroll container and the child element, respectively.
+
+        * rendering/style/StyleScrollSnapPoints.h:
+        (WebCore::operator==):
+        (WebCore::StyleScrollSnapPort::copy):
+        (WebCore::StyleScrollSnapPort::StyleScrollSnapPort):
+        (WebCore::StyleScrollSnapArea::copy):
+        (WebCore::StyleScrollSnapArea::StyleScrollSnapArea):
+        * rendering/style/StyleScrollSnapping.h: Added.
+        (WebCore::operator!=):
+        (WebCore::StyleScrollSnapPort::create):
+        (WebCore::StyleScrollSnapArea::create):
+        (WebCore::StyleScrollSnapArea::hasSnapPosition):
+
+        Overhauled StyleScrollSnapPoints, breaking the logic here into two classes: StyleScrollSnapPort for the scroll
+        container, handling the properties `scroll-snap-type` and `scroll-padding` and StyleScrollSnapArea for child
+        elements, handling the properties `scroll-snap-align` and `scroll-snap-margin`. The ScrollSnapType itself is
+        composed of an axis value and a strictness, while a ScrollSnapAlign keeps track of the alignment modes in each
+        axis. By default, these are initialized to {Both, None} and {None, None}, respectively. The rest of the logic is
+        boilerplate code for comparing these style objects to one another and copying style representations.
+
+        * testing/Internals.cpp:
+        (WebCore::Internals::scrollSnapOffsets):
+
+        Perform a layout on the document if needed before returning the list of computed snap offsets. The absence of
+        this layout pass was causing some layout tests in css3/scroll-snap/ to flake when testing that programmatic
+        changes to the scroll snap style properties change the computed snap offsets.
+
</ins><span class="cx"> 2016-12-19  Dean Jackson  &lt;dino@apple.com&gt;
</span><span class="cx"> 
</span><span class="cx">         Use ENABLE() in place of ENABLE_CSS_SELECTORS_LEVEL4
</span></span></pre></div>
<a id="trunkSourceWebCoreWebCorexcodeprojprojectpbxproj"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/WebCore.xcodeproj/project.pbxproj (210023 => 210024)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/WebCore.xcodeproj/project.pbxproj        2016-12-20 18:26:10 UTC (rev 210023)
+++ trunk/Source/WebCore/WebCore.xcodeproj/project.pbxproj        2016-12-20 18:44:38 UTC (rev 210024)
</span><span class="lines">@@ -6488,7 +6488,6 @@
</span><span class="cx">                 F3D4C47812E07663003DA150 /* InspectorDOMDebuggerAgent.cpp in Sources */ = {isa = PBXBuildFile; fileRef = F3D4C47612E07663003DA150 /* InspectorDOMDebuggerAgent.cpp */; };
</span><span class="cx">                 F3D4C47912E07663003DA150 /* InspectorDOMDebuggerAgent.h in Headers */ = {isa = PBXBuildFile; fileRef = F3D4C47712E07663003DA150 /* InspectorDOMDebuggerAgent.h */; };
</span><span class="cx">                 F40EA8AB1B867E4400CE5581 /* NSScrollingInputFilterSPI.h in Headers */ = {isa = PBXBuildFile; fileRef = F40EA8AA1B867D6500CE5581 /* NSScrollingInputFilterSPI.h */; settings = {ATTRIBUTES = (Private, ); }; };
</span><del>-                F42FFB461984B71600F6837F /* LengthRepeat.h in Headers */ = {isa = PBXBuildFile; fileRef = F42FFB451984B71600F6837F /* LengthRepeat.h */; };
</del><span class="cx">                 F433E9031DBBDBA200EF0D14 /* StaticPasteboard.h in Headers */ = {isa = PBXBuildFile; fileRef = F433E9021DBBDBA200EF0D14 /* StaticPasteboard.h */; settings = {ATTRIBUTES = (Private, ); }; };
</span><span class="cx">                 F433E9051DBBDFCA00EF0D14 /* StaticPasteboard.cpp in Sources */ = {isa = PBXBuildFile; fileRef = F433E9041DBBDBC200EF0D14 /* StaticPasteboard.cpp */; };
</span><span class="cx">                 F44EBBD91DB5D21400277334 /* StaticRange.h in Headers */ = {isa = PBXBuildFile; fileRef = F44EBBD81DB5D21400277334 /* StaticRange.h */; settings = {ATTRIBUTES = (Private, ); }; };
</span><span class="lines">@@ -14524,7 +14523,6 @@
</span><span class="cx">                 F3D4C47612E07663003DA150 /* InspectorDOMDebuggerAgent.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = InspectorDOMDebuggerAgent.cpp; sourceTree = &quot;&lt;group&gt;&quot;; };
</span><span class="cx">                 F3D4C47712E07663003DA150 /* InspectorDOMDebuggerAgent.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = InspectorDOMDebuggerAgent.h; sourceTree = &quot;&lt;group&gt;&quot;; };
</span><span class="cx">                 F40EA8AA1B867D6500CE5581 /* NSScrollingInputFilterSPI.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = NSScrollingInputFilterSPI.h; sourceTree = &quot;&lt;group&gt;&quot;; };
</span><del>-                F42FFB451984B71600F6837F /* LengthRepeat.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = LengthRepeat.h; sourceTree = &quot;&lt;group&gt;&quot;; };
</del><span class="cx">                 F433E9021DBBDBA200EF0D14 /* StaticPasteboard.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = StaticPasteboard.h; sourceTree = &quot;&lt;group&gt;&quot;; };
</span><span class="cx">                 F433E9041DBBDBC200EF0D14 /* StaticPasteboard.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = StaticPasteboard.cpp; sourceTree = &quot;&lt;group&gt;&quot;; };
</span><span class="cx">                 F44EBBD61DB5D1B600277334 /* StaticRange.idl */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = StaticRange.idl; sourceTree = &quot;&lt;group&gt;&quot;; };
</span><span class="lines">@@ -16069,6 +16067,7 @@
</span><span class="cx">                 1AF62EE214DA22A70041556C /* mac */ = {
</span><span class="cx">                         isa = PBXGroup;
</span><span class="cx">                         children = (
</span><ins>+                                517DEEE31DE94ADC00B91644 /* ScrollingMomentumCalculatorMac.mm */,
</ins><span class="cx">                                 9391A990162746CB00297330 /* ScrollingCoordinatorMac.h */,
</span><span class="cx">                                 1AF62EE314DA22A70041556C /* ScrollingCoordinatorMac.mm */,
</span><span class="cx">                                 517DEEE71DE94B0800B91644 /* ScrollingMomentumCalculatorMac.h */,
</span><span class="lines">@@ -16081,6 +16080,7 @@
</span><span class="cx">                                 93C4A4141629DF5A00C3EB6E /* ScrollingTreeFrameScrollingNodeMac.mm */,
</span><span class="cx">                                 0FE5806119327A6200DE32EB /* ScrollingTreeMac.cpp */,
</span><span class="cx">                                 0FE5806219327A6200DE32EB /* ScrollingTreeMac.h */,
</span><ins>+                                517DEEE71DE94B0800B91644 /* ScrollingMomentumCalculatorMac.h */,
</ins><span class="cx">                                 0FB88908167D2FA10010CDA5 /* ScrollingTreeStickyNode.h */,
</span><span class="cx">                                 0FB88909167D2FA10010CDA5 /* ScrollingTreeStickyNode.mm */,
</span><span class="cx">                         );
</span><span class="lines">@@ -23592,7 +23592,6 @@
</span><span class="cx">                                 4A9CC81F16BF9BB400EC645A /* InspectorCSSOMWrappers.h */,
</span><span class="cx">                                 E55F4979151B888000BB67DB /* LengthFunctions.cpp */,
</span><span class="cx">                                 E5BA7D62151437CA00FE1E3F /* LengthFunctions.h */,
</span><del>-                                F42FFB451984B71600F6837F /* LengthRepeat.h */,
</del><span class="cx">                                 93CA4C9A09DF93FA00DF8677 /* make-css-file-arrays.pl */,
</span><span class="cx">                                 93CA4C9B09DF93FA00DF8677 /* makeprop.pl */,
</span><span class="cx">                                 43B85ED018CBEACE00E31AF4 /* makeSelectorPseudoClassAndCompatibilityElementMap.py */,
</span><span class="lines">@@ -26759,7 +26758,6 @@
</span><span class="cx">                                 BCFF64910EAD15C200C1D6F7 /* LengthBox.h in Headers */,
</span><span class="cx">                                 E5BA7D63151437CA00FE1E3F /* LengthFunctions.h in Headers */,
</span><span class="cx">                                 0F8716701C869D83004FF0DE /* LengthPoint.h in Headers */,
</span><del>-                                F42FFB461984B71600F6837F /* LengthRepeat.h in Headers */,
</del><span class="cx">                                 BCFF64920EAD15C200C1D6F7 /* LengthSize.h in Headers */,
</span><span class="cx">                                 84730D911248F0B300D3A9C9 /* LightSource.h in Headers */,
</span><span class="cx">                                 B22279650D00BF220071B782 /* LinearGradientAttributes.h in Headers */,
</span></span></pre></div>
<a id="trunkSourceWebCorecssCSSCalculationValuecpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/css/CSSCalculationValue.cpp (210023 => 210024)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/css/CSSCalculationValue.cpp        2016-12-20 18:26:10 UTC (rev 210023)
+++ trunk/Source/WebCore/css/CSSCalculationValue.cpp        2016-12-20 18:44:38 UTC (rev 210024)
</span><span class="lines">@@ -138,9 +138,6 @@
</span><span class="cx">     case CSSPrimitiveValue::CSS_SHAPE:
</span><span class="cx">     case CSSPrimitiveValue::CSS_QUAD:
</span><span class="cx">     case CSSPrimitiveValue::CSS_QUIRKY_EMS:
</span><del>-#if ENABLE(CSS_SCROLL_SNAP)
-    case CSSPrimitiveValue::CSS_LENGTH_REPEAT:
-#endif
</del><span class="cx">     case CSSPrimitiveValue::CSS_CALC:
</span><span class="cx">     case CSSPrimitiveValue::CSS_CALC_PERCENTAGE_WITH_NUMBER:
</span><span class="cx">     case CSSPrimitiveValue::CSS_CALC_PERCENTAGE_WITH_LENGTH:
</span></span></pre></div>
<a id="trunkSourceWebCorecssCSSComputedStyleDeclarationcpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/css/CSSComputedStyleDeclaration.cpp (210023 => 210024)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/css/CSSComputedStyleDeclaration.cpp        2016-12-20 18:26:10 UTC (rev 210023)
+++ trunk/Source/WebCore/css/CSSComputedStyleDeclaration.cpp        2016-12-20 18:44:38 UTC (rev 210024)
</span><span class="lines">@@ -75,6 +75,7 @@
</span><span class="cx"> #include &quot;StylePropertyShorthandFunctions.h&quot;
</span><span class="cx"> #include &quot;StyleResolver.h&quot;
</span><span class="cx"> #include &quot;StyleScope.h&quot;
</span><ins>+#include &quot;StyleScrollSnapPoints.h&quot;
</ins><span class="cx"> #include &quot;Text.h&quot;
</span><span class="cx"> #include &quot;WebKitFontFamilyNames.h&quot;
</span><span class="cx"> #include &quot;WillChangeData.h&quot;
</span><span class="lines">@@ -91,11 +92,6 @@
</span><span class="cx"> #include &quot;DashboardRegion.h&quot;
</span><span class="cx"> #endif
</span><span class="cx"> 
</span><del>-#if ENABLE(CSS_SCROLL_SNAP)
-#include &quot;LengthRepeat.h&quot;
-#include &quot;StyleScrollSnapPoints.h&quot;
-#endif
-
</del><span class="cx"> #if ENABLE(CSS_ANIMATIONS_LEVEL_2)
</span><span class="cx"> #include &quot;AnimationTrigger.h&quot;
</span><span class="cx"> #endif
</span><span class="lines">@@ -242,11 +238,18 @@
</span><span class="cx">     CSSPropertyWordSpacing,
</span><span class="cx">     CSSPropertyWordWrap,
</span><span class="cx"> #if ENABLE(CSS_SCROLL_SNAP)
</span><del>-    CSSPropertyWebkitScrollSnapType,
-    CSSPropertyWebkitScrollSnapPointsX,
-    CSSPropertyWebkitScrollSnapPointsY,
-    CSSPropertyWebkitScrollSnapDestination,
-    CSSPropertyWebkitScrollSnapCoordinate,
</del><ins>+    CSSPropertyScrollSnapMargin,
+    CSSPropertyScrollSnapMarginLeft,
+    CSSPropertyScrollSnapMarginTop,
+    CSSPropertyScrollSnapMarginRight,
+    CSSPropertyScrollSnapMarginBottom,
+    CSSPropertyScrollPadding,
+    CSSPropertyScrollPaddingLeft,
+    CSSPropertyScrollPaddingTop,
+    CSSPropertyScrollPaddingRight,
+    CSSPropertyScrollPaddingBottom,
+    CSSPropertyScrollSnapType,
+    CSSPropertyScrollSnapAlign,
</ins><span class="cx"> #endif
</span><span class="cx">     CSSPropertyZIndex,
</span><span class="cx">     CSSPropertyZoom,
</span><span class="lines">@@ -1205,45 +1208,27 @@
</span><span class="cx"> }
</span><span class="cx"> 
</span><span class="cx"> #if ENABLE(CSS_SCROLL_SNAP)
</span><del>-static Ref&lt;CSSValueList&gt; scrollSnapDestination(const RenderStyle&amp; style, const LengthSize&amp; destination)
</del><ins>+
+static Ref&lt;CSSValueList&gt; valueForScrollSnapType(const ScrollSnapType&amp; type)
</ins><span class="cx"> {
</span><del>-    auto list = CSSValueList::createSpaceSeparated();
-    list.get().append(zoomAdjustedPixelValueForLength(destination.width(), style));
-    list.get().append(zoomAdjustedPixelValueForLength(destination.height(), style));
-    return list;
</del><ins>+    auto value = CSSValueList::createSpaceSeparated();
+    if (type.strictness == ScrollSnapStrictness::None)
+        value-&gt;append(CSSValuePool::singleton().createValue(CSSValueNone));
+    else {
+        value-&gt;append(CSSPrimitiveValue::create(type.axis));
+        value-&gt;append(CSSPrimitiveValue::create(type.strictness));
+    }
+    return value;
</ins><span class="cx"> }
</span><span class="cx"> 
</span><del>-static Ref&lt;CSSValue&gt; scrollSnapPoints(const RenderStyle&amp; style, const ScrollSnapPoints* points)
</del><ins>+static Ref&lt;CSSValueList&gt; valueForScrollSnapAlignment(const ScrollSnapAlign&amp; alignment)
</ins><span class="cx"> {
</span><del>-    if (!points)
-        return CSSValuePool::singleton().createIdentifierValue(CSSValueNone);
-
-    if (points-&gt;usesElements)
-        return CSSValuePool::singleton().createIdentifierValue(CSSValueElements);
-    auto list = CSSValueList::createSpaceSeparated();
-    for (auto&amp; point : points-&gt;offsets)
-        list.get().append(zoomAdjustedPixelValueForLength(point, style));
-    if (points-&gt;hasRepeat)
-        list.get().append(CSSValuePool::singleton().createValue(LengthRepeat::create(zoomAdjustedPixelValueForLength(points-&gt;repeatOffset, style))));
-    return WTFMove(list);
</del><ins>+    auto value = CSSValueList::createSpaceSeparated();
+    value-&gt;append(CSSPrimitiveValue::create(alignment.x));
+    value-&gt;append(CSSPrimitiveValue::create(alignment.y));
+    return value;
</ins><span class="cx"> }
</span><span class="cx"> 
</span><del>-static Ref&lt;CSSValue&gt; scrollSnapCoordinates(const RenderStyle&amp; style, const Vector&lt;LengthSize&gt;&amp; coordinates)
-{
-    if (coordinates.isEmpty())
-        return CSSValuePool::singleton().createIdentifierValue(CSSValueNone);
-
-    auto list = CSSValueList::createCommaSeparated();
-
-    for (auto&amp; coordinate : coordinates) {
-        auto pair = CSSValueList::createSpaceSeparated();
-        pair.get().append(zoomAdjustedPixelValueForLength(coordinate.width(), style));
-        pair.get().append(zoomAdjustedPixelValueForLength(coordinate.height(), style));
-        list.get().append(WTFMove(pair));
-    }
-
-    return WTFMove(list);
-}
</del><span class="cx"> #endif
</span><span class="cx"> 
</span><span class="cx"> static Ref&lt;CSSValue&gt; getWillChangePropertyValue(const WillChangeData* willChangeData)
</span><span class="lines">@@ -3798,16 +3783,30 @@
</span><span class="cx">             return getCSSPropertyValuesForSidesShorthand(paddingShorthand());
</span><span class="cx"> 
</span><span class="cx"> #if ENABLE(CSS_SCROLL_SNAP)
</span><del>-        case CSSPropertyWebkitScrollSnapType:
-            return cssValuePool.createValue(style-&gt;scrollSnapType());
-        case CSSPropertyWebkitScrollSnapDestination:
-            return scrollSnapDestination(*style, style-&gt;scrollSnapDestination());
-        case CSSPropertyWebkitScrollSnapPointsX:
-            return scrollSnapPoints(*style, style-&gt;scrollSnapPointsX());
-        case CSSPropertyWebkitScrollSnapPointsY:
-            return scrollSnapPoints(*style, style-&gt;scrollSnapPointsY());
-        case CSSPropertyWebkitScrollSnapCoordinate:
-            return scrollSnapCoordinates(*style, style-&gt;scrollSnapCoordinates());
</del><ins>+        case CSSPropertyScrollSnapMargin:
+            return getCSSPropertyValuesForSidesShorthand(scrollSnapMarginShorthand());
+        case CSSPropertyScrollSnapMarginBottom:
+            return zoomAdjustedPixelValueForLength(style-&gt;scrollSnapMarginBottom(), *style);
+        case CSSPropertyScrollSnapMarginTop:
+            return zoomAdjustedPixelValueForLength(style-&gt;scrollSnapMarginTop(), *style);
+        case CSSPropertyScrollSnapMarginRight:
+            return zoomAdjustedPixelValueForLength(style-&gt;scrollSnapMarginRight(), *style);
+        case CSSPropertyScrollSnapMarginLeft:
+            return zoomAdjustedPixelValueForLength(style-&gt;scrollSnapMarginLeft(), *style);
+        case CSSPropertyScrollPadding:
+            return getCSSPropertyValuesForSidesShorthand(scrollPaddingShorthand());
+        case CSSPropertyScrollPaddingBottom:
+            return zoomAdjustedPixelValueForLength(style-&gt;scrollPaddingBottom(), *style);
+        case CSSPropertyScrollPaddingTop:
+            return zoomAdjustedPixelValueForLength(style-&gt;scrollPaddingTop(), *style);
+        case CSSPropertyScrollPaddingRight:
+            return zoomAdjustedPixelValueForLength(style-&gt;scrollPaddingRight(), *style);
+        case CSSPropertyScrollPaddingLeft:
+            return zoomAdjustedPixelValueForLength(style-&gt;scrollPaddingLeft(), *style);
+        case CSSPropertyScrollSnapType:
+            return valueForScrollSnapType(style-&gt;scrollSnapType());
+        case CSSPropertyScrollSnapAlign:
+            return valueForScrollSnapAlignment(style-&gt;scrollSnapAlign());
</ins><span class="cx"> #endif
</span><span class="cx"> 
</span><span class="cx"> #if ENABLE(CSS_TRAILING_WORD)
</span></span></pre></div>
<a id="trunkSourceWebCorecssCSSPrimitiveValuecpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/css/CSSPrimitiveValue.cpp (210023 => 210024)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/css/CSSPrimitiveValue.cpp        2016-12-20 18:26:10 UTC (rev 210023)
+++ trunk/Source/WebCore/css/CSSPrimitiveValue.cpp        2016-12-20 18:44:38 UTC (rev 210024)
</span><span class="lines">@@ -54,10 +54,6 @@
</span><span class="cx"> #include &quot;DashboardRegion.h&quot;
</span><span class="cx"> #endif
</span><span class="cx"> 
</span><del>-#if ENABLE(CSS_SCROLL_SNAP)
-#include &quot;LengthRepeat.h&quot;
-#endif
-
</del><span class="cx"> using namespace WTF;
</span><span class="cx"> 
</span><span class="cx"> namespace WebCore {
</span><span class="lines">@@ -120,9 +116,6 @@
</span><span class="cx">     case CSSPrimitiveValue::CSS_UNKNOWN:
</span><span class="cx">     case CSSPrimitiveValue::CSS_URI:
</span><span class="cx">     case CSSPrimitiveValue::CSS_VALUE_ID:
</span><del>-#if ENABLE(CSS_SCROLL_SNAP)
-    case CSSPrimitiveValue::CSS_LENGTH_REPEAT:
-#endif
</del><span class="cx"> #if ENABLE(DASHBOARD_SUPPORT)
</span><span class="cx">     case CSSPrimitiveValue::CSS_DASHBOARD_REGION:
</span><span class="cx"> #endif
</span><span class="lines">@@ -191,9 +184,6 @@
</span><span class="cx"> #if ENABLE(DASHBOARD_SUPPORT)
</span><span class="cx">     case CSSPrimitiveValue::CSS_DASHBOARD_REGION:
</span><span class="cx"> #endif
</span><del>-#if ENABLE(CSS_SCROLL_SNAP)
-    case CSSPrimitiveValue::CSS_LENGTH_REPEAT:
-#endif
</del><span class="cx">         return false;
</span><span class="cx">     }
</span><span class="cx"> 
</span><span class="lines">@@ -461,15 +451,6 @@
</span><span class="cx">     m_value.quad = &amp;quad.leakRef();
</span><span class="cx"> }
</span><span class="cx"> 
</span><del>-#if ENABLE(CSS_SCROLL_SNAP)
-void CSSPrimitiveValue::init(Ref&lt;LengthRepeat&gt;&amp;&amp; lengthRepeat)
-{
-    m_primitiveUnitType = CSS_LENGTH_REPEAT;
-    m_hasCachedCSSText = false;
-    m_value.lengthRepeat = &amp;lengthRepeat.leakRef();
-}
-#endif
-
</del><span class="cx"> #if ENABLE(DASHBOARD_SUPPORT)
</span><span class="cx"> void CSSPrimitiveValue::init(RefPtr&lt;DashboardRegion&gt;&amp;&amp; r)
</span><span class="cx"> {
</span><span class="lines">@@ -526,11 +507,6 @@
</span><span class="cx">     case CSS_QUAD:
</span><span class="cx">         m_value.quad-&gt;deref();
</span><span class="cx">         break;
</span><del>-#if ENABLE(CSS_SCROLL_SNAP)
-    case CSS_LENGTH_REPEAT:
-        m_value.lengthRepeat-&gt;deref();
-        break;
-#endif
</del><span class="cx">     case CSS_PAIR:
</span><span class="cx">         m_value.pair-&gt;deref();
</span><span class="cx">         break;
</span><span class="lines">@@ -1095,10 +1071,6 @@
</span><span class="cx">         return rectValue()-&gt;cssText();
</span><span class="cx">     case CSS_QUAD:
</span><span class="cx">         return quadValue()-&gt;cssText();
</span><del>-#if ENABLE(CSS_SCROLL_SNAP)
-    case CSS_LENGTH_REPEAT:
-        return lengthRepeatValue()-&gt;cssText();
-#endif
</del><span class="cx">     case CSS_RGBCOLOR:
</span><span class="cx">         return color().cssText();
</span><span class="cx">     case CSS_PAIR:
</span><span class="lines">@@ -1229,10 +1201,6 @@
</span><span class="cx">         return m_value.rect &amp;&amp; other.m_value.rect &amp;&amp; m_value.rect-&gt;equals(*other.m_value.rect);
</span><span class="cx">     case CSS_QUAD:
</span><span class="cx">         return m_value.quad &amp;&amp; other.m_value.quad &amp;&amp; m_value.quad-&gt;equals(*other.m_value.quad);
</span><del>-#if ENABLE(CSS_SCROLL_SNAP)
-    case CSS_LENGTH_REPEAT:
-        return m_value.lengthRepeat &amp;&amp; other.m_value.lengthRepeat &amp;&amp; m_value.lengthRepeat-&gt;equals(*other.m_value.lengthRepeat);
-#endif
</del><span class="cx">     case CSS_RGBCOLOR:
</span><span class="cx">         return color() == other.color();
</span><span class="cx">     case CSS_PAIR:
</span></span></pre></div>
<a id="trunkSourceWebCorecssCSSPrimitiveValueh"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/css/CSSPrimitiveValue.h (210023 => 210024)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/css/CSSPrimitiveValue.h        2016-12-20 18:26:10 UTC (rev 210023)
+++ trunk/Source/WebCore/css/CSSPrimitiveValue.h        2016-12-20 18:44:38 UTC (rev 210024)
</span><span class="lines">@@ -39,7 +39,6 @@
</span><span class="cx"> class Counter;
</span><span class="cx"> class DashboardRegion;
</span><span class="cx"> class DeprecatedCSSOMPrimitiveValue;
</span><del>-class LengthRepeat;
</del><span class="cx"> class Pair;
</span><span class="cx"> class Quad;
</span><span class="cx"> class RGBColor;
</span><span class="lines">@@ -112,10 +111,6 @@
</span><span class="cx">         CSS_DPI = 31,
</span><span class="cx">         CSS_DPCM = 32,
</span><span class="cx">         CSS_FR = 33,
</span><del>-#if ENABLE(CSS_SCROLL_SNAP)
-        // FIXME-NEWPARSER: Remove once new parser lands.
-        CSS_LENGTH_REPEAT = 34,
-#endif
</del><span class="cx">         CSS_PAIR = 100, // We envision this being exposed as a means of getting computed style values for pairs (border-spacing/radius, background-position, etc.)
</span><span class="cx"> #if ENABLE(DASHBOARD_SUPPORT)
</span><span class="cx">         CSS_DASHBOARD_REGION = 101, // FIXME: Dashboard region should not be a primitive value.
</span><span class="lines">@@ -185,9 +180,6 @@
</span><span class="cx">     bool isPercentage() const { return primitiveType() == CSS_PERCENTAGE; }
</span><span class="cx">     bool isPx() const { return primitiveType() == CSS_PX; }
</span><span class="cx">     bool isRect() const { return m_primitiveUnitType == CSS_RECT; }
</span><del>-#if ENABLE(CSS_SCROLL_SNAP)
-    bool isLengthRepeat() const { return m_primitiveUnitType == CSS_LENGTH_REPEAT; }
-#endif
</del><span class="cx">     bool isPair() const { return m_primitiveUnitType == CSS_PAIR; }
</span><span class="cx">     bool isPropertyID() const { return m_primitiveUnitType == CSS_PROPERTY_ID; }
</span><span class="cx">     bool isRGBColor() const { return m_primitiveUnitType == CSS_RGBCOLOR; }
</span><span class="lines">@@ -276,9 +268,6 @@
</span><span class="cx">     CSSBasicShape* shapeValue() const { return m_primitiveUnitType != CSS_SHAPE ? nullptr : m_value.shape; }
</span><span class="cx">     CSSValueID valueID() const { return m_primitiveUnitType == CSS_VALUE_ID ? m_value.valueID : CSSValueInvalid; }
</span><span class="cx"> 
</span><del>-#if ENABLE(CSS_SCROLL_SNAP)
-    LengthRepeat* lengthRepeatValue() const { return m_primitiveUnitType != CSS_LENGTH_REPEAT ? nullptr : m_value.lengthRepeat; }
-#endif
</del><span class="cx"> #if ENABLE(DASHBOARD_SUPPORT)
</span><span class="cx">     DashboardRegion* dashboardRegionValue() const { return m_primitiveUnitType != CSS_DASHBOARD_REGION ? nullptr : m_value.region; }
</span><span class="cx"> #endif
</span><span class="lines">@@ -334,9 +323,6 @@
</span><span class="cx">     void init(Ref&lt;Quad&gt;&amp;&amp;);
</span><span class="cx">     void init(Ref&lt;Rect&gt;&amp;&amp;);
</span><span class="cx"> 
</span><del>-#if ENABLE(CSS_SCROLL_SNAP)
-    void init(Ref&lt;LengthRepeat&gt;&amp;&amp;);
-#endif
</del><span class="cx"> #if ENABLE(DASHBOARD_SUPPORT)
</span><span class="cx">     void init(RefPtr&lt;DashboardRegion&gt;&amp;&amp;); // FIXME: Dashboard region should not be a primitive value.
</span><span class="cx"> #endif
</span><span class="lines">@@ -363,9 +349,6 @@
</span><span class="cx">         CSSBasicShape* shape;
</span><span class="cx">         CSSCalcValue* calc;
</span><span class="cx">         const CSSFontFamily* fontFamily;
</span><del>-#if ENABLE(CSS_SCROLL_SNAP)
-        LengthRepeat* lengthRepeat;
-#endif
</del><span class="cx">     } m_value;
</span><span class="cx"> };
</span><span class="cx"> 
</span></span></pre></div>
<a id="trunkSourceWebCorecssCSSPrimitiveValueMappingsh"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/css/CSSPrimitiveValueMappings.h (210023 => 210024)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/css/CSSPrimitiveValueMappings.h        2016-12-20 18:26:10 UTC (rev 210023)
+++ trunk/Source/WebCore/css/CSSPrimitiveValueMappings.h        2016-12-20 18:44:38 UTC (rev 210024)
</span><span class="lines">@@ -5367,39 +5367,121 @@
</span><span class="cx"> #endif
</span><span class="cx"> 
</span><span class="cx"> #if ENABLE(CSS_SCROLL_SNAP)
</span><del>-template&lt;&gt; inline CSSPrimitiveValue::CSSPrimitiveValue(ScrollSnapType e)
</del><ins>+
+template&lt;&gt; inline CSSPrimitiveValue::CSSPrimitiveValue(ScrollSnapStrictness strictness)
</ins><span class="cx">     : CSSValue(PrimitiveClass)
</span><span class="cx"> {
</span><span class="cx">     m_primitiveUnitType = CSS_VALUE_ID;
</span><del>-    switch (e) {
-    case ScrollSnapType::None:
</del><ins>+    switch (strictness) {
+    case ScrollSnapStrictness::None:
</ins><span class="cx">         m_value.valueID = CSSValueNone;
</span><span class="cx">         break;
</span><del>-    case ScrollSnapType::Proximity:
</del><ins>+    case ScrollSnapStrictness::Proximity:
</ins><span class="cx">         m_value.valueID = CSSValueProximity;
</span><span class="cx">         break;
</span><del>-    case ScrollSnapType::Mandatory:
</del><ins>+    case ScrollSnapStrictness::Mandatory:
</ins><span class="cx">         m_value.valueID = CSSValueMandatory;
</span><span class="cx">         break;
</span><span class="cx">     }
</span><span class="cx"> }
</span><span class="cx"> 
</span><del>-template&lt;&gt; inline CSSPrimitiveValue::operator ScrollSnapType() const
</del><ins>+template&lt;&gt; inline CSSPrimitiveValue::operator ScrollSnapStrictness() const
</ins><span class="cx"> {
</span><span class="cx">     ASSERT(isValueID());
</span><span class="cx">     switch (m_value.valueID) {
</span><span class="cx">     case CSSValueNone:
</span><del>-        return ScrollSnapType::None;
</del><ins>+        return ScrollSnapStrictness::None;
</ins><span class="cx">     case CSSValueProximity:
</span><del>-        return ScrollSnapType::Proximity;
</del><ins>+        return ScrollSnapStrictness::Proximity;
</ins><span class="cx">     case CSSValueMandatory:
</span><del>-        return ScrollSnapType::Mandatory;
</del><ins>+        return ScrollSnapStrictness::Mandatory;
</ins><span class="cx">     default:
</span><ins>+        ASSERT_NOT_REACHED();
+        return ScrollSnapStrictness::None;
+    }
+}
+
+template&lt;&gt; inline CSSPrimitiveValue::CSSPrimitiveValue(ScrollSnapAxis axis)
+    : CSSValue(PrimitiveClass)
+{
+    m_primitiveUnitType = CSS_VALUE_ID;
+    switch (axis) {
+    case ScrollSnapAxis::XAxis:
+        m_value.valueID = CSSValueX;
</ins><span class="cx">         break;
</span><ins>+    case ScrollSnapAxis::YAxis:
+        m_value.valueID = CSSValueY;
+        break;
+    case ScrollSnapAxis::Block:
+        m_value.valueID = CSSValueBlock;
+        break;
+    case ScrollSnapAxis::Inline:
+        m_value.valueID = CSSValueInline;
+        break;
+    case ScrollSnapAxis::Both:
+        m_value.valueID = CSSValueBoth;
+        break;
</ins><span class="cx">     }
</span><del>-    ASSERT_NOT_REACHED();
-    return ScrollSnapType::None;
</del><span class="cx"> }
</span><ins>+
+template&lt;&gt; inline CSSPrimitiveValue::operator ScrollSnapAxis() const
+{
+    ASSERT(isValueID());
+    switch (m_value.valueID) {
+    case CSSValueX:
+        return ScrollSnapAxis::XAxis;
+    case CSSValueY:
+        return ScrollSnapAxis::YAxis;
+    case CSSValueBlock:
+        return ScrollSnapAxis::Block;
+    case CSSValueInline:
+        return ScrollSnapAxis::Inline;
+    case CSSValueBoth:
+        return ScrollSnapAxis::Both;
+    default:
+        ASSERT_NOT_REACHED();
+        return ScrollSnapAxis::Both;
+    }
+}
+
+template&lt;&gt; inline CSSPrimitiveValue::CSSPrimitiveValue(ScrollSnapAxisAlignType type)
+    : CSSValue(PrimitiveClass)
+{
+    m_primitiveUnitType = CSS_VALUE_ID;
+    switch (type) {
+    case ScrollSnapAxisAlignType::None:
+        m_value.valueID = CSSValueNone;
+        break;
+    case ScrollSnapAxisAlignType::Start:
+        m_value.valueID = CSSValueStart;
+        break;
+    case ScrollSnapAxisAlignType::Center:
+        m_value.valueID = CSSValueCenter;
+        break;
+    case ScrollSnapAxisAlignType::End:
+        m_value.valueID = CSSValueEnd;
+        break;
+    }
+}
+
+template&lt;&gt; inline CSSPrimitiveValue::operator ScrollSnapAxisAlignType() const
+{
+    ASSERT(isValueID());
+    switch (m_value.valueID) {
+    case CSSValueNone:
+        return ScrollSnapAxisAlignType::None;
+    case CSSValueStart:
+        return ScrollSnapAxisAlignType::Start;
+    case CSSValueCenter:
+        return ScrollSnapAxisAlignType::Center;
+    case CSSValueEnd:
+        return ScrollSnapAxisAlignType::End;
+    default:
+        ASSERT_NOT_REACHED();
+        return ScrollSnapAxisAlignType::None;
+    }
+}
+
</ins><span class="cx"> #endif
</span><span class="cx"> 
</span><span class="cx"> #if ENABLE(CSS_TRAILING_WORD)
</span></span></pre></div>
<a id="trunkSourceWebCorecssCSSPropertiesjson"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/css/CSSProperties.json (210023 => 210024)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/css/CSSProperties.json        2016-12-20 18:26:10 UTC (rev 210023)
+++ trunk/Source/WebCore/css/CSSProperties.json        2016-12-20 18:44:38 UTC (rev 210024)
</span><span class="lines">@@ -3674,43 +3674,6 @@
</span><span class="cx">                 &quot;setter&quot;: &quot;setRTLOrdering&quot;
</span><span class="cx">             }
</span><span class="cx">         },
</span><del>-        &quot;-webkit-scroll-snap-points-x&quot;: {
-            &quot;codegen-properties&quot;: {
-                &quot;converter&quot;: &quot;ScrollSnapPoints&quot;,
-                &quot;custom&quot;: &quot;Initial|Inherit&quot;,
-                &quot;enable-if&quot;: &quot;ENABLE_CSS_SCROLL_SNAP&quot;
-            }
-        },
-        &quot;-webkit-scroll-snap-points-y&quot;: {
-            &quot;codegen-properties&quot;: {
-                &quot;converter&quot;: &quot;ScrollSnapPoints&quot;,
-                &quot;custom&quot;: &quot;Initial|Inherit&quot;,
-                &quot;enable-if&quot;: &quot;ENABLE_CSS_SCROLL_SNAP&quot;
-            }
-        },
-        &quot;-webkit-scroll-snap-type&quot;: {
-            &quot;values&quot;: [
-                &quot;none&quot;,
-                &quot;mandatory&quot;,
-                &quot;proximity&quot;
-            ],
-            &quot;codegen-properties&quot;: {
-                &quot;enable-if&quot;: &quot;ENABLE_CSS_SCROLL_SNAP&quot;
-            }
-        },
-        &quot;-webkit-scroll-snap-destination&quot;: {
-            &quot;codegen-properties&quot;: {
-                &quot;converter&quot;: &quot;SnapCoordinatePair&quot;,
-                &quot;enable-if&quot;: &quot;ENABLE_CSS_SCROLL_SNAP&quot;
-            }
-        },
-        &quot;-webkit-scroll-snap-coordinate&quot;: {
-            &quot;codegen-properties&quot;: {
-                &quot;name-for-methods&quot;: &quot;ScrollSnapCoordinates&quot;,
-                &quot;converter&quot;: &quot;ScrollSnapCoordinates&quot;,
-                &quot;enable-if&quot;: &quot;ENABLE_CSS_SCROLL_SNAP&quot;
-            }
-        },
</del><span class="cx">         &quot;-webkit-svg-shadow&quot;: {
</span><span class="cx">             &quot;codegen-properties&quot;: {
</span><span class="cx">                 &quot;custom&quot;: &quot;All&quot;,
</span><span class="lines">@@ -4031,6 +3994,96 @@
</span><span class="cx">                 &quot;enable-if&quot;: &quot;ENABLE_CSS_REGIONS&quot;
</span><span class="cx">             }
</span><span class="cx">         },
</span><ins>+        &quot;scroll-padding&quot;: {
+            &quot;codegen-properties&quot;: {
+                &quot;enable-if&quot;: &quot;ENABLE_CSS_SCROLL_SNAP&quot;,
+                &quot;longhands&quot;: [
+                    &quot;scroll-padding-top&quot;,
+                    &quot;scroll-padding-right&quot;,
+                    &quot;scroll-padding-bottom&quot;,
+                    &quot;scroll-padding-left&quot;
+                ]
+            }
+        },
+        &quot;scroll-padding-bottom&quot;: {
+            &quot;codegen-properties&quot;: {
+                &quot;enable-if&quot;: &quot;ENABLE_CSS_SCROLL_SNAP&quot;,
+                &quot;initial&quot;: &quot;initialScrollPadding&quot;,
+                &quot;converter&quot;: &quot;Length&quot;
+            }
+        },
+        &quot;scroll-padding-left&quot;: {
+            &quot;codegen-properties&quot;: {
+                &quot;enable-if&quot;: &quot;ENABLE_CSS_SCROLL_SNAP&quot;,
+                &quot;initial&quot;: &quot;initialScrollPadding&quot;,
+                &quot;converter&quot;: &quot;Length&quot;
+            }
+        },
+        &quot;scroll-padding-right&quot;: {
+            &quot;codegen-properties&quot;: {
+                &quot;enable-if&quot;: &quot;ENABLE_CSS_SCROLL_SNAP&quot;,
+                &quot;initial&quot;: &quot;initialScrollPadding&quot;,
+                &quot;converter&quot;: &quot;Length&quot;
+            }
+        },
+        &quot;scroll-padding-top&quot;: {
+            &quot;codegen-properties&quot;: {
+                &quot;enable-if&quot;: &quot;ENABLE_CSS_SCROLL_SNAP&quot;,
+                &quot;initial&quot;: &quot;initialScrollPadding&quot;,
+                &quot;converter&quot;: &quot;Length&quot;
+            }
+        },
+        &quot;scroll-snap-align&quot;: {
+            &quot;codegen-properties&quot;: {
+                &quot;converter&quot;: &quot;ScrollSnapAlign&quot;,
+                &quot;enable-if&quot;: &quot;ENABLE_CSS_SCROLL_SNAP&quot;
+            }
+        },
+        &quot;scroll-snap-margin&quot;: {
+            &quot;codegen-properties&quot;: {
+                &quot;enable-if&quot;: &quot;ENABLE_CSS_SCROLL_SNAP&quot;,
+                &quot;longhands&quot;: [
+                    &quot;scroll-snap-margin-top&quot;,
+                    &quot;scroll-snap-margin-right&quot;,
+                    &quot;scroll-snap-margin-bottom&quot;,
+                    &quot;scroll-snap-margin-left&quot;
+                ]
+            }
+        },
+        &quot;scroll-snap-margin-bottom&quot;: {
+            &quot;codegen-properties&quot;: {
+                &quot;enable-if&quot;: &quot;ENABLE_CSS_SCROLL_SNAP&quot;,
+                &quot;initial&quot;: &quot;initialScrollSnapMargin&quot;,
+                &quot;converter&quot;: &quot;Length&quot;
+            }
+        },
+        &quot;scroll-snap-margin-left&quot;: {
+            &quot;codegen-properties&quot;: {
+                &quot;enable-if&quot;: &quot;ENABLE_CSS_SCROLL_SNAP&quot;,
+                &quot;initial&quot;: &quot;initialScrollSnapMargin&quot;,
+                &quot;converter&quot;: &quot;Length&quot;
+            }
+        },
+        &quot;scroll-snap-margin-right&quot;: {
+            &quot;codegen-properties&quot;: {
+                &quot;enable-if&quot;: &quot;ENABLE_CSS_SCROLL_SNAP&quot;,
+                &quot;initial&quot;: &quot;initialScrollSnapMargin&quot;,
+                &quot;converter&quot;: &quot;Length&quot;
+            }
+        },
+        &quot;scroll-snap-margin-top&quot;: {
+            &quot;codegen-properties&quot;: {
+                &quot;enable-if&quot;: &quot;ENABLE_CSS_SCROLL_SNAP&quot;,
+                &quot;initial&quot;: &quot;initialScrollSnapMargin&quot;,
+                &quot;converter&quot;: &quot;Length&quot;
+            }
+        },
+        &quot;scroll-snap-type&quot;: {
+            &quot;codegen-properties&quot;: {
+                &quot;converter&quot;: &quot;ScrollSnapType&quot;,
+                &quot;enable-if&quot;: &quot;ENABLE_CSS_SCROLL_SNAP&quot;
+            }
+        },
</ins><span class="cx">         &quot;shape-outside&quot;: {
</span><span class="cx">             &quot;codegen-properties&quot;: {
</span><span class="cx">                 &quot;aliases&quot;: [
</span></span></pre></div>
<a id="trunkSourceWebCorecssCSSValueKeywordsin"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/css/CSSValueKeywords.in (210023 => 210024)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/css/CSSValueKeywords.in        2016-12-20 18:26:10 UTC (rev 210023)
+++ trunk/Source/WebCore/css/CSSValueKeywords.in        2016-12-20 18:44:38 UTC (rev 210024)
</span><span class="lines">@@ -1092,6 +1092,8 @@
</span><span class="cx"> // -webkit-scroll-snap-type
</span><span class="cx"> mandatory
</span><span class="cx"> proximity
</span><ins>+x
+y
</ins><span class="cx"> #endif
</span><span class="cx"> 
</span><span class="cx"> // -webkit-region-fragment
</span></span></pre></div>
<a id="trunkSourceWebCorecssLengthRepeath"></a>
<div class="delfile"><h4>Deleted: trunk/Source/WebCore/css/LengthRepeat.h (210023 => 210024)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/css/LengthRepeat.h        2016-12-20 18:26:10 UTC (rev 210023)
+++ trunk/Source/WebCore/css/LengthRepeat.h        2016-12-20 18:44:38 UTC (rev 210024)
</span><span class="lines">@@ -1,64 +0,0 @@
</span><del>-/*
- * Copyright (C) 2014-2015 Apple Inc. All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in the
- *    documentation and/or other materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS''
- * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
- * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
- * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS
- * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
- * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
- * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
- * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
- * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
- * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
- * THE POSSIBILITY OF SUCH DAMAGE.
- */
-
-#pragma once
-
-#if ENABLE(CSS_SCROLL_SNAP)
-
-#include &quot;CSSPrimitiveValue.h&quot;
-#include &lt;wtf/RefPtr.h&gt;
-
-namespace WebCore {
-
-class LengthRepeat final : public RefCounted&lt;LengthRepeat&gt; {
-public:
-    static Ref&lt;LengthRepeat&gt; create(PassRefPtr&lt;CSSValue&gt; interval) { return adoptRef(*new LengthRepeat(interval)); }
-
-    CSSValue* interval() const { return m_interval.get(); }
-
-    void setInterval(PassRefPtr&lt;CSSValue&gt; interval) { m_interval = interval; }
-
-    bool equals(const LengthRepeat&amp; other) const
-    {
-        return compareCSSValuePtr(m_interval, other.m_interval);
-    }
-
-    String cssText() const
-    {
-        return &quot;repeat(&quot; + interval()-&gt;cssText() + &quot;)&quot;;
-    }
-
-private:
-    LengthRepeat(PassRefPtr&lt;CSSValue&gt; interval)
-        : m_interval(interval)
-    {
-    }
-
-    RefPtr&lt;CSSValue&gt; m_interval;
-};
-
-} // namespace WebCore
-
-#endif // ENABLE(CSS_SCROLL_SNAP)
</del></span></pre></div>
<a id="trunkSourceWebCorecssStyleBuilderConverterh"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/css/StyleBuilderConverter.h (210023 => 210024)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/css/StyleBuilderConverter.h        2016-12-20 18:26:10 UTC (rev 210023)
+++ trunk/Source/WebCore/css/StyleBuilderConverter.h        2016-12-20 18:44:38 UTC (rev 210024)
</span><span class="lines">@@ -43,7 +43,6 @@
</span><span class="cx"> #include &quot;Frame.h&quot;
</span><span class="cx"> #include &quot;LayoutUnit.h&quot;
</span><span class="cx"> #include &quot;Length.h&quot;
</span><del>-#include &quot;LengthRepeat.h&quot;
</del><span class="cx"> #include &quot;Pair.h&quot;
</span><span class="cx"> #include &quot;QuotesData.h&quot;
</span><span class="cx"> #include &quot;RuntimeEnabledFeatures.h&quot;
</span><span class="lines">@@ -94,9 +93,8 @@
</span><span class="cx">     static TextDecorationSkip convertTextDecorationSkip(StyleResolver&amp;, const CSSValue&amp;);
</span><span class="cx">     static PassRefPtr&lt;ShapeValue&gt; convertShapeValue(StyleResolver&amp;, CSSValue&amp;);
</span><span class="cx"> #if ENABLE(CSS_SCROLL_SNAP)
</span><del>-    static std::unique_ptr&lt;ScrollSnapPoints&gt; convertScrollSnapPoints(StyleResolver&amp;, const CSSValue&amp;);
-    static LengthSize convertSnapCoordinatePair(StyleResolver&amp;, const CSSValue&amp;, size_t offset = 0);
-    static Vector&lt;LengthSize&gt; convertScrollSnapCoordinates(StyleResolver&amp;, const CSSValue&amp;);
</del><ins>+    static ScrollSnapType convertScrollSnapType(StyleResolver&amp;, const CSSValue&amp;);
+    static ScrollSnapAlign convertScrollSnapAlign(StyleResolver&amp;, const CSSValue&amp;);
</ins><span class="cx"> #endif
</span><span class="cx"> #if ENABLE(CSS_GRID_LAYOUT)
</span><span class="cx">     static GridTrackSize convertGridTrackSize(StyleResolver&amp;, const CSSValue&amp;);
</span><span class="lines">@@ -798,98 +796,44 @@
</span><span class="cx"> }
</span><span class="cx"> 
</span><span class="cx"> #if ENABLE(CSS_SCROLL_SNAP)
</span><del>-inline Length StyleBuilderConverter::parseSnapCoordinate(StyleResolver&amp; styleResolver, const CSSValue&amp; value)
-{
-    return downcast&lt;CSSPrimitiveValue&gt;(value).convertToLength&lt;FixedIntegerConversion | PercentConversion | CalculatedConversion | AutoConversion&gt;(styleResolver.state().cssToLengthConversionData());
-}
</del><span class="cx"> 
</span><del>-inline std::unique_ptr&lt;ScrollSnapPoints&gt; StyleBuilderConverter::convertScrollSnapPoints(StyleResolver&amp; styleResolver, const CSSValue&amp; value)
</del><ins>+inline ScrollSnapType StyleBuilderConverter::convertScrollSnapType(StyleResolver&amp;, const CSSValue&amp; value)
</ins><span class="cx"> {
</span><del>-    // FIXME-NEWPARSER: Old parser supports an identifier value called &quot;elements&quot; when it seems like
-    // &quot;none&quot; is what others use. For now, support both in the converter.
-    auto points = std::make_unique&lt;ScrollSnapPoints&gt;();
-    
-    if (is&lt;CSSPrimitiveValue&gt;(value)) {
-        ASSERT(downcast&lt;CSSPrimitiveValue&gt;(value).valueID() == CSSValueElements || downcast&lt;CSSPrimitiveValue&gt;(value).valueID() == CSSValueNone);
-        points-&gt;usesElements = true;
-        return points;
</del><ins>+    ScrollSnapType type;
+    auto&amp; values = downcast&lt;CSSValueList&gt;(value);
+    auto&amp; firstValue = downcast&lt;CSSPrimitiveValue&gt;(*values.item(0));
+    if (values.length() == 2) {
+        type.axis = firstValue;
+        type.strictness = downcast&lt;CSSPrimitiveValue&gt;(*values.item(1));
+        return type;
</ins><span class="cx">     }
</span><del>-    
-    for (auto&amp; currentValue : downcast&lt;CSSValueList&gt;(value)) {
-        if (is&lt;CSSFunctionValue&gt;(currentValue.get())) {
-            auto&amp; functionValue = downcast&lt;CSSFunctionValue&gt;(currentValue.get());
-            points-&gt;repeatOffset = parseSnapCoordinate(styleResolver, *functionValue.item(0));
-            points-&gt;hasRepeat = true;
-            break;
-        }
-        
-        auto&amp; itemValue = downcast&lt;CSSPrimitiveValue&gt;(currentValue.get());
-        if (auto* lengthRepeat = itemValue.lengthRepeatValue()) {
-            // FIXME-NEWPARSER: Old parsing code, which uses a special primitive value.
-            // Can remove this once new parser turns on.
-            if (auto* interval = lengthRepeat-&gt;interval()) {
-                points-&gt;repeatOffset = parseSnapCoordinate(styleResolver, *interval);
-                points-&gt;hasRepeat = true;
-                break;
-            }
-        }
-        points-&gt;offsets.append(parseSnapCoordinate(styleResolver, itemValue));
</del><ins>+
+    switch (firstValue.valueID()) {
+    case CSSValueNone:
+    case CSSValueMandatory:
+    case CSSValueProximity:
+        type.strictness = firstValue;
+        break;
+    default:
+        type.axis = firstValue;
+        type.strictness = ScrollSnapStrictness::Proximity;
+        break;
</ins><span class="cx">     }
</span><del>-
-    return points;
</del><ins>+    return type;
</ins><span class="cx"> }
</span><span class="cx"> 
</span><del>-inline LengthSize StyleBuilderConverter::convertSnapCoordinatePair(StyleResolver&amp; styleResolver, const CSSValue&amp; value, size_t offset)
</del><ins>+inline ScrollSnapAlign StyleBuilderConverter::convertScrollSnapAlign(StyleResolver&amp;, const CSSValue&amp; value)
</ins><span class="cx"> {
</span><del>-    // FIXME-NEWPARSER: Can make this unconditional once old parser is gone. This is just how
-    // we detect that we're dealing with the new parser's pairs.
-    if (value.isPrimitiveValue() &amp;&amp; downcast&lt;CSSPrimitiveValue&gt;(value).pairValue()) {
-        Pair* pair = downcast&lt;CSSPrimitiveValue&gt;(value).pairValue();
-        Length lengthX = convertPositionComponent&lt;CSSValueLeft, CSSValueRight&gt;(styleResolver, *pair-&gt;first());
-        Length lengthY = convertPositionComponent&lt;CSSValueTop, CSSValueBottom&gt;(styleResolver, *pair-&gt;second());
-        return LengthSize(lengthX, lengthY);
-    }
-
-    // FIXME-NEWPARSER: Remove once old parser is gone.
-    auto&amp; valueList = downcast&lt;CSSValueList&gt;(value);
-    return LengthSize(parseSnapCoordinate(styleResolver, *valueList.item(offset)), parseSnapCoordinate(styleResolver, *valueList.item(offset + 1)));
</del><ins>+    auto&amp; values = downcast&lt;CSSValueList&gt;(value);
+    ScrollSnapAlign alignment;
+    alignment.x = downcast&lt;CSSPrimitiveValue&gt;(*values.item(0));
+    if (values.length() == 1)
+        alignment.y = alignment.x;
+    else
+        alignment.y = downcast&lt;CSSPrimitiveValue&gt;(*values.item(1));
+    return alignment;
</ins><span class="cx"> }
</span><span class="cx"> 
</span><del>-inline Vector&lt;LengthSize&gt; StyleBuilderConverter::convertScrollSnapCoordinates(StyleResolver&amp; styleResolver, const CSSValue&amp; value)
-{
-    if (is&lt;CSSPrimitiveValue&gt;(value)) {
-        ASSERT(downcast&lt;CSSPrimitiveValue&gt;(value).valueID() == CSSValueNone);
-        return Vector&lt;LengthSize&gt;();
-    }
-
-    auto&amp; valueList = downcast&lt;CSSValueList&gt;(value);
-    if (!valueList.length())
-        return Vector&lt;LengthSize&gt;();
-    
-    // FIXME-NEWPARSER: Can make this unconditional once old parser is gone. This is just how
-    // we detect that we're dealing with the new parser's pairs.
-    if (valueList.item(0)-&gt;isPrimitiveValue() &amp;&amp; downcast&lt;CSSPrimitiveValue&gt;(*valueList.item(0)).pairValue()) {
-        Vector&lt;LengthSize&gt; coordinates;
-        coordinates.reserveInitialCapacity(valueList.length());
-        for (auto&amp; snapCoordinate : valueList) {
-            Pair* pair = downcast&lt;CSSPrimitiveValue&gt;(*snapCoordinate.ptr()).pairValue();
-            Length lengthX = convertPositionComponent&lt;CSSValueLeft, CSSValueRight&gt;(styleResolver, *pair-&gt;first());
-            Length lengthY = convertPositionComponent&lt;CSSValueTop, CSSValueBottom&gt;(styleResolver, *pair-&gt;second());
-            coordinates.uncheckedAppend(LengthSize(lengthX, lengthY));
-        }
-        return coordinates;
-    }
-    
-    // FIXME-NEWPARSER: Remove all of this once old parser is gone, including all the functions
-    // it calls.
-    ASSERT(!(valueList.length() % 2));
-    size_t pointCount = valueList.length() / 2;
-    Vector&lt;LengthSize&gt; coordinates;
-    coordinates.reserveInitialCapacity(pointCount);
-    for (size_t i = 0; i &lt; pointCount; ++i)
-        coordinates.uncheckedAppend(convertSnapCoordinatePair(styleResolver, valueList, i * 2));
-    return coordinates;
-}
</del><span class="cx"> #endif
</span><span class="cx"> 
</span><span class="cx"> #if ENABLE(CSS_GRID_LAYOUT)
</span></span></pre></div>
<a id="trunkSourceWebCorecssStyleBuilderCustomh"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/css/StyleBuilderCustom.h (210023 => 210024)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/css/StyleBuilderCustom.h        2016-12-20 18:26:10 UTC (rev 210023)
+++ trunk/Source/WebCore/css/StyleBuilderCustom.h        2016-12-20 18:44:38 UTC (rev 210024)
</span><span class="lines">@@ -135,12 +135,6 @@
</span><span class="cx">     static void applyValueWebkitTextZoom(StyleResolver&amp;, CSSValue&amp;);
</span><span class="cx">     static void applyValueWritingMode(StyleResolver&amp;, CSSValue&amp;);
</span><span class="cx">     static void applyValueAlt(StyleResolver&amp;, CSSValue&amp;);
</span><del>-#if ENABLE(CSS_SCROLL_SNAP)
-    static void applyInitialWebkitScrollSnapPointsX(StyleResolver&amp;);
-    static void applyInheritWebkitScrollSnapPointsX(StyleResolver&amp;);
-    static void applyInitialWebkitScrollSnapPointsY(StyleResolver&amp;);
-    static void applyInheritWebkitScrollSnapPointsY(StyleResolver&amp;);
-#endif
</del><span class="cx">     static void applyValueWillChange(StyleResolver&amp;, CSSValue&amp;);
</span><span class="cx"> 
</span><span class="cx"> private:
</span><span class="lines">@@ -1781,30 +1775,6 @@
</span><span class="cx">         styleResolver.style()-&gt;setContentAltText(emptyAtom);
</span><span class="cx"> }
</span><span class="cx"> 
</span><del>-#if ENABLE(CSS_SCROLL_SNAP)
-
-inline void StyleBuilderCustom::applyInitialWebkitScrollSnapPointsX(StyleResolver&amp; styleResolver)
-{
-    styleResolver.style()-&gt;setScrollSnapPointsX(nullptr);
-}
-
-inline void StyleBuilderCustom::applyInheritWebkitScrollSnapPointsX(StyleResolver&amp; styleResolver)
-{
-    styleResolver.style()-&gt;setScrollSnapPointsX(styleResolver.parentStyle()-&gt;scrollSnapPointsX() ? std::make_unique&lt;ScrollSnapPoints&gt;(*styleResolver.parentStyle()-&gt;scrollSnapPointsX()) : nullptr);
-}
-
-inline void StyleBuilderCustom::applyInitialWebkitScrollSnapPointsY(StyleResolver&amp; styleResolver)
-{
-    styleResolver.style()-&gt;setScrollSnapPointsY(nullptr);
-}
-
-inline void StyleBuilderCustom::applyInheritWebkitScrollSnapPointsY(StyleResolver&amp; styleResolver)
-{
-    styleResolver.style()-&gt;setScrollSnapPointsY(styleResolver.parentStyle()-&gt;scrollSnapPointsY() ? std::make_unique&lt;ScrollSnapPoints&gt;(*styleResolver.parentStyle()-&gt;scrollSnapPointsY()) : nullptr);
-}
-
-#endif
-
</del><span class="cx"> inline void StyleBuilderCustom::applyValueWillChange(StyleResolver&amp; styleResolver, CSSValue&amp; value)
</span><span class="cx"> {
</span><span class="cx">     if (is&lt;CSSPrimitiveValue&gt;(value)) {
</span></span></pre></div>
<a id="trunkSourceWebCorecssStylePropertiescpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/css/StyleProperties.cpp (210023 => 210024)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/css/StyleProperties.cpp        2016-12-20 18:26:10 UTC (rev 210023)
+++ trunk/Source/WebCore/css/StyleProperties.cpp        2016-12-20 18:44:38 UTC (rev 210024)
</span><span class="lines">@@ -227,6 +227,12 @@
</span><span class="cx">     }
</span><span class="cx">     case CSSPropertyBorderRadius:
</span><span class="cx">         return get4Values(borderRadiusShorthand());
</span><ins>+#if ENABLE(CSS_SCROLL_SNAP)
+    case CSSPropertyScrollSnapMargin:
+        return get4Values(scrollSnapMarginShorthand());
+    case CSSPropertyScrollPadding:
+        return get4Values(scrollPaddingShorthand());
+#endif
</ins><span class="cx">     default:
</span><span class="cx">         return String();
</span><span class="cx">     }
</span><span class="lines">@@ -960,6 +966,20 @@
</span><span class="cx">             case CSSPropertyPaddingLeft:
</span><span class="cx">                 shorthandPropertyID = CSSPropertyPadding;
</span><span class="cx">                 break;
</span><ins>+#if ENABLE(CSS_SCROLL_SNAP)
+            case CSSPropertyScrollPaddingTop:
+            case CSSPropertyScrollPaddingRight:
+            case CSSPropertyScrollPaddingBottom:
+            case CSSPropertyScrollPaddingLeft:
+                shorthandPropertyID = CSSPropertyScrollPadding;
+                break;
+            case CSSPropertyScrollSnapMarginTop:
+            case CSSPropertyScrollSnapMarginRight:
+            case CSSPropertyScrollSnapMarginBottom:
+            case CSSPropertyScrollSnapMarginLeft:
+                shorthandPropertyID = CSSPropertyScrollSnapMargin;
+                break;
+#endif
</ins><span class="cx">             case CSSPropertyTransitionProperty:
</span><span class="cx">             case CSSPropertyTransitionDuration:
</span><span class="cx">             case CSSPropertyTransitionTimingFunction:
</span></span></pre></div>
<a id="trunkSourceWebCorecssStyleResolvercpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/css/StyleResolver.cpp (210023 => 210024)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/css/StyleResolver.cpp        2016-12-20 18:26:10 UTC (rev 210023)
+++ trunk/Source/WebCore/css/StyleResolver.cpp        2016-12-20 18:44:38 UTC (rev 210024)
</span><span class="lines">@@ -155,10 +155,6 @@
</span><span class="cx"> #include &quot;WebVTTElement.h&quot;
</span><span class="cx"> #endif
</span><span class="cx"> 
</span><del>-#if ENABLE(CSS_SCROLL_SNAP)
-#include &quot;LengthRepeat.h&quot;
-#endif
-
</del><span class="cx"> namespace WebCore {
</span><span class="cx"> 
</span><span class="cx"> using namespace HTMLNames;
</span></span></pre></div>
<a id="trunkSourceWebCorecssparserCSSParserFastPathscpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/css/parser/CSSParserFastPaths.cpp (210023 => 210024)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/css/parser/CSSParserFastPaths.cpp        2016-12-20 18:26:10 UTC (rev 210023)
+++ trunk/Source/WebCore/css/parser/CSSParserFastPaths.cpp        2016-12-20 18:44:38 UTC (rev 210024)
</span><span class="lines">@@ -769,10 +769,6 @@
</span><span class="cx">     case CSSPropertyWebkitRegionFragment:
</span><span class="cx">         return valueID == CSSValueAuto || valueID == CSSValueBreak;
</span><span class="cx"> #endif
</span><del>-#if ENABLE(CSS_SCROLL_SNAP)
-    case CSSPropertyWebkitScrollSnapType: // none | mandatory | proximity
-        return valueID == CSSValueNone || valueID == CSSValueMandatory || valueID == CSSValueProximity;
-#endif
</del><span class="cx"> #if ENABLE(TOUCH_EVENTS)
</span><span class="cx">     case CSSPropertyTouchAction: // auto | manipulation
</span><span class="cx">         return valueID == CSSValueAuto || valueID == CSSValueManipulation;
</span><span class="lines">@@ -982,9 +978,6 @@
</span><span class="cx">     // support custom WebKit-based Apple applications.
</span><span class="cx">     case CSSPropertyWebkitTouchCallout:
</span><span class="cx"> #endif
</span><del>-#if ENABLE(CSS_SCROLL_SNAP)
-    case CSSPropertyWebkitScrollSnapType:
-#endif
</del><span class="cx"> #if ENABLE(APPLE_PAY)
</span><span class="cx">     case CSSPropertyApplePayButtonStyle:
</span><span class="cx">     case CSSPropertyApplePayButtonType:
</span></span></pre></div>
<a id="trunkSourceWebCorecssparserCSSPropertyParsercpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/css/parser/CSSPropertyParser.cpp (210023 => 210024)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/css/parser/CSSPropertyParser.cpp        2016-12-20 18:26:10 UTC (rev 210023)
+++ trunk/Source/WebCore/css/parser/CSSPropertyParser.cpp        2016-12-20 18:44:38 UTC (rev 210024)
</span><span class="lines">@@ -2176,66 +2176,36 @@
</span><span class="cx"> 
</span><span class="cx"> #if ENABLE(CSS_SCROLL_SNAP)
</span><span class="cx"> 
</span><del>-static RefPtr&lt;CSSValueList&gt; consumeSnapPointCoordinateList(CSSParserTokenRange&amp; range, CSSParserMode cssParserMode)
</del><ins>+static RefPtr&lt;CSSValueList&gt; consumeScrollSnapAlign(CSSParserTokenRange&amp; range)
</ins><span class="cx"> {
</span><del>-    RefPtr&lt;CSSValueList&gt; positions = CSSValueList::createSpaceSeparated();
-    do {
-        
-        RefPtr&lt;CSSPrimitiveValue&gt; first = consumePositionX(range, cssParserMode);
-        if (!first || range.atEnd())
-            return nullptr;
-        RefPtr&lt;CSSPrimitiveValue&gt; second = consumePositionY(range, cssParserMode);
-        if (!second)
-            return nullptr;
-        RefPtr&lt;CSSValue&gt; position = createPrimitiveValuePair(first.releaseNonNull(), second.releaseNonNull(), Pair::IdenticalValueEncoding::DoNotCoalesce);
-        positions-&gt;append(position.releaseNonNull());
-    } while (!range.atEnd());
-    return positions;
</del><ins>+    RefPtr&lt;CSSValueList&gt; alignmentValue = CSSValueList::createSpaceSeparated();
+    if (RefPtr&lt;CSSPrimitiveValue&gt; firstValue = consumeIdent&lt;CSSValueNone, CSSValueStart, CSSValueCenter, CSSValueEnd&gt;(range)) {
+        alignmentValue-&gt;append(firstValue.releaseNonNull());
+        if (auto secondValue = consumeIdent&lt;CSSValueNone, CSSValueStart, CSSValueCenter, CSSValueEnd&gt;(range))
+            alignmentValue-&gt;append(secondValue.releaseNonNull());
+    }
+    return alignmentValue-&gt;length() ? alignmentValue : nullptr;
</ins><span class="cx"> }
</span><span class="cx"> 
</span><del>-static RefPtr&lt;CSSValue&gt; consumeScrollSnapCoordinate(CSSParserTokenRange&amp; range, CSSParserMode cssParserMode)
</del><ins>+static RefPtr&lt;CSSValueList&gt; consumeScrollSnapType(CSSParserTokenRange&amp; range)
</ins><span class="cx"> {
</span><del>-    if (range.peek().id() == CSSValueNone)
-        return consumeIdent(range);
-    return consumeSnapPointCoordinateList(range, cssParserMode);
-}
</del><ins>+    RefPtr&lt;CSSValueList&gt; typeValue = CSSValueList::createSpaceSeparated();
+    RefPtr&lt;CSSPrimitiveValue&gt; secondValue;
</ins><span class="cx"> 
</span><del>-static RefPtr&lt;CSSValue&gt; consumeScrollSnapDestination(CSSParserTokenRange&amp; range, CSSParserMode cssParserMode)
-{
-    RefPtr&lt;CSSPrimitiveValue&gt; first = consumePositionX(range, cssParserMode);
-    if (!first || range.atEnd())
</del><ins>+    auto firstValue = consumeIdent&lt;CSSValueX, CSSValueY, CSSValueBlock, CSSValueInline, CSSValueBoth&gt;(range);
+    if (firstValue)
+        secondValue = consumeIdent&lt;CSSValueProximity, CSSValueMandatory&gt;(range);
+    else
+        firstValue = consumeIdent&lt;CSSValueNone, CSSValueProximity, CSSValueMandatory&gt;(range);
+
+    if (!firstValue)
</ins><span class="cx">         return nullptr;
</span><del>-    RefPtr&lt;CSSPrimitiveValue&gt; second = consumePositionY(range, cssParserMode);
-    if (!second)
-        return nullptr;
-    return createPrimitiveValuePair(first.releaseNonNull(), second.releaseNonNull(), Pair::IdenticalValueEncoding::DoNotCoalesce);
-}
</del><span class="cx"> 
</span><del>-static RefPtr&lt;CSSValue&gt; consumeScrollSnapPoints(CSSParserTokenRange&amp; range, CSSParserMode cssParserMode)
-{
-    if (range.peek().id() == CSSValueNone || range.peek().id() == CSSValueElements)
-        return consumeIdent(range);
-    
-    RefPtr&lt;CSSValueList&gt; points = CSSValueList::createSpaceSeparated();
-    do {
-        if (range.peek().functionId() == CSSValueRepeat) {
-            CSSParserTokenRange args = consumeFunction(range);
-            RefPtr&lt;CSSPrimitiveValue&gt; parsedValue = consumeLengthOrPercent(args, cssParserMode, ValueRangeNonNegative);
-            if (args.atEnd() &amp;&amp; parsedValue &amp;&amp; (parsedValue-&gt;isCalculated() || parsedValue-&gt;doubleValue() &gt; 0)) {
-                Ref&lt;CSSFunctionValue&gt; result = CSSFunctionValue::create(CSSValueRepeat);
-                result-&gt;append(parsedValue.releaseNonNull());
-                points-&gt;append(WTFMove(result));
-            }
-        } else {
-            RefPtr&lt;CSSValue&gt; length = consumeLengthOrPercent(range, cssParserMode, ValueRangeAll, UnitlessQuirk::Forbid);
-            if (!length)
-                return nullptr;
-            points-&gt;append(length.releaseNonNull());
-        }
-    } while (!range.atEnd());
-    
-    
-    return points;
</del><ins>+    typeValue-&gt;append(firstValue.releaseNonNull());
+    if (secondValue)
+        typeValue-&gt;append(secondValue.releaseNonNull());
+
+    return typeValue;
</ins><span class="cx"> }
</span><span class="cx"> 
</span><span class="cx"> #endif
</span><span class="lines">@@ -3762,6 +3732,22 @@
</span><span class="cx">     case CSSPropertyWebkitPaddingBefore:
</span><span class="cx">     case CSSPropertyWebkitPaddingAfter:
</span><span class="cx">         return consumeLengthOrPercent(m_range, m_context.mode, ValueRangeNonNegative, UnitlessQuirk::Forbid);
</span><ins>+#if ENABLE(CSS_SCROLL_SNAP)
+    case CSSPropertyScrollSnapMarginBottom:
+    case CSSPropertyScrollSnapMarginLeft:
+    case CSSPropertyScrollSnapMarginRight:
+    case CSSPropertyScrollSnapMarginTop:
+        return consumeLength(m_range, m_context.mode, ValueRangeAll);
+    case CSSPropertyScrollPaddingBottom:
+    case CSSPropertyScrollPaddingLeft:
+    case CSSPropertyScrollPaddingRight:
+    case CSSPropertyScrollPaddingTop:
+        return consumeLengthOrPercent(m_range, m_context.mode, ValueRangeAll);
+    case CSSPropertyScrollSnapAlign:
+        return consumeScrollSnapAlign(m_range);
+    case CSSPropertyScrollSnapType:
+        return consumeScrollSnapType(m_range);
+#endif
</ins><span class="cx">     case CSSPropertyClip:
</span><span class="cx">         return consumeClip(m_range, m_context.mode);
</span><span class="cx"> #if ENABLE(TOUCH_EVENTS)
</span><span class="lines">@@ -3958,15 +3944,6 @@
</span><span class="cx">         return consumeImageOrNone(m_range, m_context);
</span><span class="cx">     case CSSPropertyPerspective:
</span><span class="cx">         return consumePerspective(m_range, m_context.mode);
</span><del>-#if ENABLE(CSS_SCROLL_SNAP)
-    case CSSPropertyWebkitScrollSnapCoordinate:
-        return consumeScrollSnapCoordinate(m_range, m_context.mode);
-    case CSSPropertyWebkitScrollSnapDestination:
-        return consumeScrollSnapDestination(m_range, m_context.mode);
-    case CSSPropertyWebkitScrollSnapPointsX:
-    case CSSPropertyWebkitScrollSnapPointsY:
-        return consumeScrollSnapPoints(m_range, m_context.mode);
-#endif
</del><span class="cx">     case CSSPropertyBorderTopRightRadius:
</span><span class="cx">     case CSSPropertyBorderTopLeftRadius:
</span><span class="cx">     case CSSPropertyBorderBottomLeftRadius:
</span><span class="lines">@@ -5351,6 +5328,12 @@
</span><span class="cx">         return consume4Values(marginShorthand(), important);
</span><span class="cx">     case CSSPropertyPadding:
</span><span class="cx">         return consume4Values(paddingShorthand(), important);
</span><ins>+#if ENABLE(CSS_SCROLL_SNAP)
+    case CSSPropertyScrollSnapMargin:
+        return consume4Values(scrollSnapMarginShorthand(), important);
+    case CSSPropertyScrollPadding:
+        return consume4Values(scrollPaddingShorthand(), important);
+#endif
</ins><span class="cx">     case CSSPropertyWebkitTextEmphasis:
</span><span class="cx">         return consumeShorthandGreedily(webkitTextEmphasisShorthand(), important);
</span><span class="cx">     case CSSPropertyOutline:
</span></span></pre></div>
<a id="trunkSourceWebCorepagescrollingAxisScrollSnapOffsetscpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/page/scrolling/AxisScrollSnapOffsets.cpp (210023 => 210024)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/page/scrolling/AxisScrollSnapOffsets.cpp        2016-12-20 18:26:10 UTC (rev 210023)
+++ trunk/Source/WebCore/page/scrolling/AxisScrollSnapOffsets.cpp        2016-12-20 18:44:38 UTC (rev 210024)
</span><span class="lines">@@ -30,6 +30,7 @@
</span><span class="cx"> #include &quot;HTMLCollection.h&quot;
</span><span class="cx"> #include &quot;HTMLElement.h&quot;
</span><span class="cx"> #include &quot;Length.h&quot;
</span><ins>+#include &quot;Logging.h&quot;
</ins><span class="cx"> #include &quot;RenderBox.h&quot;
</span><span class="cx"> #include &quot;RenderView.h&quot;
</span><span class="cx"> #include &quot;ScrollableArea.h&quot;
</span><span class="lines">@@ -39,165 +40,136 @@
</span><span class="cx"> 
</span><span class="cx"> namespace WebCore {
</span><span class="cx"> 
</span><del>-static void appendChildSnapOffsets(HTMLElement&amp; parent, bool shouldAddHorizontalChildOffsets, Vector&lt;LayoutUnit&gt;&amp; horizontalSnapOffsetSubsequence, bool shouldAddVerticalChildOffsets, Vector&lt;LayoutUnit&gt;&amp; verticalSnapOffsetSubsequence)
</del><ins>+enum class InsetOrOutset {
+    Inset,
+    Outset
+};
+
+static LayoutRect computeScrollSnapPortOrAreaRect(const LayoutRect&amp; rect, const LengthBox&amp; insetOrOutsetBox, InsetOrOutset insetOrOutset)
</ins><span class="cx"> {
</span><del>-    RenderElement* scrollContainer = parent.renderer();
-    ASSERT(scrollContainer);
-    
-    RenderView&amp; renderView = scrollContainer-&gt;view();
-
-    Vector&lt;const RenderBox*&gt; elements;
-    for (auto&amp; element : renderView.boxesWithScrollSnapCoordinates()) {
-        if (element-&gt;findEnclosingScrollableContainer() != scrollContainer)
-            continue;
-
-        elements.append(element);
-    }
-
-    for (auto&amp; box : elements) {
-        auto&amp; scrollSnapCoordinates = box-&gt;style().scrollSnapCoordinates();
-        if (scrollSnapCoordinates.isEmpty())
-            continue;
-        
-        LayoutRect viewSize = box-&gt;contentBoxRect();
-        FloatPoint position = box-&gt;localToContainerPoint(FloatPoint(parent.renderBox()-&gt;scrollLeft(), parent.renderBox()-&gt;scrollTop()), parent.renderBox());
-        for (auto&amp; coordinate : scrollSnapCoordinates) {
-            LayoutUnit lastPotentialSnapPositionX = position.x() + valueForLength(coordinate.width(), viewSize.width());
-            if (shouldAddHorizontalChildOffsets &amp;&amp; lastPotentialSnapPositionX &gt; 0)
-                horizontalSnapOffsetSubsequence.append(lastPotentialSnapPositionX);
-            
-            LayoutUnit lastPotentialSnapPositionY = position.y() + valueForLength(coordinate.height(), viewSize.height());
-            if (shouldAddVerticalChildOffsets &amp;&amp; lastPotentialSnapPositionY &gt; 0)
-                verticalSnapOffsetSubsequence.append(lastPotentialSnapPositionY);
-        }
-    }
</del><ins>+    LayoutBoxExtent extents(valueForLength(insetOrOutsetBox.top(), rect.height()), valueForLength(insetOrOutsetBox.right(), rect.width()), valueForLength(insetOrOutsetBox.bottom(), rect.height()), valueForLength(insetOrOutsetBox.left(), rect.width()));
+    auto snapPortOrArea(rect);
+    if (insetOrOutset == InsetOrOutset::Inset)
+        snapPortOrArea.contract(extents);
+    else
+        snapPortOrArea.expand(extents);
+    return snapPortOrArea;
</ins><span class="cx"> }
</span><span class="cx"> 
</span><del>-static LayoutUnit destinationOffsetForViewSize(ScrollEventAxis axis, const LengthSize&amp; destination, LayoutUnit viewSize)
</del><ins>+static LayoutUnit computeScrollSnapAlignOffset(const LayoutUnit&amp; leftOrTop, const LayoutUnit&amp; widthOrHeight, ScrollSnapAxisAlignType alignment)
</ins><span class="cx"> {
</span><del>-    const Length&amp; dimension = (axis == ScrollEventAxis::Horizontal) ? destination.width() : destination.height();
-    return valueForLength(dimension, viewSize);
</del><ins>+    switch (alignment) {
+    case ScrollSnapAxisAlignType::Start:
+        return leftOrTop;
+    case ScrollSnapAxisAlignType::Center:
+        return leftOrTop + widthOrHeight / 2;
+    case ScrollSnapAxisAlignType::End:
+        return leftOrTop + widthOrHeight;
+    default:
+        ASSERT_NOT_REACHED();
+        return 0;
+    }
</ins><span class="cx"> }
</span><del>-    
-static void updateFromStyle(Vector&lt;LayoutUnit&gt;&amp; snapOffsets, const RenderStyle&amp; style, ScrollEventAxis axis, LayoutUnit viewSize, LayoutUnit scrollSize, Vector&lt;LayoutUnit&gt;&amp; snapOffsetSubsequence)
-{
-    std::sort(snapOffsetSubsequence.begin(), snapOffsetSubsequence.end());
-    if (snapOffsetSubsequence.isEmpty())
-        snapOffsetSubsequence.append(0);
</del><span class="cx"> 
</span><del>-    auto* points = (axis == ScrollEventAxis::Horizontal) ? style.scrollSnapPointsX() : style.scrollSnapPointsY();
-    bool hasRepeat = points ? points-&gt;hasRepeat : false;
-    LayoutUnit repeatOffset = points ? valueForLength(points-&gt;repeatOffset, viewSize) : LayoutUnit::fromPixel(1);
-    repeatOffset = std::max&lt;LayoutUnit&gt;(repeatOffset, LayoutUnit::fromPixel(1));
-    
-    LayoutUnit destinationOffset = destinationOffsetForViewSize(axis, style.scrollSnapDestination(), viewSize);
-    LayoutUnit curSnapPositionShift = 0;
-    LayoutUnit maxScrollOffset = scrollSize - viewSize;
-    LayoutUnit lastSnapPosition = curSnapPositionShift;
-    do {
-        for (auto&amp; snapPosition : snapOffsetSubsequence) {
-            LayoutUnit potentialSnapPosition = curSnapPositionShift + snapPosition - destinationOffset;
-            if (potentialSnapPosition &lt; 0)
-                continue;
</del><ins>+#if !LOG_DISABLED
</ins><span class="cx"> 
</span><del>-            if (potentialSnapPosition &gt;= maxScrollOffset)
-                break;
</del><ins>+static String snapOffsetsToString(const Vector&lt;LayoutUnit&gt;&amp; snapOffsets)
+{
+    StringBuilder s;
+    s.append(&quot;[ &quot;);
+    for (auto offset : snapOffsets)
+        s.append(String::format(&quot;%.1f &quot;, offset.toFloat()));
</ins><span class="cx"> 
</span><del>-            // Don't add another zero offset value.
-            if (potentialSnapPosition)
-                snapOffsets.append(potentialSnapPosition);
-
-            lastSnapPosition = potentialSnapPosition + destinationOffset;
-        }
-        curSnapPositionShift = lastSnapPosition + repeatOffset;
-    } while (hasRepeat &amp;&amp; curSnapPositionShift &lt; maxScrollOffset);
-
-    if (snapOffsets.isEmpty())
-        return;
-
-    // Always put a snap point on the zero offset.
-    if (snapOffsets.first())
-        snapOffsets.insert(0, 0);
-
-    // Always put a snap point on the maximum scroll offset.
-    // Not a part of the spec, but necessary to prevent unreachable content when snapping.
-    if (snapOffsets.last() != maxScrollOffset)
-        snapOffsets.append(maxScrollOffset);
</del><ins>+    s.append(&quot;]&quot;);
+    return s.toString();
</ins><span class="cx"> }
</span><span class="cx"> 
</span><del>-static bool styleUsesElements(ScrollEventAxis axis, const RenderStyle&amp; style)
</del><ins>+static String snapPortOrAreaToString(const LayoutRect&amp; rect)
</ins><span class="cx"> {
</span><del>-    const ScrollSnapPoints* scrollSnapPoints = (axis == ScrollEventAxis::Horizontal) ? style.scrollSnapPointsX() : style.scrollSnapPointsY();
-    if (scrollSnapPoints)
-        return scrollSnapPoints-&gt;usesElements;
</del><ins>+    return String::format(&quot;{{%.1f, %.1f} {%.1f, %.1f}}&quot;, rect.x().toFloat(), rect.y().toFloat(), rect.width().toFloat(), rect.height().toFloat());
+}
</ins><span class="cx"> 
</span><del>-    const Length&amp; destination = (axis == ScrollEventAxis::Horizontal) ? style.scrollSnapDestination().width() : style.scrollSnapDestination().height();
</del><ins>+#endif
</ins><span class="cx"> 
</span><del>-    return !destination.isUndefined();
-}
-    
</del><span class="cx"> void updateSnapOffsetsForScrollableArea(ScrollableArea&amp; scrollableArea, HTMLElement&amp; scrollingElement, const RenderBox&amp; scrollingElementBox, const RenderStyle&amp; scrollingElementStyle)
</span><span class="cx"> {
</span><del>-    if (scrollingElementStyle.scrollSnapType() == ScrollSnapType::None) {
</del><ins>+    auto* scrollContainer = scrollingElement.renderer();
+    auto scrollSnapType = scrollingElementStyle.scrollSnapType();
+    if (!scrollContainer || scrollSnapType.strictness == ScrollSnapStrictness::None || scrollContainer-&gt;view().boxesWithScrollSnapPositions().isEmpty()) {
</ins><span class="cx">         scrollableArea.clearHorizontalSnapOffsets();
</span><span class="cx">         scrollableArea.clearVerticalSnapOffsets();
</span><span class="cx">         return;
</span><span class="cx">     }
</span><span class="cx"> 
</span><del>-    LayoutRect viewSize = scrollingElementBox.contentBoxRect();
-    LayoutUnit viewWidth = viewSize.width();
-    LayoutUnit viewHeight = viewSize.height();
-    LayoutUnit scrollWidth = scrollingElementBox.scrollWidth();
-    LayoutUnit scrollHeight = scrollingElementBox.scrollHeight();
-    bool canComputeHorizontalOffsets = scrollWidth &gt; 0 &amp;&amp; viewWidth &gt; 0 &amp;&amp; viewWidth &lt; scrollWidth;
-    bool canComputeVerticalOffsets = scrollHeight &gt; 0 &amp;&amp; viewHeight &gt; 0 &amp;&amp; viewHeight &lt; scrollHeight;
</del><ins>+    auto verticalSnapOffsets = std::make_unique&lt;Vector&lt;LayoutUnit&gt;&gt;();
+    auto horizontalSnapOffsets = std::make_unique&lt;Vector&lt;LayoutUnit&gt;&gt;();
+    HashSet&lt;float&gt; seenVerticalSnapOffsets;
+    HashSet&lt;float&gt; seenHorizontalSnapOffsets;
+    bool hasHorizontalSnapOffsets = scrollSnapType.axis == ScrollSnapAxis::Both || scrollSnapType.axis == ScrollSnapAxis::XAxis || scrollSnapType.axis == ScrollSnapAxis::Inline;
+    bool hasVerticalSnapOffsets = scrollSnapType.axis == ScrollSnapAxis::Both || scrollSnapType.axis == ScrollSnapAxis::YAxis || scrollSnapType.axis == ScrollSnapAxis::Block;
+    auto maxScrollLeft = scrollingElementBox.scrollWidth() - scrollingElementBox.contentWidth();
+    auto maxScrollTop = scrollingElementBox.scrollHeight() - scrollingElementBox.contentHeight();
+    LayoutPoint containerScrollOffset(scrollingElementBox.scrollLeft(), scrollingElementBox.scrollTop());
</ins><span class="cx"> 
</span><del>-    if (!canComputeHorizontalOffsets)
-        scrollableArea.clearHorizontalSnapOffsets();
-    if (!canComputeVerticalOffsets)
-        scrollableArea.clearVerticalSnapOffsets();
</del><ins>+    // The bounds of the scrolling container's snap port, where the top left of the scrolling container's border box is the origin.
+    auto scrollSnapPort = computeScrollSnapPortOrAreaRect(scrollingElementBox.paddingBoxRect(), scrollingElementStyle.scrollPadding(), InsetOrOutset::Inset);
+#if !LOG_DISABLED
+    LOG(Scrolling, &quot;Computing scroll snap offsets in snap port: %s&quot;, snapPortOrAreaToString(scrollSnapPort).utf8().data());
+#endif
+    for (auto* child : scrollContainer-&gt;view().boxesWithScrollSnapPositions()) {
+        if (child-&gt;findEnclosingScrollableContainer() != scrollContainer)
+            continue;
</ins><span class="cx"> 
</span><del>-    if (!canComputeHorizontalOffsets &amp;&amp; !canComputeVerticalOffsets)
-        return;
-
-    Vector&lt;LayoutUnit&gt; horizontalSnapOffsetSubsequence;
-    Vector&lt;LayoutUnit&gt; verticalSnapOffsetSubsequence;
-
-    bool scrollSnapPointsXUsesElements = styleUsesElements(ScrollEventAxis::Horizontal, scrollingElementStyle);
-    bool scrollSnapPointsYUsesElements = styleUsesElements(ScrollEventAxis::Vertical, scrollingElementStyle);
-
-    if (scrollSnapPointsXUsesElements || scrollSnapPointsYUsesElements) {
-        bool shouldAddHorizontalChildOffsets = scrollSnapPointsXUsesElements &amp;&amp; canComputeHorizontalOffsets;
-        bool shouldAddVerticalChildOffsets = scrollSnapPointsYUsesElements &amp;&amp; canComputeVerticalOffsets;
-        appendChildSnapOffsets(scrollingElement, shouldAddHorizontalChildOffsets, horizontalSnapOffsetSubsequence, shouldAddVerticalChildOffsets, verticalSnapOffsetSubsequence);
</del><ins>+        // The bounds of the child element's snap area, where the top left of the scrolling container's border box is the origin.
+        // The snap area is the bounding box of the child element's border box, after applying transformations.
+        auto scrollSnapArea = LayoutRect(child-&gt;localToContainerQuad(FloatQuad(child-&gt;borderBoundingBox()), scrollingElement.renderBox()).boundingBox());
+        scrollSnapArea.moveBy(containerScrollOffset);
+        scrollSnapArea = computeScrollSnapPortOrAreaRect(scrollSnapArea, child-&gt;style().scrollSnapMargin(), InsetOrOutset::Outset);
+#if !LOG_DISABLED
+        LOG(Scrolling, &quot;    Considering scroll snap area: %s&quot;, snapPortOrAreaToString(scrollSnapArea).utf8().data());
+#endif
+        auto alignment = child-&gt;style().scrollSnapAlign();
+        if (hasHorizontalSnapOffsets &amp;&amp; alignment.x != ScrollSnapAxisAlignType::None) {
+            auto absoluteScrollOffset = clampTo&lt;LayoutUnit&gt;(computeScrollSnapAlignOffset(scrollSnapArea.x(), scrollSnapArea.width(), alignment.x) - computeScrollSnapAlignOffset(scrollSnapPort.x(), scrollSnapPort.width(), alignment.x), 0, maxScrollLeft);
+            if (!seenHorizontalSnapOffsets.contains(absoluteScrollOffset)) {
+                seenHorizontalSnapOffsets.add(absoluteScrollOffset);
+                horizontalSnapOffsets-&gt;append(absoluteScrollOffset);
+            }
+        }
+        if (hasVerticalSnapOffsets &amp;&amp; alignment.y != ScrollSnapAxisAlignType::None) {
+            auto absoluteScrollOffset = clampTo&lt;LayoutUnit&gt;(computeScrollSnapAlignOffset(scrollSnapArea.y(), scrollSnapArea.height(), alignment.y) - computeScrollSnapAlignOffset(scrollSnapPort.y(), scrollSnapPort.height(), alignment.y), 0, maxScrollTop);
+            if (!seenVerticalSnapOffsets.contains(absoluteScrollOffset)) {
+                seenVerticalSnapOffsets.add(absoluteScrollOffset);
+                verticalSnapOffsets-&gt;append(absoluteScrollOffset);
+            }
+        }
</ins><span class="cx">     }
</span><span class="cx"> 
</span><del>-    if (scrollingElementStyle.scrollSnapPointsX() &amp;&amp; !scrollSnapPointsXUsesElements &amp;&amp; canComputeHorizontalOffsets) {
-        for (auto&amp; snapLength : scrollingElementStyle.scrollSnapPointsX()-&gt;offsets)
-            horizontalSnapOffsetSubsequence.append(valueForLength(snapLength, viewWidth));
-    }
</del><ins>+    std::sort(horizontalSnapOffsets-&gt;begin(), horizontalSnapOffsets-&gt;end());
+    if (horizontalSnapOffsets-&gt;size()) {
+        if (horizontalSnapOffsets-&gt;last() != maxScrollLeft)
+            horizontalSnapOffsets-&gt;append(maxScrollLeft);
+        if (horizontalSnapOffsets-&gt;first())
+            horizontalSnapOffsets-&gt;insert(0, 0);
+#if !LOG_DISABLED
+        LOG(Scrolling, &quot; =&gt; Computed horizontal scroll snap offsets: %s&quot;, snapOffsetsToString(*horizontalSnapOffsets).utf8().data());
+#endif
+        scrollableArea.setHorizontalSnapOffsets(WTFMove(horizontalSnapOffsets));
+    } else
+        scrollableArea.clearHorizontalSnapOffsets();
</ins><span class="cx"> 
</span><del>-    if (scrollingElementStyle.scrollSnapPointsY() &amp;&amp; !scrollSnapPointsYUsesElements &amp;&amp; canComputeVerticalOffsets) {
-        for (auto&amp; snapLength : scrollingElementStyle.scrollSnapPointsY()-&gt;offsets)
-            verticalSnapOffsetSubsequence.append(valueForLength(snapLength, viewHeight));
-    }
-
-    if (canComputeHorizontalOffsets) {
-        auto horizontalSnapOffsets = std::make_unique&lt;Vector&lt;LayoutUnit&gt;&gt;();
-        updateFromStyle(*horizontalSnapOffsets, scrollingElementStyle, ScrollEventAxis::Horizontal, viewWidth, scrollWidth, horizontalSnapOffsetSubsequence);
-        if (horizontalSnapOffsets-&gt;isEmpty())
-            scrollableArea.clearHorizontalSnapOffsets();
-        else
-            scrollableArea.setHorizontalSnapOffsets(WTFMove(horizontalSnapOffsets));
-    }
-    if (canComputeVerticalOffsets) {
-        auto verticalSnapOffsets = std::make_unique&lt;Vector&lt;LayoutUnit&gt;&gt;();
-        updateFromStyle(*verticalSnapOffsets, scrollingElementStyle, ScrollEventAxis::Vertical, viewHeight, scrollHeight, verticalSnapOffsetSubsequence);
-        if (verticalSnapOffsets-&gt;isEmpty())
-            scrollableArea.clearVerticalSnapOffsets();
-        else
-            scrollableArea.setVerticalSnapOffsets(WTFMove(verticalSnapOffsets));
-    }
</del><ins>+    std::sort(verticalSnapOffsets-&gt;begin(), verticalSnapOffsets-&gt;end());
+    if (verticalSnapOffsets-&gt;size()) {
+        if (verticalSnapOffsets-&gt;last() != maxScrollTop)
+            verticalSnapOffsets-&gt;append(maxScrollTop);
+        if (verticalSnapOffsets-&gt;first())
+            verticalSnapOffsets-&gt;insert(0, 0);
+#if !LOG_DISABLED
+        LOG(Scrolling, &quot; =&gt; Computed vertical scroll snap offsets: %s&quot;, snapOffsetsToString(*verticalSnapOffsets).utf8().data());
+#endif
+        scrollableArea.setVerticalSnapOffsets(WTFMove(verticalSnapOffsets));
+    } else
+        scrollableArea.clearVerticalSnapOffsets();
</ins><span class="cx"> }
</span><span class="cx"> 
</span><span class="cx"> } // namespace WebCore
</span></span></pre></div>
<a id="trunkSourceWebCoreplatformcocoaScrollControllermm"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/platform/cocoa/ScrollController.mm (210023 => 210024)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/platform/cocoa/ScrollController.mm        2016-12-20 18:26:10 UTC (rev 210023)
+++ trunk/Source/WebCore/platform/cocoa/ScrollController.mm        2016-12-20 18:44:38 UTC (rev 210024)
</span><span class="lines">@@ -583,9 +583,13 @@
</span><span class="cx"> {
</span><span class="cx">     if (auto* snapOffsets = scrollableArea.horizontalSnapOffsets())
</span><span class="cx">         updateScrollSnapPoints(ScrollEventAxis::Horizontal, *snapOffsets);
</span><ins>+    else
+        updateScrollSnapPoints(ScrollEventAxis::Horizontal, { });
</ins><span class="cx"> 
</span><span class="cx">     if (auto* snapOffsets = scrollableArea.verticalSnapOffsets())
</span><span class="cx">         updateScrollSnapPoints(ScrollEventAxis::Vertical, *snapOffsets);
</span><ins>+    else
+        updateScrollSnapPoints(ScrollEventAxis::Vertical, { });
</ins><span class="cx"> }
</span><span class="cx"> 
</span><span class="cx"> void ScrollController::updateScrollSnapPoints(ScrollEventAxis axis, const Vector&lt;LayoutUnit&gt;&amp; snapPoints)
</span></span></pre></div>
<a id="trunkSourceWebCorerenderingRenderBoxcpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/rendering/RenderBox.cpp (210023 => 210024)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/rendering/RenderBox.cpp        2016-12-20 18:26:10 UTC (rev 210023)
+++ trunk/Source/WebCore/rendering/RenderBox.cpp        2016-12-20 18:44:38 UTC (rev 210024)
</span><span class="lines">@@ -66,6 +66,7 @@
</span><span class="cx"> #include &quot;RenderView.h&quot;
</span><span class="cx"> #include &quot;ScrollAnimator.h&quot;
</span><span class="cx"> #include &quot;ScrollbarTheme.h&quot;
</span><ins>+#include &quot;StyleScrollSnapPoints.h&quot;
</ins><span class="cx"> #include &quot;TransformState.h&quot;
</span><span class="cx"> #include &quot;htmlediting.h&quot;
</span><span class="cx"> #include &lt;algorithm&gt;
</span><span class="lines">@@ -323,11 +324,12 @@
</span><span class="cx">         view().repaintRootContents();
</span><span class="cx"> 
</span><span class="cx"> #if ENABLE(CSS_SCROLL_SNAP)
</span><del>-    if (!newStyle.scrollSnapCoordinates().isEmpty() || (oldStyle &amp;&amp; !oldStyle-&gt;scrollSnapCoordinates().isEmpty())) {
-        if (newStyle.scrollSnapCoordinates().isEmpty())
-            view().unregisterBoxWithScrollSnapCoordinates(*this);
</del><ins>+    bool boxContributesSnapPositions = newStyle.scrollSnapArea().hasSnapPosition();
+    if (boxContributesSnapPositions || (oldStyle &amp;&amp; oldStyle-&gt;scrollSnapArea().hasSnapPosition())) {
+        if (boxContributesSnapPositions)
+            view().registerBoxWithScrollSnapPositions(*this);
</ins><span class="cx">         else
</span><del>-            view().registerBoxWithScrollSnapCoordinates(*this);
</del><ins>+            view().unregisterBoxWithScrollSnapPositions(*this);
</ins><span class="cx">     }
</span><span class="cx"> #endif
</span><span class="cx"> 
</span><span class="lines">@@ -453,8 +455,8 @@
</span><span class="cx"> void RenderBox::willBeRemovedFromTree()
</span><span class="cx"> {
</span><span class="cx"> #if ENABLE(CSS_SCROLL_SNAP)
</span><del>-    if (hasInitializedStyle() &amp;&amp; !style().scrollSnapCoordinates().isEmpty())
-        view().unregisterBoxWithScrollSnapCoordinates(*this);
</del><ins>+    if (hasInitializedStyle() &amp;&amp; style().scrollSnapArea().hasSnapPosition())
+        view().unregisterBoxWithScrollSnapPositions(*this);
</ins><span class="cx"> #endif
</span><span class="cx">     
</span><span class="cx">     RenderBoxModelObject::willBeRemovedFromTree();
</span></span></pre></div>
<a id="trunkSourceWebCorerenderingRenderLayerModelObjectcpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/rendering/RenderLayerModelObject.cpp (210023 => 210024)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/rendering/RenderLayerModelObject.cpp        2016-12-20 18:26:10 UTC (rev 210023)
+++ trunk/Source/WebCore/rendering/RenderLayerModelObject.cpp        2016-12-20 18:44:38 UTC (rev 210024)
</span><span class="lines">@@ -29,6 +29,7 @@
</span><span class="cx"> #include &quot;RenderLayerCompositor.h&quot;
</span><span class="cx"> #include &quot;RenderView.h&quot;
</span><span class="cx"> #include &quot;Settings.h&quot;
</span><ins>+#include &quot;StyleScrollSnapPoints.h&quot;
</ins><span class="cx"> 
</span><span class="cx"> namespace WebCore {
</span><span class="cx"> 
</span><span class="lines">@@ -129,10 +130,7 @@
</span><span class="cx"> #if ENABLE(CSS_SCROLL_SNAP)
</span><span class="cx"> static bool scrollSnapContainerRequiresUpdateForStyleUpdate(const RenderStyle&amp; oldStyle, const RenderStyle&amp; newStyle)
</span><span class="cx"> {
</span><del>-    return !(oldStyle.scrollSnapType() == newStyle.scrollSnapType()
-        &amp;&amp; oldStyle.scrollSnapPointsX() == newStyle.scrollSnapPointsX()
-        &amp;&amp; oldStyle.scrollSnapPointsY() == newStyle.scrollSnapPointsY()
-        &amp;&amp; oldStyle.scrollSnapDestination() == newStyle.scrollSnapDestination());
</del><ins>+    return oldStyle.scrollSnapPort() != newStyle.scrollSnapPort();
</ins><span class="cx"> }
</span><span class="cx"> #endif
</span><span class="cx"> 
</span><span class="lines">@@ -198,11 +196,11 @@
</span><span class="cx">             frameView.updateScrollingCoordinatorScrollSnapProperties();
</span><span class="cx">         }
</span><span class="cx">     }
</span><del>-    if (oldStyle &amp;&amp; oldStyle-&gt;scrollSnapCoordinates() != newStyle.scrollSnapCoordinates()) {
</del><ins>+    if (oldStyle &amp;&amp; oldStyle-&gt;scrollSnapArea() != newStyle.scrollSnapArea()) {
</ins><span class="cx">         const RenderBox* scrollSnapBox = enclosingBox().findEnclosingScrollableContainer();
</span><span class="cx">         if (scrollSnapBox &amp;&amp; scrollSnapBox-&gt;layer()) {
</span><span class="cx">             const RenderStyle&amp; style = scrollSnapBox-&gt;style();
</span><del>-            if (style.scrollSnapType() != ScrollSnapType::None) {
</del><ins>+            if (style.scrollSnapType().strictness != ScrollSnapStrictness::None) {
</ins><span class="cx">                 scrollSnapBox-&gt;layer()-&gt;updateSnapOffsets();
</span><span class="cx">                 scrollSnapBox-&gt;layer()-&gt;updateScrollSnapState();
</span><span class="cx">                 if (scrollSnapBox-&gt;isBody() || scrollSnapBox-&gt;isDocumentElementRenderer())
</span></span></pre></div>
<a id="trunkSourceWebCorerenderingRenderViewcpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/rendering/RenderView.cpp (210023 => 210024)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/rendering/RenderView.cpp        2016-12-20 18:26:10 UTC (rev 210023)
+++ trunk/Source/WebCore/rendering/RenderView.cpp        2016-12-20 18:44:38 UTC (rev 210024)
</span><span class="lines">@@ -1473,14 +1473,14 @@
</span><span class="cx"> }
</span><span class="cx"> 
</span><span class="cx"> #if ENABLE(CSS_SCROLL_SNAP)
</span><del>-void RenderView::registerBoxWithScrollSnapCoordinates(const RenderBox&amp; box)
</del><ins>+void RenderView::registerBoxWithScrollSnapPositions(const RenderBox&amp; box)
</ins><span class="cx"> {
</span><del>-    m_boxesWithScrollSnapCoordinates.add(&amp;box);
</del><ins>+    m_boxesWithScrollSnapPositions.add(&amp;box);
</ins><span class="cx"> }
</span><span class="cx"> 
</span><del>-void RenderView::unregisterBoxWithScrollSnapCoordinates(const RenderBox&amp; box)
</del><ins>+void RenderView::unregisterBoxWithScrollSnapPositions(const RenderBox&amp; box)
</ins><span class="cx"> {
</span><del>-    m_boxesWithScrollSnapCoordinates.remove(&amp;box);
</del><ins>+    m_boxesWithScrollSnapPositions.remove(&amp;box);
</ins><span class="cx"> }
</span><span class="cx"> #endif
</span><span class="cx"> 
</span></span></pre></div>
<a id="trunkSourceWebCorerenderingRenderViewh"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/rendering/RenderView.h (210023 => 210024)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/rendering/RenderView.h        2016-12-20 18:26:10 UTC (rev 210023)
+++ trunk/Source/WebCore/rendering/RenderView.h        2016-12-20 18:44:38 UTC (rev 210024)
</span><span class="lines">@@ -249,9 +249,9 @@
</span><span class="cx">     void releaseProtectedRenderWidgets() { m_protectedRenderWidgets.clear(); }
</span><span class="cx"> 
</span><span class="cx"> #if ENABLE(CSS_SCROLL_SNAP)
</span><del>-    void registerBoxWithScrollSnapCoordinates(const RenderBox&amp;);
-    void unregisterBoxWithScrollSnapCoordinates(const RenderBox&amp;);
-    const HashSet&lt;const RenderBox*&gt;&amp; boxesWithScrollSnapCoordinates() { return m_boxesWithScrollSnapCoordinates; }
</del><ins>+    void registerBoxWithScrollSnapPositions(const RenderBox&amp;);
+    void unregisterBoxWithScrollSnapPositions(const RenderBox&amp;);
+    const HashSet&lt;const RenderBox*&gt;&amp; boxesWithScrollSnapPositions() { return m_boxesWithScrollSnapPositions; }
</ins><span class="cx"> #endif
</span><span class="cx"> 
</span><span class="cx"> #if !ASSERT_DISABLED
</span><span class="lines">@@ -393,7 +393,7 @@
</span><span class="cx">     SelectionRectGatherer m_selectionRectGatherer;
</span><span class="cx"> #endif
</span><span class="cx"> #if ENABLE(CSS_SCROLL_SNAP)
</span><del>-    HashSet&lt;const RenderBox*&gt; m_boxesWithScrollSnapCoordinates;
</del><ins>+    HashSet&lt;const RenderBox*&gt; m_boxesWithScrollSnapPositions;
</ins><span class="cx"> #endif
</span><span class="cx"> };
</span><span class="cx"> 
</span></span></pre></div>
<a id="trunkSourceWebCorerenderingstyleRenderStylecpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/rendering/style/RenderStyle.cpp (210023 => 210024)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/rendering/style/RenderStyle.cpp        2016-12-20 18:26:10 UTC (rev 210023)
+++ trunk/Source/WebCore/rendering/style/RenderStyle.cpp        2016-12-20 18:44:38 UTC (rev 210024)
</span><span class="lines">@@ -1958,64 +1958,135 @@
</span><span class="cx"> }
</span><span class="cx"> 
</span><span class="cx"> #if ENABLE(CSS_SCROLL_SNAP)
</span><del>-LengthSize RenderStyle::initialScrollSnapDestination()
</del><ins>+ScrollSnapType RenderStyle::initialScrollSnapType()
</ins><span class="cx"> {
</span><del>-    return defaultScrollSnapDestination();
</del><ins>+    return { };
</ins><span class="cx"> }
</span><span class="cx"> 
</span><del>-Vector&lt;LengthSize&gt; RenderStyle::initialScrollSnapCoordinates()
</del><ins>+ScrollSnapAlign RenderStyle::initialScrollSnapAlign()
</ins><span class="cx"> {
</span><del>-    return Vector&lt;LengthSize&gt;();
</del><ins>+    return { };
</ins><span class="cx"> }
</span><span class="cx"> 
</span><del>-const ScrollSnapPoints* RenderStyle::scrollSnapPointsX() const
</del><ins>+const StyleScrollSnapArea&amp; RenderStyle::scrollSnapArea() const
</ins><span class="cx"> {
</span><del>-    return rareNonInheritedData-&gt;m_scrollSnapPoints-&gt;xPoints.get();
</del><ins>+    return *rareNonInheritedData-&gt;m_scrollSnapArea;
</ins><span class="cx"> }
</span><span class="cx"> 
</span><del>-const ScrollSnapPoints* RenderStyle::scrollSnapPointsY() const
</del><ins>+const StyleScrollSnapPort&amp; RenderStyle::scrollSnapPort() const
</ins><span class="cx"> {
</span><del>-    return rareNonInheritedData-&gt;m_scrollSnapPoints-&gt;yPoints.get();
</del><ins>+    return *rareNonInheritedData-&gt;m_scrollSnapPort;
</ins><span class="cx"> }
</span><span class="cx"> 
</span><del>-const LengthSize&amp; RenderStyle::scrollSnapDestination() const
</del><ins>+const ScrollSnapType&amp; RenderStyle::scrollSnapType() const
</ins><span class="cx"> {
</span><del>-    return rareNonInheritedData-&gt;m_scrollSnapPoints-&gt;destination;
</del><ins>+    return rareNonInheritedData-&gt;m_scrollSnapPort-&gt;type;
</ins><span class="cx"> }
</span><span class="cx"> 
</span><del>-const Vector&lt;LengthSize&gt;&amp; RenderStyle::scrollSnapCoordinates() const
</del><ins>+const LengthBox&amp; RenderStyle::scrollPadding() const
</ins><span class="cx"> {
</span><del>-    return rareNonInheritedData-&gt;m_scrollSnapPoints-&gt;coordinates;
</del><ins>+    return rareNonInheritedData-&gt;m_scrollSnapPort-&gt;scrollPadding;
</ins><span class="cx"> }
</span><span class="cx"> 
</span><del>-void RenderStyle::setScrollSnapPointsX(std::unique_ptr&lt;ScrollSnapPoints&gt; points)
</del><ins>+const Length&amp; RenderStyle::scrollPaddingTop() const
</ins><span class="cx"> {
</span><del>-    if (rareNonInheritedData-&gt;m_scrollSnapPoints-&gt;xPoints.get() == points.get())
-        return;
-    rareNonInheritedData.access()-&gt;m_scrollSnapPoints.access()-&gt;xPoints = WTFMove(points);
</del><ins>+    return scrollPadding().top();
</ins><span class="cx"> }
</span><span class="cx"> 
</span><del>-void RenderStyle::setScrollSnapPointsY(std::unique_ptr&lt;ScrollSnapPoints&gt; points)
</del><ins>+const Length&amp; RenderStyle::scrollPaddingBottom() const
</ins><span class="cx"> {
</span><del>-    if (rareNonInheritedData-&gt;m_scrollSnapPoints-&gt;yPoints.get() == points.get())
-        return;
-    rareNonInheritedData.access()-&gt;m_scrollSnapPoints.access()-&gt;yPoints = WTFMove(points);
</del><ins>+    return scrollPadding().bottom();
</ins><span class="cx"> }
</span><span class="cx"> 
</span><del>-void RenderStyle::setScrollSnapDestination(LengthSize destination)
</del><ins>+const Length&amp; RenderStyle::scrollPaddingLeft() const
</ins><span class="cx"> {
</span><del>-    if (rareNonInheritedData-&gt;m_scrollSnapPoints-&gt;destination == destination)
-        return;
-    rareNonInheritedData.access()-&gt;m_scrollSnapPoints.access()-&gt;destination = WTFMove(destination);
</del><ins>+    return scrollPadding().left();
</ins><span class="cx"> }
</span><span class="cx"> 
</span><del>-void RenderStyle::setScrollSnapCoordinates(Vector&lt;LengthSize&gt; coordinates)
</del><ins>+const Length&amp; RenderStyle::scrollPaddingRight() const
</ins><span class="cx"> {
</span><del>-    if (rareNonInheritedData-&gt;m_scrollSnapPoints-&gt;coordinates == coordinates)
-        return;
-    rareNonInheritedData.access()-&gt;m_scrollSnapPoints.access()-&gt;coordinates = WTFMove(coordinates);
</del><ins>+    return scrollPadding().right();
</ins><span class="cx"> }
</span><span class="cx"> 
</span><ins>+const ScrollSnapAlign&amp; RenderStyle::scrollSnapAlign() const
+{
+    return rareNonInheritedData-&gt;m_scrollSnapArea-&gt;alignment;
+}
+
+const LengthBox&amp; RenderStyle::scrollSnapMargin() const
+{
+    return rareNonInheritedData-&gt;m_scrollSnapArea-&gt;scrollSnapMargin;
+}
+
+const Length&amp; RenderStyle::scrollSnapMarginTop() const
+{
+    return scrollSnapMargin().top();
+}
+
+const Length&amp; RenderStyle::scrollSnapMarginBottom() const
+{
+    return scrollSnapMargin().bottom();
+}
+
+const Length&amp; RenderStyle::scrollSnapMarginLeft() const
+{
+    return scrollSnapMargin().left();
+}
+
+const Length&amp; RenderStyle::scrollSnapMarginRight() const
+{
+    return scrollSnapMargin().right();
+}
+
+void RenderStyle::setScrollSnapType(const ScrollSnapType&amp; type)
+{
+    rareNonInheritedData.access()-&gt;m_scrollSnapPort.access()-&gt;type = type;
+}
+
+void RenderStyle::setScrollPaddingTop(const Length&amp; length)
+{
+    rareNonInheritedData.access()-&gt;m_scrollSnapPort.access()-&gt;scrollPadding.setTop(length);
+}
+
+void RenderStyle::setScrollPaddingBottom(const Length&amp; length)
+{
+    rareNonInheritedData.access()-&gt;m_scrollSnapPort.access()-&gt;scrollPadding.setBottom(length);
+}
+
+void RenderStyle::setScrollPaddingLeft(const Length&amp; length)
+{
+    rareNonInheritedData.access()-&gt;m_scrollSnapPort.access()-&gt;scrollPadding.setLeft(length);
+}
+
+void RenderStyle::setScrollPaddingRight(const Length&amp; length)
+{
+    rareNonInheritedData.access()-&gt;m_scrollSnapPort.access()-&gt;scrollPadding.setRight(length);
+}
+
+void RenderStyle::setScrollSnapAlign(const ScrollSnapAlign&amp; alignment)
+{
+    rareNonInheritedData.access()-&gt;m_scrollSnapArea.access()-&gt;alignment = alignment;
+}
+
+void RenderStyle::setScrollSnapMarginTop(const Length&amp; length)
+{
+    rareNonInheritedData.access()-&gt;m_scrollSnapArea.access()-&gt;scrollSnapMargin.setTop(length);
+}
+
+void RenderStyle::setScrollSnapMarginBottom(const Length&amp; length)
+{
+    rareNonInheritedData.access()-&gt;m_scrollSnapArea.access()-&gt;scrollSnapMargin.setBottom(length);
+}
+
+void RenderStyle::setScrollSnapMarginLeft(const Length&amp; length)
+{
+    rareNonInheritedData.access()-&gt;m_scrollSnapArea.access()-&gt;scrollSnapMargin.setLeft(length);
+}
+
+void RenderStyle::setScrollSnapMarginRight(const Length&amp; length)
+{
+    rareNonInheritedData.access()-&gt;m_scrollSnapArea.access()-&gt;scrollSnapMargin.setRight(length);
+}
</ins><span class="cx"> #endif
</span><span class="cx"> 
</span><span class="cx"> bool RenderStyle::hasReferenceFilterOnly() const
</span></span></pre></div>
<a id="trunkSourceWebCorerenderingstyleRenderStyleh"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/rendering/style/RenderStyle.h (210023 => 210024)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/rendering/style/RenderStyle.h        2016-12-20 18:26:10 UTC (rev 210023)
+++ trunk/Source/WebCore/rendering/style/RenderStyle.h        2016-12-20 18:44:38 UTC (rev 210024)
</span><span class="lines">@@ -113,7 +113,12 @@
</span><span class="cx"> class StyleResolver;
</span><span class="cx"> class TransformationMatrix;
</span><span class="cx"> 
</span><del>-struct ScrollSnapPoints;
</del><ins>+#if ENABLE(CSS_SCROLL_SNAP)
+class StyleScrollSnapPort;
+class StyleScrollSnapArea;
+struct ScrollSnapType;
+struct ScrollSnapAlign;
+#endif
</ins><span class="cx"> 
</span><span class="cx"> typedef Vector&lt;std::unique_ptr&lt;RenderStyle&gt;, 4&gt; PseudoStyleCache;
</span><span class="cx"> 
</span><span class="lines">@@ -1125,11 +1130,23 @@
</span><span class="cx"> #endif
</span><span class="cx"> 
</span><span class="cx"> #if ENABLE(CSS_SCROLL_SNAP)
</span><del>-    ScrollSnapType scrollSnapType() const { return static_cast&lt;ScrollSnapType&gt;(rareNonInheritedData-&gt;m_scrollSnapType); }
-    const ScrollSnapPoints* scrollSnapPointsX() const;
-    const ScrollSnapPoints* scrollSnapPointsY() const;
-    const LengthSize&amp; scrollSnapDestination() const;
-    WEBCORE_EXPORT const Vector&lt;LengthSize&gt;&amp; scrollSnapCoordinates() const;
</del><ins>+    // Scroll snap port style.
+    const StyleScrollSnapPort&amp; scrollSnapPort() const;
+    const ScrollSnapType&amp; scrollSnapType() const;
+    const LengthBox&amp; scrollPadding() const;
+    const Length&amp; scrollPaddingTop() const;
+    const Length&amp; scrollPaddingBottom() const;
+    const Length&amp; scrollPaddingLeft() const;
+    const Length&amp; scrollPaddingRight() const;
+
+    // Scroll snap area style.
+    const StyleScrollSnapArea&amp; scrollSnapArea() const;
+    const ScrollSnapAlign&amp; scrollSnapAlign() const;
+    const LengthBox&amp; scrollSnapMargin() const;
+    const Length&amp; scrollSnapMarginTop() const;
+    const Length&amp; scrollSnapMarginBottom() const;
+    const Length&amp; scrollSnapMarginLeft() const;
+    const Length&amp; scrollSnapMarginRight() const;
</ins><span class="cx"> #endif
</span><span class="cx"> 
</span><span class="cx"> #if ENABLE(TOUCH_EVENTS)
</span><span class="lines">@@ -1695,11 +1712,19 @@
</span><span class="cx"> #endif
</span><span class="cx"> 
</span><span class="cx"> #if ENABLE(CSS_SCROLL_SNAP)
</span><del>-    void setScrollSnapType(ScrollSnapType type) { SET_VAR(rareNonInheritedData, m_scrollSnapType, static_cast&lt;unsigned&gt;(type)); }
-    void setScrollSnapPointsX(std::unique_ptr&lt;ScrollSnapPoints&gt;);
-    void setScrollSnapPointsY(std::unique_ptr&lt;ScrollSnapPoints&gt;);
-    void setScrollSnapDestination(LengthSize);
-    void setScrollSnapCoordinates(Vector&lt;LengthSize&gt;);
</del><ins>+    // Scroll snap port style.
+    void setScrollSnapType(const ScrollSnapType&amp;);
+    void setScrollPaddingTop(const Length&amp;);
+    void setScrollPaddingBottom(const Length&amp;);
+    void setScrollPaddingLeft(const Length&amp;);
+    void setScrollPaddingRight(const Length&amp;);
+
+    // Scroll snap area style.
+    void setScrollSnapAlign(const ScrollSnapAlign&amp;);
+    void setScrollSnapMarginTop(const Length&amp;);
+    void setScrollSnapMarginBottom(const Length&amp;);
+    void setScrollSnapMarginLeft(const Length&amp;);
+    void setScrollSnapMarginRight(const Length&amp;);
</ins><span class="cx"> #endif
</span><span class="cx"> 
</span><span class="cx"> #if ENABLE(TOUCH_EVENTS)
</span><span class="lines">@@ -2067,11 +2092,10 @@
</span><span class="cx"> #endif
</span><span class="cx"> 
</span><span class="cx"> #if ENABLE(CSS_SCROLL_SNAP)
</span><del>-    static ScrollSnapType initialScrollSnapType() { return ScrollSnapType::None; }
-    static ScrollSnapPoints* initialScrollSnapPointsX() { return nullptr; }
-    static ScrollSnapPoints* initialScrollSnapPointsY() { return nullptr; }
-    static LengthSize initialScrollSnapDestination();
-    static Vector&lt;LengthSize&gt; initialScrollSnapCoordinates();
</del><ins>+    static ScrollSnapType initialScrollSnapType();
+    static ScrollSnapAlign initialScrollSnapAlign();
+    static Length initialScrollSnapMargin() { return Length(Fixed); }
+    static Length initialScrollPadding() { return Length(Fixed); }
</ins><span class="cx"> #endif
</span><span class="cx"> 
</span><span class="cx"> #if ENABLE(CSS_TRAILING_WORD)
</span></span></pre></div>
<a id="trunkSourceWebCorerenderingstyleRenderStyleConstantsh"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/rendering/style/RenderStyleConstants.h (210023 => 210024)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/rendering/style/RenderStyleConstants.h        2016-12-20 18:26:10 UTC (rev 210023)
+++ trunk/Source/WebCore/rendering/style/RenderStyleConstants.h        2016-12-20 18:44:38 UTC (rev 210024)
</span><span class="lines">@@ -681,11 +681,26 @@
</span><span class="cx"> #endif
</span><span class="cx"> 
</span><span class="cx"> #if ENABLE(CSS_SCROLL_SNAP)
</span><del>-enum class ScrollSnapType {
</del><ins>+enum class ScrollSnapStrictness {
</ins><span class="cx">     None,
</span><span class="cx">     Proximity,
</span><span class="cx">     Mandatory
</span><span class="cx"> };
</span><ins>+
+enum class ScrollSnapAxis {
+    XAxis,
+    YAxis,
+    Block,
+    Inline,
+    Both
+};
+
+enum class ScrollSnapAxisAlignType {
+    None,
+    Start,
+    Center,
+    End
+};
</ins><span class="cx"> #endif
</span><span class="cx"> 
</span><span class="cx"> #if ENABLE(CSS_TRAILING_WORD)
</span></span></pre></div>
<a id="trunkSourceWebCorerenderingstyleStyleRareNonInheritedDatacpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/rendering/style/StyleRareNonInheritedData.cpp (210023 => 210024)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/rendering/style/StyleRareNonInheritedData.cpp        2016-12-20 18:26:10 UTC (rev 210023)
+++ trunk/Source/WebCore/rendering/style/StyleRareNonInheritedData.cpp        2016-12-20 18:44:38 UTC (rev 210024)
</span><span class="lines">@@ -59,7 +59,8 @@
</span><span class="cx">     , m_gridItem(StyleGridItemData::create())
</span><span class="cx"> #endif
</span><span class="cx"> #if ENABLE(CSS_SCROLL_SNAP)
</span><del>-    , m_scrollSnapPoints(StyleScrollSnapPoints::create())
</del><ins>+    , m_scrollSnapPort(StyleScrollSnapPort::create())
+    , m_scrollSnapArea(StyleScrollSnapArea::create())
</ins><span class="cx"> #endif
</span><span class="cx">     , m_willChange(RenderStyle::initialWillChange())
</span><span class="cx">     , m_mask(FillLayer(MaskFillLayer))
</span><span class="lines">@@ -81,9 +82,6 @@
</span><span class="cx"> #if ENABLE(TOUCH_EVENTS)
</span><span class="cx">     , m_touchAction(static_cast&lt;unsigned&gt;(RenderStyle::initialTouchAction()))
</span><span class="cx"> #endif
</span><del>-#if ENABLE(CSS_SCROLL_SNAP)
-    , m_scrollSnapType(static_cast&lt;unsigned&gt;(RenderStyle::initialScrollSnapType()))
-#endif
</del><span class="cx">     , m_regionFragment(RenderStyle::initialRegionFragment())
</span><span class="cx">     , m_pageSizeType(PAGE_SIZE_AUTO)
</span><span class="cx">     , m_transformStyle3D(RenderStyle::initialTransformStyle3D())
</span><span class="lines">@@ -140,7 +138,8 @@
</span><span class="cx">     , m_gridItem(o.m_gridItem)
</span><span class="cx"> #endif
</span><span class="cx"> #if ENABLE(CSS_SCROLL_SNAP)
</span><del>-    , m_scrollSnapPoints(o.m_scrollSnapPoints)
</del><ins>+    , m_scrollSnapPort(o.m_scrollSnapPort)
+    , m_scrollSnapArea(o.m_scrollSnapArea)
</ins><span class="cx"> #endif
</span><span class="cx">     , m_content(o.m_content ? o.m_content-&gt;clone() : nullptr)
</span><span class="cx">     , m_counterDirectives(o.m_counterDirectives ? clone(*o.m_counterDirectives) : nullptr)
</span><span class="lines">@@ -178,9 +177,6 @@
</span><span class="cx"> #if ENABLE(TOUCH_EVENTS)
</span><span class="cx">     , m_touchAction(o.m_touchAction)
</span><span class="cx"> #endif
</span><del>-#if ENABLE(CSS_SCROLL_SNAP)
-    , m_scrollSnapType(o.m_scrollSnapType)
-#endif
</del><span class="cx">     , m_regionFragment(o.m_regionFragment)
</span><span class="cx">     , m_pageSizeType(o.m_pageSizeType)
</span><span class="cx">     , m_transformStyle3D(o.m_transformStyle3D)
</span><span class="lines">@@ -248,7 +244,8 @@
</span><span class="cx">         &amp;&amp; m_gridItem == o.m_gridItem
</span><span class="cx"> #endif
</span><span class="cx"> #if ENABLE(CSS_SCROLL_SNAP)
</span><del>-        &amp;&amp; m_scrollSnapPoints == o.m_scrollSnapPoints
</del><ins>+        &amp;&amp; m_scrollSnapPort == o.m_scrollSnapPort
+        &amp;&amp; m_scrollSnapArea == o.m_scrollSnapArea
</ins><span class="cx"> #endif
</span><span class="cx">         &amp;&amp; contentDataEquivalent(o)
</span><span class="cx">         &amp;&amp; arePointingToEqualData(m_counterDirectives, o.m_counterDirectives)
</span><span class="lines">@@ -298,9 +295,6 @@
</span><span class="cx"> #if ENABLE(TOUCH_EVENTS)
</span><span class="cx">         &amp;&amp; m_touchAction == o.m_touchAction
</span><span class="cx"> #endif
</span><del>-#if ENABLE(CSS_SCROLL_SNAP)
-        &amp;&amp; m_scrollSnapType == o.m_scrollSnapType
-#endif
</del><span class="cx"> #if ENABLE(CSS_COMPOSITING)
</span><span class="cx">         &amp;&amp; m_effectiveBlendMode == o.m_effectiveBlendMode
</span><span class="cx">         &amp;&amp; m_isolation == o.m_isolation
</span></span></pre></div>
<a id="trunkSourceWebCorerenderingstyleStyleRareNonInheritedDatah"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/rendering/style/StyleRareNonInheritedData.h (210023 => 210024)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/rendering/style/StyleRareNonInheritedData.h        2016-12-20 18:26:10 UTC (rev 210023)
+++ trunk/Source/WebCore/rendering/style/StyleRareNonInheritedData.h        2016-12-20 18:44:38 UTC (rev 210024)
</span><span class="lines">@@ -58,7 +58,8 @@
</span><span class="cx"> class StyleResolver;
</span><span class="cx"> class StyleTransformData;
</span><span class="cx"> #if ENABLE(CSS_SCROLL_SNAP)
</span><del>-class StyleScrollSnapPoints;
</del><ins>+class StyleScrollSnapPort;
+class StyleScrollSnapArea;
</ins><span class="cx"> #endif
</span><span class="cx"> 
</span><span class="cx"> class ContentData;
</span><span class="lines">@@ -133,7 +134,8 @@
</span><span class="cx"> #endif
</span><span class="cx"> 
</span><span class="cx"> #if ENABLE(CSS_SCROLL_SNAP)
</span><del>-    DataRef&lt;StyleScrollSnapPoints&gt; m_scrollSnapPoints;
</del><ins>+    DataRef&lt;StyleScrollSnapPort&gt; m_scrollSnapPort;
+    DataRef&lt;StyleScrollSnapArea&gt; m_scrollSnapArea;
</ins><span class="cx"> #endif
</span><span class="cx"> 
</span><span class="cx">     std::unique_ptr&lt;ContentData&gt; m_content;
</span><span class="lines">@@ -186,10 +188,6 @@
</span><span class="cx">     unsigned m_touchAction : 1; // TouchAction
</span><span class="cx"> #endif
</span><span class="cx"> 
</span><del>-#if ENABLE(CSS_SCROLL_SNAP)
-    unsigned m_scrollSnapType : 2; // ScrollSnapType
-#endif
-
</del><span class="cx">     unsigned m_regionFragment : 1; // RegionFragment
</span><span class="cx"> 
</span><span class="cx">     unsigned m_pageSizeType : 2; // PageSizeType
</span></span></pre></div>
<a id="trunkSourceWebCorerenderingstyleStyleScrollSnapPointscpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/rendering/style/StyleScrollSnapPoints.cpp (210023 => 210024)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/rendering/style/StyleScrollSnapPoints.cpp        2016-12-20 18:26:10 UTC (rev 210023)
+++ trunk/Source/WebCore/rendering/style/StyleScrollSnapPoints.cpp        2016-12-20 18:44:38 UTC (rev 210024)
</span><span class="lines">@@ -1,5 +1,5 @@
</span><span class="cx"> /*
</span><del>- * Copyright (C) 2014 Apple Inc. All rights reserved.
</del><ins>+ * Copyright (C) 2014-2016 Apple Inc. All rights reserved.
</ins><span class="cx">  *
</span><span class="cx">  * Redistribution and use in source and binary forms, with or without
</span><span class="cx">  * modification, are permitted provided that the following conditions
</span><span class="lines">@@ -30,53 +30,39 @@
</span><span class="cx"> 
</span><span class="cx"> namespace WebCore {
</span><span class="cx"> 
</span><del>-ScrollSnapPoints::ScrollSnapPoints()
-    : repeatOffset(0, Fixed)
-    , hasRepeat(false)
-    , usesElements(false)
</del><ins>+Ref&lt;StyleScrollSnapPort&gt; StyleScrollSnapPort::copy() const
</ins><span class="cx"> {
</span><ins>+    return adoptRef(*new StyleScrollSnapPort(*this));
</ins><span class="cx"> }
</span><span class="cx"> 
</span><del>-bool operator==(const ScrollSnapPoints&amp; a, const ScrollSnapPoints&amp; b)
</del><ins>+StyleScrollSnapPort::StyleScrollSnapPort()
</ins><span class="cx"> {
</span><del>-    return a.repeatOffset == b.repeatOffset
-        &amp;&amp; a.hasRepeat == b.hasRepeat
-        &amp;&amp; a.usesElements == b.usesElements
-        &amp;&amp; a.offsets == b.offsets;
</del><span class="cx"> }
</span><span class="cx"> 
</span><del>-LengthSize defaultScrollSnapDestination()
</del><ins>+inline StyleScrollSnapPort::StyleScrollSnapPort(const StyleScrollSnapPort&amp; other)
+    : RefCounted()
+    , type(other.type)
+    , scrollPadding(other.scrollPadding)
</ins><span class="cx"> {
</span><del>-    return LengthSize(Length(0, Fixed), Length(0, Fixed));
</del><span class="cx"> }
</span><span class="cx"> 
</span><del>-StyleScrollSnapPoints::StyleScrollSnapPoints()
-    : destination(defaultScrollSnapDestination())
</del><ins>+Ref&lt;StyleScrollSnapArea&gt; StyleScrollSnapArea::copy() const
</ins><span class="cx"> {
</span><ins>+    return adoptRef(*new StyleScrollSnapArea(*this));
</ins><span class="cx"> }
</span><span class="cx"> 
</span><del>-inline StyleScrollSnapPoints::StyleScrollSnapPoints(const StyleScrollSnapPoints&amp; other)
-    : RefCounted()
-    , xPoints(other.xPoints ? std::make_unique&lt;ScrollSnapPoints&gt;(*other.xPoints) : nullptr)
-    , yPoints(other.yPoints ? std::make_unique&lt;ScrollSnapPoints&gt;(*other.yPoints) : nullptr)
-    , destination(other.destination)
-    , coordinates(other.coordinates)
</del><ins>+StyleScrollSnapArea::StyleScrollSnapArea()
+    : scrollSnapMargin(0, 0, 0, 0)
</ins><span class="cx"> {
</span><span class="cx"> }
</span><span class="cx"> 
</span><del>-Ref&lt;StyleScrollSnapPoints&gt; StyleScrollSnapPoints::copy() const
</del><ins>+inline StyleScrollSnapArea::StyleScrollSnapArea(const StyleScrollSnapArea&amp; other)
+    : RefCounted()
+    , alignment(other.alignment)
+    , scrollSnapMargin(other.scrollSnapMargin)
</ins><span class="cx"> {
</span><del>-    return adoptRef(*new StyleScrollSnapPoints(*this));
</del><span class="cx"> }
</span><span class="cx"> 
</span><del>-bool operator==(const StyleScrollSnapPoints&amp; a, const StyleScrollSnapPoints&amp; b)
-{
-    return a.xPoints == b.xPoints
-        &amp;&amp; a.yPoints == b.yPoints
-        &amp;&amp; a.destination == b.destination
-        &amp;&amp; a.coordinates == b.coordinates;
-}
-
</del><span class="cx"> } // namespace WebCore
</span><span class="cx"> 
</span><span class="cx"> #endif /* ENABLE(CSS_SCROLL_SNAP) */
</span></span></pre></div>
<a id="trunkSourceWebCorerenderingstyleStyleScrollSnapPointsh"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/rendering/style/StyleScrollSnapPoints.h (210023 => 210024)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/rendering/style/StyleScrollSnapPoints.h        2016-12-20 18:26:10 UTC (rev 210023)
+++ trunk/Source/WebCore/rendering/style/StyleScrollSnapPoints.h        2016-12-20 18:44:38 UTC (rev 210024)
</span><span class="lines">@@ -1,5 +1,5 @@
</span><span class="cx"> /*
</span><del>- * Copyright (C) 2014 Apple Inc. All rights reserved.
</del><ins>+ * Copyright (C) 2014-2016 Apple Inc. All rights reserved.
</ins><span class="cx">  *
</span><span class="cx">  * Redistribution and use in source and binary forms, with or without
</span><span class="cx">  * modification, are permitted provided that the following conditions
</span><span class="lines">@@ -27,44 +27,79 @@
</span><span class="cx"> 
</span><span class="cx"> #if ENABLE(CSS_SCROLL_SNAP)
</span><span class="cx"> 
</span><ins>+#include &quot;LengthBox.h&quot;
</ins><span class="cx"> #include &quot;LengthSize.h&quot;
</span><ins>+#include &quot;RenderStyleConstants.h&quot;
</ins><span class="cx"> #include &lt;wtf/RefCounted.h&gt;
</span><span class="cx"> #include &lt;wtf/Vector.h&gt;
</span><span class="cx"> 
</span><span class="cx"> namespace WebCore {
</span><span class="cx"> 
</span><del>-struct ScrollSnapPoints {
-    Length repeatOffset;
-    bool hasRepeat;
-    bool usesElements;
-    Vector&lt;Length&gt; offsets;
</del><ins>+struct ScrollSnapType {
+    ScrollSnapAxis axis { ScrollSnapAxis::Both };
+    ScrollSnapStrictness strictness { ScrollSnapStrictness::None };
+};
</ins><span class="cx"> 
</span><del>-    ScrollSnapPoints();
</del><ins>+inline bool operator==(const ScrollSnapType&amp; a, const ScrollSnapType&amp; b)
+{
+    return a.axis == b.axis &amp;&amp; a.strictness == b.strictness;
+}
+
+inline bool operator!=(const ScrollSnapType&amp; a, const ScrollSnapType&amp; b) { return !(a == b); }
+
+class StyleScrollSnapPort : public RefCounted&lt;StyleScrollSnapPort&gt; {
+public:
+    static Ref&lt;StyleScrollSnapPort&gt; create() { return adoptRef(*new StyleScrollSnapPort); }
+    Ref&lt;StyleScrollSnapPort&gt; copy() const;
+
+    ScrollSnapType type;
+    LengthBox scrollPadding { 0, 0, 0, 0 };
+
+private:
+    StyleScrollSnapPort();
+    StyleScrollSnapPort(const StyleScrollSnapPort&amp;);
</ins><span class="cx"> };
</span><span class="cx"> 
</span><del>-bool operator==(const ScrollSnapPoints&amp;, const ScrollSnapPoints&amp;);
-inline bool operator!=(const ScrollSnapPoints&amp; a, const ScrollSnapPoints&amp; b) { return !(a == b); }
</del><ins>+inline bool operator==(const StyleScrollSnapPort&amp; a, const StyleScrollSnapPort&amp; b)
+{
+    return a.type == b.type &amp;&amp; a.scrollPadding == b.scrollPadding;
+}
</ins><span class="cx"> 
</span><del>-LengthSize defaultScrollSnapDestination();
</del><ins>+inline bool operator!=(const StyleScrollSnapPort&amp; a, const StyleScrollSnapPort&amp; b) { return !(a == b); }
</ins><span class="cx"> 
</span><del>-class StyleScrollSnapPoints : public RefCounted&lt;StyleScrollSnapPoints&gt; {
</del><ins>+struct ScrollSnapAlign {
+    ScrollSnapAxisAlignType x { ScrollSnapAxisAlignType::None };
+    ScrollSnapAxisAlignType y { ScrollSnapAxisAlignType::None };
+};
+
+inline bool operator==(const ScrollSnapAlign&amp; a, const ScrollSnapAlign&amp; b)
+{
+    return a.x == b.x &amp;&amp; a.y == b.y;
+}
+
+inline bool operator!=(const ScrollSnapAlign&amp; a, const ScrollSnapAlign&amp; b) { return !(a == b); }
+
+class StyleScrollSnapArea : public RefCounted&lt;StyleScrollSnapArea&gt; {
</ins><span class="cx"> public:
</span><del>-    static Ref&lt;StyleScrollSnapPoints&gt; create() { return adoptRef(*new StyleScrollSnapPoints); }
-    Ref&lt;StyleScrollSnapPoints&gt; copy() const;
</del><ins>+    static Ref&lt;StyleScrollSnapArea&gt; create() { return adoptRef(*new StyleScrollSnapArea); }
+    Ref&lt;StyleScrollSnapArea&gt; copy() const;
+    bool hasSnapPosition() const { return alignment.x != ScrollSnapAxisAlignType::None || alignment.y != ScrollSnapAxisAlignType::None; }
</ins><span class="cx"> 
</span><del>-    std::unique_ptr&lt;ScrollSnapPoints&gt; xPoints;
-    std::unique_ptr&lt;ScrollSnapPoints&gt; yPoints;
-    LengthSize destination;
-    Vector&lt;LengthSize&gt; coordinates;
</del><ins>+    ScrollSnapAlign alignment;
+    LengthBox scrollSnapMargin { 0, 0, 0, 0 };
</ins><span class="cx"> 
</span><span class="cx"> private:
</span><del>-    StyleScrollSnapPoints();
-    StyleScrollSnapPoints(const StyleScrollSnapPoints&amp;);
</del><ins>+    StyleScrollSnapArea();
+    StyleScrollSnapArea(const StyleScrollSnapArea&amp;);
</ins><span class="cx"> };
</span><span class="cx"> 
</span><del>-bool operator==(const StyleScrollSnapPoints&amp;, const StyleScrollSnapPoints&amp;);
-inline bool operator!=(const StyleScrollSnapPoints&amp; a, const StyleScrollSnapPoints&amp; b) { return !(a == b); }
</del><ins>+inline bool operator==(const StyleScrollSnapArea&amp; a, const StyleScrollSnapArea&amp; b)
+{
+    return a.alignment == b.alignment &amp;&amp; a.scrollSnapMargin == b.scrollSnapMargin;
+}
</ins><span class="cx"> 
</span><ins>+inline bool operator!=(const StyleScrollSnapArea&amp; a, const StyleScrollSnapArea&amp; b) { return !(a == b); }
+
</ins><span class="cx"> } // namespace WebCore
</span><span class="cx"> 
</span><span class="cx"> #endif // ENABLE(CSS_SCROLL_SNAP)
</span></span></pre></div>
<a id="trunkSourceWebCoretestingInternalscpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/testing/Internals.cpp (210023 => 210024)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/testing/Internals.cpp        2016-12-20 18:26:10 UTC (rev 210023)
+++ trunk/Source/WebCore/testing/Internals.cpp        2016-12-20 18:44:38 UTC (rev 210024)
</span><span class="lines">@@ -3291,6 +3291,8 @@
</span><span class="cx">     if (!element.renderBox())
</span><span class="cx">         return String();
</span><span class="cx"> 
</span><ins>+    element.document().updateLayout();
+
</ins><span class="cx">     RenderBox&amp; box = *element.renderBox();
</span><span class="cx">     ScrollableArea* scrollableArea;
</span><span class="cx">     
</span></span></pre></div>
<a id="trunkSourceWebKit2ChangeLog"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebKit2/ChangeLog (210023 => 210024)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebKit2/ChangeLog        2016-12-20 18:26:10 UTC (rev 210023)
+++ trunk/Source/WebKit2/ChangeLog        2016-12-20 18:44:38 UTC (rev 210024)
</span><span class="lines">@@ -1,3 +1,16 @@
</span><ins>+2016-12-20  Wenson Hsieh  &lt;wenson_hsieh@apple.com&gt;
+
+        Implement the updated port/area-based Scroll Snap Module Level 1 Spec
+        https://bugs.webkit.org/show_bug.cgi?id=165317
+        &lt;rdar://problem/29490956&gt;
+
+        Reviewed by Dean Jackson.
+
+        Remove unused code for adopting scroll snapping in the PDF plugin.
+
+        * WebProcess/Plugins/PDF/PDFPlugin.mm:
+        (WebKit::PDFPlugin::didCalculateSizes):
+
</ins><span class="cx"> 2016-12-19  Yusuke Suzuki  &lt;utatane.tea@gmail.com&gt;
</span><span class="cx"> 
</span><span class="cx">         [ES6] Enable ES6 Modules
</span></span></pre></div>
<a id="trunkSourceWebKit2WebProcessPluginsPDFPDFPluginmm"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebKit2/WebProcess/Plugins/PDF/PDFPlugin.mm (210023 => 210024)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebKit2/WebProcess/Plugins/PDF/PDFPlugin.mm        2016-12-20 18:26:10 UTC (rev 210023)
+++ trunk/Source/WebKit2/WebProcess/Plugins/PDF/PDFPlugin.mm        2016-12-20 18:44:38 UTC (rev 210024)
</span><span class="lines">@@ -840,23 +840,7 @@
</span><span class="cx">     pluginElement-&gt;setInlineStyleProperty(CSSPropertyWidth, m_pdfDocumentSize.width(), CSSPrimitiveValue::CSS_PX);
</span><span class="cx">     pluginElement-&gt;setInlineStyleProperty(CSSPropertyHeight, m_pdfDocumentSize.height(), CSSPrimitiveValue::CSS_PX);
</span><span class="cx"> 
</span><del>-    // FIXME: Can't do this in the overflow/subframe case. Where does scroll-snap-type go?
-    if (m_usingContinuousMode || !m_frame-&gt;isMainFrame() || !isFullFramePlugin())
-        return;
-
-    RetainPtr&lt;NSArray&gt; pageRects = [m_pdfLayerController pageRects];
-
-    StringBuilder coordinates;
-    for (NSValue *rect in pageRects.get()) {
-        // FIXME: Why 4?
-        coordinates.appendNumber((long)[rect rectValue].origin.y / 4);
-        coordinates.appendLiteral(&quot;px &quot;);
-    }
-
-    pluginElement-&gt;setInlineStyleProperty(CSSPropertyWebkitScrollSnapCoordinate, coordinates.toString());
-
-    Document* document = webFrame()-&gt;coreFrame()-&gt;document();
-    document-&gt;bodyOrFrameset()-&gt;setInlineStyleProperty(CSSPropertyWebkitScrollSnapType, &quot;mandatory&quot;);
</del><ins>+    // FIXME: Adopt the new scroll snap specification.
</ins><span class="cx"> }
</span><span class="cx"> 
</span><span class="cx"> bool PDFPlugin::initialize(const Parameters&amp; parameters)
</span></span></pre>
</div>
</div>

</body>
</html>