| Index: Source/core/css/CSSComputedStyleDeclaration.cpp | 
| diff --git a/Source/core/css/CSSComputedStyleDeclaration.cpp b/Source/core/css/CSSComputedStyleDeclaration.cpp | 
| index d34ce94922e4e15fcff7e6cb129cc3f92f423e0b..2a787abbb71619f20f43cc80bedda0893f3d35ec 100644 | 
| --- a/Source/core/css/CSSComputedStyleDeclaration.cpp | 
| +++ b/Source/core/css/CSSComputedStyleDeclaration.cpp | 
| @@ -1556,6 +1556,17 @@ Node* CSSComputedStyleDeclaration::styledNode() const | 
| return m_node.get(); | 
| } | 
|  | 
| +static ItemPosition resolveAlignmentAuto(ItemPosition position, Node* element) | 
| +{ | 
| +    if (position != ItemPositionAuto) | 
| +        return position; | 
| + | 
| +    bool isFlexOrGrid = element && element->computedStyle() | 
| +        && element->computedStyle()->isDisplayFlexibleOrGridBox(); | 
| + | 
| +    return isFlexOrGrid ? ItemPositionStretch : ItemPositionStart; | 
| +} | 
| + | 
| static PassRefPtrWillBeRawPtr<CSSValueList> valueForItemPositionWithOverflowAlignment(ItemPosition itemPosition, OverflowAlignment overflowAlignment, ItemPositionType positionType) | 
| { | 
| RefPtrWillBeRawPtr<CSSValueList> result = CSSValueList::createSpaceSeparated(); | 
| @@ -1886,18 +1897,9 @@ PassRefPtrWillBeRawPtr<CSSValue> CSSComputedStyleDeclaration::getPropertyCSSValu | 
| case CSSPropertyAlignContent: | 
| return cssValuePool().createValue(style->alignContent()); | 
| case CSSPropertyAlignItems: | 
| -            return valueForItemPositionWithOverflowAlignment(style->alignItems(), style->alignItemsOverflowAlignment(), NonLegacyPosition); | 
| -        case CSSPropertyAlignSelf: { | 
| -            ItemPosition alignSelf = style->alignSelf(); | 
| -            if (alignSelf == ItemPositionAuto) { | 
| -                Node* parent = styledNode->parentNode(); | 
| -                if (parent && parent->computedStyle()) | 
| -                    alignSelf = parent->computedStyle()->alignItems(); | 
| -                else | 
| -                    alignSelf = ItemPositionStretch; | 
| -            } | 
| -            return valueForItemPositionWithOverflowAlignment(alignSelf, style->alignSelfOverflowAlignment(), NonLegacyPosition); | 
| -        } | 
| +            return valueForItemPositionWithOverflowAlignment(resolveAlignmentAuto(style->alignItems(), styledNode), style->alignItemsOverflowAlignment(), NonLegacyPosition); | 
| +        case CSSPropertyAlignSelf: | 
| +            return valueForItemPositionWithOverflowAlignment(resolveAlignmentAuto(style->alignSelf(), styledNode->parentNode()), style->alignSelfOverflowAlignment(), NonLegacyPosition); | 
| case CSSPropertyFlex: | 
| return valuesForShorthandProperty(flexShorthand()); | 
| case CSSPropertyFlexBasis: | 
| @@ -2061,47 +2063,10 @@ PassRefPtrWillBeRawPtr<CSSValue> CSSComputedStyleDeclaration::getPropertyCSSValu | 
| return CSSPrimitiveValue::create(style->imageRendering()); | 
| case CSSPropertyIsolation: | 
| return cssValuePool().createValue(style->isolation()); | 
| -        case CSSPropertyJustifyItems: { | 
| -            // FIXME: I would like this to be tested; is not possible with a layout test but it | 
| -            // should be possible using a method similar to https://codereview.chromium.org/351973004 | 
| -            ItemPosition justifyItems = style->justifyItems(); | 
| -            ItemPositionType positionType = style->justifyItemsPositionType(); | 
| -            if (justifyItems == ItemPositionAuto) { | 
| -                Node* parent = styledNode->parentNode(); | 
| -                // If the inherited value of justify-items includes the legacy keyword, 'auto' | 
| -                // computes to the the inherited value. | 
| -                if (parent && parent->computedStyle() && parent->computedStyle()->justifyItemsPositionType()) { | 
| -                    justifyItems = parent->computedStyle()->justifyItems(); | 
| -                    positionType = parent->computedStyle()->justifyItemsPositionType(); | 
| -                // Otherwise, auto computes to: | 
| -                } else if (style->isDisplayFlexibleOrGridBox()) { | 
| -                    // 'stretch' for flex containers and grid containers. | 
| -                    justifyItems = ItemPositionStretch; | 
| -                } else { | 
| -                    // 'start' for everything else. | 
| -                    justifyItems = ItemPositionStart; | 
| -                } | 
| -            } | 
| -            return valueForItemPositionWithOverflowAlignment(justifyItems, style->justifyItemsOverflowAlignment(), positionType); | 
| -        } | 
| -        case CSSPropertyJustifySelf: { | 
| -            // FIXME: I would like this to be tested; is not possible with a layout test but it | 
| -            // should be possible using a method similar to https://codereview.chromium.org/351973004 | 
| -            ItemPosition justifySelf = style->justifySelf(); | 
| -            if (justifySelf == ItemPositionAuto) { | 
| -                // The auto keyword computes to stretch on absolutely-positioned elements, | 
| -                if (style->position() == AbsolutePosition) { | 
| -                    justifySelf = ItemPositionStretch; | 
| -                } else { | 
| -                    // and to the computed value of justify-items on the parent (minus | 
| -                    // any legacy keywords) on all other boxes. | 
| -                    Node* parent = styledNode->parentNode(); | 
| -                    if (parent && parent->computedStyle()) | 
| -                        justifySelf = parent->computedStyle()->justifyItems(); | 
| -                } | 
| -            } | 
| -            return valueForItemPositionWithOverflowAlignment(justifySelf, style->justifySelfOverflowAlignment(), NonLegacyPosition); | 
| -        } | 
| +        case CSSPropertyJustifyItems: | 
| +            return valueForItemPositionWithOverflowAlignment(resolveAlignmentAuto(style->justifyItems(), styledNode), style->justifyItemsOverflowAlignment(), style->justifyItemsPositionType()); | 
| +        case CSSPropertyJustifySelf: | 
| +            return valueForItemPositionWithOverflowAlignment(resolveAlignmentAuto(style->justifySelf(), styledNode->parentNode()), style->justifySelfOverflowAlignment(), NonLegacyPosition); | 
| case CSSPropertyLeft: | 
| return valueForPositionOffset(*style, CSSPropertyLeft, renderer); | 
| case CSSPropertyLetterSpacing: | 
|  |