| // Copyright 2017 The Chromium Authors. All rights reserved. |
| // Use of this source code is governed by a BSD-style license that can be |
| // found in the LICENSE file. |
| |
| #include "third_party/blink/renderer/core/css/properties/shorthands/place_self.h" |
| |
| #include "third_party/blink/renderer/core/css/parser/css_property_parser_helpers.h" |
| #include "third_party/blink/renderer/core/css/properties/computed_style_utils.h" |
| #include "third_party/blink/renderer/core/css/properties/css_parsing_utils.h" |
| #include "third_party/blink/renderer/core/css/properties/longhand.h" |
| #include "third_party/blink/renderer/core/style/computed_style.h" |
| #include "third_party/blink/renderer/core/style_property_shorthand.h" |
| |
| namespace blink { |
| namespace css_shorthand { |
| |
| bool PlaceSelf::ParseShorthand( |
| bool important, |
| CSSParserTokenRange& range, |
| const CSSParserContext& context, |
| const CSSParserLocalContext& local_context, |
| HeapVector<CSSPropertyValue, 256>& properties) const { |
| DCHECK_EQ(shorthandForProperty(CSSPropertyID::kPlaceSelf).length(), 2u); |
| |
| CSSParserTokenRange range_copy = range; |
| const CSSValue* align_self_value = |
| To<Longhand>(GetCSSPropertyAlignSelf()) |
| .ParseSingleValue(range, context, local_context); |
| if (!align_self_value) |
| return false; |
| |
| if (range.AtEnd()) |
| range = range_copy; |
| |
| const CSSValue* justify_self_value = |
| To<Longhand>(GetCSSPropertyJustifySelf()) |
| .ParseSingleValue(range, context, local_context); |
| if (!justify_self_value || !range.AtEnd()) |
| return false; |
| |
| DCHECK(align_self_value); |
| DCHECK(justify_self_value); |
| |
| css_property_parser_helpers::AddProperty( |
| CSSPropertyID::kAlignSelf, CSSPropertyID::kPlaceSelf, *align_self_value, |
| important, css_property_parser_helpers::IsImplicitProperty::kNotImplicit, |
| properties); |
| css_property_parser_helpers::AddProperty( |
| CSSPropertyID::kJustifySelf, CSSPropertyID::kPlaceSelf, |
| *justify_self_value, important, |
| css_property_parser_helpers::IsImplicitProperty::kNotImplicit, |
| properties); |
| |
| return true; |
| } |
| |
| const CSSValue* PlaceSelf::CSSValueFromComputedStyleInternal( |
| const ComputedStyle& style, |
| const SVGComputedStyle&, |
| const LayoutObject* layout_object, |
| Node* styled_node, |
| bool allow_visited_style) const { |
| // TODO (jfernandez): The spec states that we should return the specified |
| // value. |
| return ComputedStyleUtils::ValuesForShorthandProperty( |
| placeSelfShorthand(), style, layout_object, styled_node, |
| allow_visited_style); |
| } |
| |
| } // namespace css_shorthand |
| } // namespace blink |