Index: third_party/WebKit/Source/core/style/GridTrackSize.h |
diff --git a/third_party/WebKit/Source/core/style/GridTrackSize.h b/third_party/WebKit/Source/core/style/GridTrackSize.h |
index 9cd614951b61226eb012bae0ef1d4122ff171239..5005aed0e7a8d64b1898cb762a054263930537af 100644 |
--- a/third_party/WebKit/Source/core/style/GridTrackSize.h |
+++ b/third_party/WebKit/Source/core/style/GridTrackSize.h |
@@ -38,19 +38,25 @@ namespace blink { |
enum GridTrackSizeType { |
LengthTrackSizing, |
- MinMaxTrackSizing |
+ MinMaxTrackSizing, |
+ FitContentTrackSizing |
}; |
+// This class represents a <track-size> from the spec. Althought there are 3 different types of |
+// <track-size> there is always an equivalent minmax() representation that could represent any of |
+// them. The only special case is fit-content(argument) which is similar to minmax(auto, max-content) |
+// except that the track size is clamped at argument if it is greater than the auto minimum. At the |
+// GridTrackSize level we don't need to worry about clamping so we treat that case exactly as |
+// minmax(auto, max-content) althought we store the argument for later use in m_maxTrackBreadth. |
class GridTrackSize { |
DISALLOW_NEW_EXCEPT_PLACEMENT_NEW(); |
public: |
- GridTrackSize(const GridLength& length) |
- : m_type(LengthTrackSizing) |
- , m_minTrackBreadth(length) |
+ GridTrackSize(const GridLength& length, GridTrackSizeType trackSizeType = LengthTrackSizing) |
+ : m_type(trackSizeType) |
+ , m_minTrackBreadth(trackSizeType == FitContentTrackSizing ? Length(Auto) : length) |
, m_maxTrackBreadth(length) |
- , m_minTrackBreadthIsMaxContent(false) |
- , m_maxTrackBreadthIsMaxContent(false) |
{ |
+ DCHECK(trackSizeType == LengthTrackSizing || trackSizeType == FitContentTrackSizing); |
cacheMinMaxTrackBreadthTypes(); |
} |
@@ -58,27 +64,24 @@ public: |
: m_type(MinMaxTrackSizing) |
, m_minTrackBreadth(minTrackBreadth) |
, m_maxTrackBreadth(maxTrackBreadth) |
- , m_minTrackBreadthIsMaxContent(false) |
- , m_maxTrackBreadthIsMaxContent(false) |
{ |
cacheMinMaxTrackBreadthTypes(); |
} |
- const GridLength& length() const |
+ GridLength length() const |
{ |
- ASSERT(m_type == LengthTrackSizing); |
- ASSERT(m_minTrackBreadth == m_maxTrackBreadth); |
- const GridLength& minTrackBreadth = m_minTrackBreadth; |
- return minTrackBreadth; |
+ DCHECK(m_type == LengthTrackSizing || m_type == FitContentTrackSizing); |
+ DCHECK(m_minTrackBreadth == m_maxTrackBreadth || m_type == FitContentTrackSizing); |
+ return m_maxTrackBreadth; |
} |
- const GridLength& minTrackBreadth() const { return m_minTrackBreadth; } |
- |
- const GridLength& maxTrackBreadth() const { return m_maxTrackBreadth; } |
+ GridLength minTrackBreadth() const { return m_minTrackBreadth; } |
+ GridLength maxTrackBreadth() const { return isFitContent() ? GridLength(Length(MaxContent)) : m_maxTrackBreadth; } |
GridTrackSizeType type() const { return m_type; } |
bool isContentSized() const { return m_minTrackBreadth.isContentSized() || m_maxTrackBreadth.isContentSized(); } |
+ bool isFitContent() const { return m_type == FitContentTrackSizing; } |
bool operator==(const GridTrackSize& other) const |
{ |