Chromium Code Reviews| OLD | NEW |
|---|---|
| 1 /* | 1 /* |
| 2 * Copyright (C) 2011 Google Inc. All rights reserved. | 2 * Copyright (C) 2011 Google Inc. All rights reserved. |
| 3 * | 3 * |
| 4 * Redistribution and use in source and binary forms, with or without | 4 * Redistribution and use in source and binary forms, with or without |
| 5 * modification, are permitted provided that the following conditions are | 5 * modification, are permitted provided that the following conditions are |
| 6 * met: | 6 * met: |
| 7 * | 7 * |
| 8 * * Redistributions of source code must retain the above copyright | 8 * * Redistributions of source code must retain the above copyright |
| 9 * notice, this list of conditions and the following disclaimer. | 9 * notice, this list of conditions and the following disclaimer. |
| 10 * * Redistributions in binary form must reproduce the above | 10 * * Redistributions in binary form must reproduce the above |
| (...skipping 1483 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 1494 if (total_violation) | 1494 if (total_violation) |
| 1495 FreezeViolations(total_violation < 0 ? max_violations : min_violations, | 1495 FreezeViolations(total_violation < 0 ? max_violations : min_violations, |
| 1496 remaining_free_space, total_flex_grow, total_flex_shrink, | 1496 remaining_free_space, total_flex_grow, total_flex_shrink, |
| 1497 total_weighted_flex_shrink); | 1497 total_weighted_flex_shrink); |
| 1498 else | 1498 else |
| 1499 remaining_free_space -= used_free_space; | 1499 remaining_free_space -= used_free_space; |
| 1500 | 1500 |
| 1501 return !total_violation; | 1501 return !total_violation; |
| 1502 } | 1502 } |
| 1503 | 1503 |
| 1504 static LayoutUnit InitialJustifyContentOffset( | 1504 static LayoutUnit InitialContentPositionOffset( |
| 1505 LayoutUnit available_free_space, | 1505 LayoutUnit available_free_space, |
| 1506 ContentPosition justify_content, | 1506 ContentPosition content_position, |
| 1507 ContentDistributionType justify_content_distribution, | 1507 ContentDistributionType content_distribution, |
| 1508 unsigned number_of_children) { | 1508 unsigned number_of_items) { |
| 1509 if (justify_content == kContentPositionFlexEnd) | 1509 if (content_position == kContentPositionFlexEnd) |
| 1510 return available_free_space; | 1510 return available_free_space; |
| 1511 if (justify_content == kContentPositionCenter) | 1511 if (content_position == kContentPositionCenter) |
| 1512 return available_free_space / 2; | 1512 return available_free_space / 2; |
| 1513 if (justify_content_distribution == kContentDistributionSpaceAround) { | 1513 if (content_distribution == kContentDistributionSpaceAround) { |
| 1514 if (available_free_space > 0 && number_of_children) | 1514 if (available_free_space > 0 && number_of_items) |
| 1515 return available_free_space / (2 * number_of_children); | 1515 return available_free_space / (2 * number_of_items); |
| 1516 | 1516 |
| 1517 return available_free_space / 2; | 1517 return available_free_space / 2; |
| 1518 } | 1518 } |
| 1519 return LayoutUnit(); | 1519 return LayoutUnit(); |
| 1520 } | 1520 } |
| 1521 | 1521 |
| 1522 static LayoutUnit JustifyContentSpaceBetweenChildren( | 1522 static LayoutUnit ContentDistributionSpaceBetweenChildren( |
| 1523 bool is_align_content, | |
|
jfernandez
2017/04/21 20:43:21
I don't like too much the bool argument to change
| |
| 1523 LayoutUnit available_free_space, | 1524 LayoutUnit available_free_space, |
| 1524 ContentDistributionType justify_content_distribution, | 1525 ContentDistributionType content_distribution, |
| 1525 unsigned number_of_children) { | 1526 unsigned number_of_items) { |
| 1526 if (available_free_space > 0 && number_of_children > 1) { | 1527 if (available_free_space > 0 && number_of_items > 1) { |
| 1527 if (justify_content_distribution == kContentDistributionSpaceBetween) | 1528 if (content_distribution == kContentDistributionSpaceBetween) |
| 1528 return available_free_space / (number_of_children - 1); | 1529 return available_free_space / (number_of_items - 1); |
| 1529 if (justify_content_distribution == kContentDistributionSpaceAround) | 1530 if (content_distribution == kContentDistributionSpaceAround || |
| 1530 return available_free_space / number_of_children; | 1531 (is_align_content && |
|
jfernandez
2017/04/21 20:43:21
ditto.
| |
| 1532 content_distribution == kContentDistributionStretch)) | |
| 1533 return available_free_space / number_of_items; | |
| 1531 } | 1534 } |
| 1532 return LayoutUnit(); | 1535 return LayoutUnit(); |
| 1533 } | 1536 } |
| 1534 | 1537 |
| 1535 static LayoutUnit AlignmentOffset(LayoutUnit available_free_space, | 1538 static LayoutUnit AlignmentOffset(LayoutUnit available_free_space, |
| 1536 ItemPosition position, | 1539 ItemPosition position, |
| 1537 LayoutUnit ascent, | 1540 LayoutUnit ascent, |
| 1538 LayoutUnit max_ascent, | 1541 LayoutUnit max_ascent, |
| 1539 bool is_wrap_reverse) { | 1542 bool is_wrap_reverse) { |
| 1540 switch (position) { | 1543 switch (position) { |
| (...skipping 52 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 1593 const LayoutUnit available_space = | 1596 const LayoutUnit available_space = |
| 1594 MainAxisContentExtent(ContentLogicalHeight()) - | 1597 MainAxisContentExtent(ContentLogicalHeight()) - |
| 1595 MainAxisExtentForChild(child); | 1598 MainAxisExtentForChild(child); |
| 1596 | 1599 |
| 1597 ContentPosition position = StyleRef().ResolvedJustifyContentPosition( | 1600 ContentPosition position = StyleRef().ResolvedJustifyContentPosition( |
| 1598 ContentAlignmentNormalBehavior()); | 1601 ContentAlignmentNormalBehavior()); |
| 1599 ContentDistributionType distribution = | 1602 ContentDistributionType distribution = |
| 1600 StyleRef().ResolvedJustifyContentDistribution( | 1603 StyleRef().ResolvedJustifyContentDistribution( |
| 1601 ContentAlignmentNormalBehavior()); | 1604 ContentAlignmentNormalBehavior()); |
| 1602 LayoutUnit offset = | 1605 LayoutUnit offset = |
| 1603 InitialJustifyContentOffset(available_space, position, distribution, 1); | 1606 InitialContentPositionOffset(available_space, position, distribution, 1); |
| 1604 if (StyleRef().FlexDirection() == kFlowRowReverse || | 1607 if (StyleRef().FlexDirection() == kFlowRowReverse || |
| 1605 StyleRef().FlexDirection() == kFlowColumnReverse) | 1608 StyleRef().FlexDirection() == kFlowColumnReverse) |
| 1606 offset = available_space - offset; | 1609 offset = available_space - offset; |
| 1607 return offset; | 1610 return offset; |
| 1608 } | 1611 } |
| 1609 | 1612 |
| 1610 LayoutUnit LayoutFlexibleBox::StaticCrossAxisPositionForPositionedChild( | 1613 LayoutUnit LayoutFlexibleBox::StaticCrossAxisPositionForPositionedChild( |
| 1611 const LayoutBox& child) { | 1614 const LayoutBox& child) { |
| 1612 LayoutUnit available_space = | 1615 LayoutUnit available_space = |
| 1613 CrossAxisContentExtent() - CrossAxisExtentForChild(child); | 1616 CrossAxisContentExtent() - CrossAxisExtentForChild(child); |
| (...skipping 161 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 1775 ContentPosition position = StyleRef().ResolvedJustifyContentPosition( | 1778 ContentPosition position = StyleRef().ResolvedJustifyContentPosition( |
| 1776 ContentAlignmentNormalBehavior()); | 1779 ContentAlignmentNormalBehavior()); |
| 1777 ContentDistributionType distribution = | 1780 ContentDistributionType distribution = |
| 1778 StyleRef().ResolvedJustifyContentDistribution( | 1781 StyleRef().ResolvedJustifyContentDistribution( |
| 1779 ContentAlignmentNormalBehavior()); | 1782 ContentAlignmentNormalBehavior()); |
| 1780 | 1783 |
| 1781 LayoutUnit auto_margin_offset = | 1784 LayoutUnit auto_margin_offset = |
| 1782 AutoMarginOffsetInMainAxis(children, available_free_space); | 1785 AutoMarginOffsetInMainAxis(children, available_free_space); |
| 1783 LayoutUnit main_axis_offset = | 1786 LayoutUnit main_axis_offset = |
| 1784 FlowAwareBorderStart() + FlowAwarePaddingStart(); | 1787 FlowAwareBorderStart() + FlowAwarePaddingStart(); |
| 1785 main_axis_offset += InitialJustifyContentOffset( | 1788 main_axis_offset += InitialContentPositionOffset( |
| 1786 available_free_space, position, distribution, children.size()); | 1789 available_free_space, position, distribution, children.size()); |
| 1787 if (Style()->FlexDirection() == kFlowRowReverse && | 1790 if (Style()->FlexDirection() == kFlowRowReverse && |
| 1788 ShouldPlaceBlockDirectionScrollbarOnLogicalLeft()) | 1791 ShouldPlaceBlockDirectionScrollbarOnLogicalLeft()) |
| 1789 main_axis_offset += IsHorizontalFlow() ? VerticalScrollbarWidth() | 1792 main_axis_offset += IsHorizontalFlow() ? VerticalScrollbarWidth() |
| 1790 : HorizontalScrollbarHeight(); | 1793 : HorizontalScrollbarHeight(); |
| 1791 | 1794 |
| 1792 LayoutUnit total_main_extent = MainAxisExtent(); | 1795 LayoutUnit total_main_extent = MainAxisExtent(); |
| 1793 if (!ShouldPlaceBlockDirectionScrollbarOnLogicalLeft()) | 1796 if (!ShouldPlaceBlockDirectionScrollbarOnLogicalLeft()) |
| 1794 total_main_extent -= IsHorizontalFlow() ? VerticalScrollbarWidth() | 1797 total_main_extent -= IsHorizontalFlow() ? VerticalScrollbarWidth() |
| 1795 : HorizontalScrollbarHeight(); | 1798 : HorizontalScrollbarHeight(); |
| (...skipping 77 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 1873 LayoutPoint child_location( | 1876 LayoutPoint child_location( |
| 1874 should_flip_main_axis | 1877 should_flip_main_axis |
| 1875 ? total_main_extent - main_axis_offset - child_main_extent | 1878 ? total_main_extent - main_axis_offset - child_main_extent |
| 1876 : main_axis_offset, | 1879 : main_axis_offset, |
| 1877 cross_axis_offset + FlowAwareMarginBeforeForChild(*child)); | 1880 cross_axis_offset + FlowAwareMarginBeforeForChild(*child)); |
| 1878 SetFlowAwareLocationForChild(*child, child_location); | 1881 SetFlowAwareLocationForChild(*child, child_location); |
| 1879 main_axis_offset += child_main_extent + FlowAwareMarginEndForChild(*child); | 1882 main_axis_offset += child_main_extent + FlowAwareMarginEndForChild(*child); |
| 1880 | 1883 |
| 1881 if (i != children.size() - 1) { | 1884 if (i != children.size() - 1) { |
| 1882 // The last item does not get extra space added. | 1885 // The last item does not get extra space added. |
| 1883 main_axis_offset += JustifyContentSpaceBetweenChildren( | 1886 main_axis_offset += ContentDistributionSpaceBetweenChildren( |
| 1884 available_free_space, distribution, children.size()); | 1887 false, available_free_space, distribution, children.size()); |
|
jfernandez
2017/04/21 20:43:21
Ditto.
| |
| 1885 } | 1888 } |
| 1886 | 1889 |
| 1887 if (is_paginated) | 1890 if (is_paginated) |
| 1888 UpdateFragmentationInfoForChild(*child); | 1891 UpdateFragmentationInfoForChild(*child); |
| 1889 } | 1892 } |
| 1890 | 1893 |
| 1891 if (IsColumnFlow()) | 1894 if (IsColumnFlow()) |
| 1892 SetLogicalHeight(std::max( | 1895 SetLogicalHeight(std::max( |
| 1893 LogicalHeight(), main_axis_offset + FlowAwareBorderEnd() + | 1896 LogicalHeight(), main_axis_offset + FlowAwareBorderEnd() + |
| 1894 FlowAwarePaddingEnd() + ScrollbarLogicalHeight())); | 1897 FlowAwarePaddingEnd() + ScrollbarLogicalHeight())); |
| (...skipping 21 matching lines...) Expand all Loading... | |
| 1916 ContentAlignmentNormalBehavior()); | 1919 ContentAlignmentNormalBehavior()); |
| 1917 ContentDistributionType distribution = | 1920 ContentDistributionType distribution = |
| 1918 StyleRef().ResolvedJustifyContentDistribution( | 1921 StyleRef().ResolvedJustifyContentDistribution( |
| 1919 ContentAlignmentNormalBehavior()); | 1922 ContentAlignmentNormalBehavior()); |
| 1920 | 1923 |
| 1921 // This is similar to the logic in layoutAndPlaceChildren, except we place | 1924 // This is similar to the logic in layoutAndPlaceChildren, except we place |
| 1922 // the children starting from the end of the flexbox. We also don't need to | 1925 // the children starting from the end of the flexbox. We also don't need to |
| 1923 // layout anything since we're just moving the children to a new position. | 1926 // layout anything since we're just moving the children to a new position. |
| 1924 LayoutUnit main_axis_offset = | 1927 LayoutUnit main_axis_offset = |
| 1925 LogicalHeight() - FlowAwareBorderEnd() - FlowAwarePaddingEnd(); | 1928 LogicalHeight() - FlowAwareBorderEnd() - FlowAwarePaddingEnd(); |
| 1926 main_axis_offset -= InitialJustifyContentOffset( | 1929 main_axis_offset -= InitialContentPositionOffset( |
| 1927 available_free_space, position, distribution, children.size()); | 1930 available_free_space, position, distribution, children.size()); |
| 1928 main_axis_offset -= IsHorizontalFlow() ? VerticalScrollbarWidth() | 1931 main_axis_offset -= IsHorizontalFlow() ? VerticalScrollbarWidth() |
| 1929 : HorizontalScrollbarHeight(); | 1932 : HorizontalScrollbarHeight(); |
| 1930 | 1933 |
| 1931 for (size_t i = 0; i < children.size(); ++i) { | 1934 for (size_t i = 0; i < children.size(); ++i) { |
| 1932 LayoutBox* child = children[i].box; | 1935 LayoutBox* child = children[i].box; |
| 1933 | 1936 |
| 1934 DCHECK(!child->IsOutOfFlowPositioned()); | 1937 DCHECK(!child->IsOutOfFlowPositioned()); |
| 1935 | 1938 |
| 1936 main_axis_offset -= | 1939 main_axis_offset -= |
| 1937 MainAxisExtentForChild(*child) + FlowAwareMarginEndForChild(*child); | 1940 MainAxisExtentForChild(*child) + FlowAwareMarginEndForChild(*child); |
| 1938 | 1941 |
| 1939 SetFlowAwareLocationForChild( | 1942 SetFlowAwareLocationForChild( |
| 1940 *child, | 1943 *child, |
| 1941 LayoutPoint(main_axis_offset, | 1944 LayoutPoint(main_axis_offset, |
| 1942 cross_axis_offset + FlowAwareMarginBeforeForChild(*child))); | 1945 cross_axis_offset + FlowAwareMarginBeforeForChild(*child))); |
| 1943 | 1946 |
| 1944 main_axis_offset -= FlowAwareMarginStartForChild(*child); | 1947 main_axis_offset -= FlowAwareMarginStartForChild(*child); |
| 1945 | 1948 |
| 1946 main_axis_offset -= JustifyContentSpaceBetweenChildren( | 1949 main_axis_offset -= ContentDistributionSpaceBetweenChildren( |
| 1947 available_free_space, distribution, children.size()); | 1950 false, available_free_space, distribution, children.size()); |
|
jfernandez
2017/04/21 20:43:21
Ditto.
| |
| 1948 } | 1951 } |
| 1949 } | 1952 } |
| 1950 | 1953 |
| 1951 static LayoutUnit InitialAlignContentOffset( | |
| 1952 LayoutUnit available_free_space, | |
| 1953 ContentPosition align_content, | |
| 1954 ContentDistributionType align_content_distribution, | |
| 1955 unsigned number_of_lines) { | |
| 1956 if (number_of_lines <= 1) | |
| 1957 return LayoutUnit(); | |
| 1958 if (align_content == kContentPositionFlexEnd) | |
| 1959 return available_free_space; | |
| 1960 if (align_content == kContentPositionCenter) | |
| 1961 return available_free_space / 2; | |
| 1962 if (align_content_distribution == kContentDistributionSpaceAround) { | |
| 1963 if (available_free_space > 0 && number_of_lines) | |
| 1964 return available_free_space / (2 * number_of_lines); | |
| 1965 if (available_free_space < 0) | |
| 1966 return available_free_space / 2; | |
| 1967 } | |
| 1968 return LayoutUnit(); | |
| 1969 } | |
| 1970 | |
| 1971 static LayoutUnit AlignContentSpaceBetweenChildren( | |
| 1972 LayoutUnit available_free_space, | |
| 1973 ContentDistributionType align_content_distribution, | |
| 1974 unsigned number_of_lines) { | |
| 1975 if (available_free_space > 0 && number_of_lines > 1) { | |
| 1976 if (align_content_distribution == kContentDistributionSpaceBetween) | |
| 1977 return available_free_space / (number_of_lines - 1); | |
| 1978 if (align_content_distribution == kContentDistributionSpaceAround || | |
| 1979 align_content_distribution == kContentDistributionStretch) | |
| 1980 return available_free_space / number_of_lines; | |
| 1981 } | |
| 1982 return LayoutUnit(); | |
| 1983 } | |
| 1984 | |
| 1985 void LayoutFlexibleBox::AlignFlexLines(Vector<LineContext>& line_contexts) { | 1954 void LayoutFlexibleBox::AlignFlexLines(Vector<LineContext>& line_contexts) { |
| 1986 ContentPosition position = | 1955 ContentPosition position = |
| 1987 StyleRef().ResolvedAlignContentPosition(ContentAlignmentNormalBehavior()); | 1956 StyleRef().ResolvedAlignContentPosition(ContentAlignmentNormalBehavior()); |
| 1988 ContentDistributionType distribution = | 1957 ContentDistributionType distribution = |
| 1989 StyleRef().ResolvedAlignContentDistribution( | 1958 StyleRef().ResolvedAlignContentDistribution( |
| 1990 ContentAlignmentNormalBehavior()); | 1959 ContentAlignmentNormalBehavior()); |
| 1991 | 1960 |
| 1992 // If we have a single line flexbox or a multiline line flexbox with only one | 1961 // If we have a single line flexbox or a multiline line flexbox with only one |
| 1993 // flex line, the line height is all the available space. For | 1962 // flex line, the line height is all the available space. For |
| 1994 // flex-direction: row, this means we need to use the height, so we do this | 1963 // flex-direction: row, this means we need to use the height, so we do this |
| 1995 // after calling updateLogicalHeight. | 1964 // after calling updateLogicalHeight. |
| 1996 if (line_contexts.size() == 1) { | 1965 if (line_contexts.size() == 1) { |
| 1997 line_contexts[0].cross_axis_extent = CrossAxisContentExtent(); | 1966 line_contexts[0].cross_axis_extent = CrossAxisContentExtent(); |
| 1998 return; | 1967 return; |
| 1999 } | 1968 } |
| 2000 | 1969 |
| 2001 if (position == kContentPositionFlexStart) | 1970 if (position == kContentPositionFlexStart) |
| 2002 return; | 1971 return; |
| 2003 | 1972 |
| 2004 LayoutUnit available_cross_axis_space = CrossAxisContentExtent(); | 1973 LayoutUnit available_cross_axis_space = CrossAxisContentExtent(); |
| 2005 for (size_t i = 0; i < line_contexts.size(); ++i) | 1974 for (size_t i = 0; i < line_contexts.size(); ++i) |
| 2006 available_cross_axis_space -= line_contexts[i].cross_axis_extent; | 1975 available_cross_axis_space -= line_contexts[i].cross_axis_extent; |
| 2007 | 1976 |
| 2008 LayoutUnit line_offset = InitialAlignContentOffset( | 1977 LayoutUnit line_offset; |
| 2009 available_cross_axis_space, position, distribution, line_contexts.size()); | 1978 if (line_contexts.size() > 1) { |
| 1979 line_offset = | |
| 1980 InitialContentPositionOffset(available_cross_axis_space, position, | |
| 1981 distribution, line_contexts.size()); | |
| 1982 } | |
| 2010 for (unsigned line_number = 0; line_number < line_contexts.size(); | 1983 for (unsigned line_number = 0; line_number < line_contexts.size(); |
| 2011 ++line_number) { | 1984 ++line_number) { |
| 2012 LineContext& line_context = line_contexts[line_number]; | 1985 LineContext& line_context = line_contexts[line_number]; |
| 2013 line_context.cross_axis_offset += line_offset; | 1986 line_context.cross_axis_offset += line_offset; |
| 2014 for (size_t child_number = 0; child_number < line_context.flex_items.size(); | 1987 for (size_t child_number = 0; child_number < line_context.flex_items.size(); |
| 2015 ++child_number) { | 1988 ++child_number) { |
| 2016 FlexItem& flex_item = line_context.flex_items[child_number]; | 1989 FlexItem& flex_item = line_context.flex_items[child_number]; |
| 2017 AdjustAlignmentForChild(*flex_item.box, line_offset); | 1990 AdjustAlignmentForChild(*flex_item.box, line_offset); |
| 2018 } | 1991 } |
| 2019 | 1992 |
| 2020 if (distribution == kContentDistributionStretch && | 1993 if (distribution == kContentDistributionStretch && |
| 2021 available_cross_axis_space > 0) | 1994 available_cross_axis_space > 0) |
| 2022 line_contexts[line_number].cross_axis_extent += | 1995 line_contexts[line_number].cross_axis_extent += |
| 2023 available_cross_axis_space / | 1996 available_cross_axis_space / |
| 2024 static_cast<unsigned>(line_contexts.size()); | 1997 static_cast<unsigned>(line_contexts.size()); |
| 2025 | 1998 |
| 2026 line_offset += AlignContentSpaceBetweenChildren( | 1999 line_offset += ContentDistributionSpaceBetweenChildren( |
| 2027 available_cross_axis_space, distribution, line_contexts.size()); | 2000 true, available_cross_axis_space, distribution, line_contexts.size()); |
|
jfernandez
2017/04/21 20:43:21
Ditto.
| |
| 2028 } | 2001 } |
| 2029 } | 2002 } |
| 2030 | 2003 |
| 2031 void LayoutFlexibleBox::AdjustAlignmentForChild(LayoutBox& child, | 2004 void LayoutFlexibleBox::AdjustAlignmentForChild(LayoutBox& child, |
| 2032 LayoutUnit delta) { | 2005 LayoutUnit delta) { |
| 2033 DCHECK(!child.IsOutOfFlowPositioned()); | 2006 DCHECK(!child.IsOutOfFlowPositioned()); |
| 2034 | 2007 |
| 2035 SetFlowAwareLocationForChild(child, FlowAwareLocationForChild(child) + | 2008 SetFlowAwareLocationForChild(child, FlowAwareLocationForChild(child) + |
| 2036 LayoutSize(LayoutUnit(), delta)); | 2009 LayoutSize(LayoutUnit(), delta)); |
| 2037 } | 2010 } |
| (...skipping 164 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 2202 LayoutUnit original_offset = | 2175 LayoutUnit original_offset = |
| 2203 line_contexts[line_number].cross_axis_offset - cross_axis_start_edge; | 2176 line_contexts[line_number].cross_axis_offset - cross_axis_start_edge; |
| 2204 LayoutUnit new_offset = | 2177 LayoutUnit new_offset = |
| 2205 content_extent - original_offset - line_cross_axis_extent; | 2178 content_extent - original_offset - line_cross_axis_extent; |
| 2206 AdjustAlignmentForChild(*flex_item.box, new_offset - original_offset); | 2179 AdjustAlignmentForChild(*flex_item.box, new_offset - original_offset); |
| 2207 } | 2180 } |
| 2208 } | 2181 } |
| 2209 } | 2182 } |
| 2210 | 2183 |
| 2211 } // namespace blink | 2184 } // namespace blink |
| OLD | NEW |