Title: [275495] trunk/Source/WebCore
Revision
275495
Author
svil...@igalia.com
Date
2021-04-06 01:39:45 -0700 (Tue, 06 Apr 2021)

Log Message

[css-grid] Initialize auto-repeat data in RenderStyle in applyInitialGridTemplate{Columns|Rows}
https://bugs.webkit.org/show_bug.cgi?id=222852

Reviewed by Antti Koivisto.

We should initialize the auto repeat data (like auto repeat tracks or the insertion point) whenever
applyInitialGridTemplateXXX is called. That method is normally called using different RenderStyle's
but under some circumstances it might be the same. For those cases we wouldn't like to end up with
obsolete data from a previous style resolution.

The same applies also to the applyInheritGridTemplateXXX calls. We're also removing a duplicate call
to setGridAutoRepeat{Row|Column}sInsertionPoint() that is not needed at all.

In order to have a single place with all the style properties affecting columns and rows, all the set
calls were moved to a macro that is used by all the apply{Initial|Inherit}GridTemplate{Columns|Rows}
methods. This would allow us to prevent eventual out-of-sync issues like this one.

* style/StyleBuilderCustom.h:
(WebCore::Style::BuilderCustom::applyInitialGridTemplateColumns):
(WebCore::Style::BuilderCustom::applyInheritGridTemplateColumns):
(WebCore::Style::BuilderCustom::applyInitialGridTemplateRows):
(WebCore::Style::BuilderCustom::applyInheritGridTemplateRows):

Modified Paths

Diff

Modified: trunk/Source/WebCore/ChangeLog (275494 => 275495)


--- trunk/Source/WebCore/ChangeLog	2021-04-06 08:37:33 UTC (rev 275494)
+++ trunk/Source/WebCore/ChangeLog	2021-04-06 08:39:45 UTC (rev 275495)
@@ -1,3 +1,28 @@
+2021-03-24  Sergio Villar Senin  <svil...@igalia.com>
+
+        [css-grid] Initialize auto-repeat data in RenderStyle in applyInitialGridTemplate{Columns|Rows}
+        https://bugs.webkit.org/show_bug.cgi?id=222852
+
+        Reviewed by Antti Koivisto.
+
+        We should initialize the auto repeat data (like auto repeat tracks or the insertion point) whenever
+        applyInitialGridTemplateXXX is called. That method is normally called using different RenderStyle's
+        but under some circumstances it might be the same. For those cases we wouldn't like to end up with
+        obsolete data from a previous style resolution.
+
+        The same applies also to the applyInheritGridTemplateXXX calls. We're also removing a duplicate call
+        to setGridAutoRepeat{Row|Column}sInsertionPoint() that is not needed at all.
+
+        In order to have a single place with all the style properties affecting columns and rows, all the set
+        calls were moved to a macro that is used by all the apply{Initial|Inherit}GridTemplate{Columns|Rows}
+        methods. This would allow us to prevent eventual out-of-sync issues like this one.
+
+        * style/StyleBuilderCustom.h:
+        (WebCore::Style::BuilderCustom::applyInitialGridTemplateColumns):
+        (WebCore::Style::BuilderCustom::applyInheritGridTemplateColumns):
+        (WebCore::Style::BuilderCustom::applyInitialGridTemplateRows):
+        (WebCore::Style::BuilderCustom::applyInheritGridTemplateRows):
+
 2021-04-06  Rob Buis  <rb...@igalia.com>
 
         Move synthesizedBaselineFromBorderBox to RenderBox

Modified: trunk/Source/WebCore/style/StyleBuilderCustom.h (275494 => 275495)


--- trunk/Source/WebCore/style/StyleBuilderCustom.h	2021-04-06 08:37:33 UTC (rev 275494)
+++ trunk/Source/WebCore/style/StyleBuilderCustom.h	2021-04-06 08:39:45 UTC (rev 275495)
@@ -1894,31 +1894,38 @@
     builderState.style().setNamedGridAreaColumnCount(gridTemplateAreasValue.columnCount());
 }
 
+#define SET_TRACKS_DATA_INTERNAL(tracksData, style, parentStyle, TrackType) \
+    ASSERT(tracksData || parentStyle); \
+    style.setGrid##TrackType##s(tracksData ? tracksData->m_trackSizes : parentStyle->grid##TrackType##s()); \
+    style.setNamedGrid##TrackType##Lines(tracksData ? tracksData->m_namedGridLines : parentStyle->namedGrid##TrackType##Lines()); \
+    style.setOrderedNamedGrid##TrackType##Lines(tracksData ? tracksData->m_orderedNamedGridLines : parentStyle->orderedNamedGrid##TrackType##Lines()); \
+    style.setGridAutoRepeat##TrackType##s(tracksData ? tracksData->m_autoRepeatTrackSizes : parentStyle->gridAutoRepeat##TrackType##s()); \
+    style.setGridAutoRepeat##TrackType##sInsertionPoint(tracksData ? tracksData->m_autoRepeatInsertionPoint : parentStyle->gridAutoRepeat##TrackType##sInsertionPoint()); \
+    style.setAutoRepeatNamedGrid##TrackType##Lines(tracksData ? tracksData->m_autoRepeatNamedGridLines : parentStyle->autoRepeatNamedGrid##TrackType##Lines()); \
+    style.setAutoRepeatOrderedNamedGrid##TrackType##Lines(tracksData ? tracksData->m_autoRepeatOrderedNamedGridLines : parentStyle->autoRepeatOrderedNamedGrid##TrackType##Lines()); \
+    style.setGridAutoRepeat##TrackType##sType(tracksData ? tracksData->m_autoRepeatType : parentStyle->gridAutoRepeat##TrackType##sType());
+
+#define SET_INHERIT_TRACKS_DATA(style, parentStyle, TrackType) \
+    BuilderConverter::TracksData* tracksData = nullptr; \
+    const RenderStyle* parentStylePointer = &parentStyle; \
+    SET_TRACKS_DATA_INTERNAL(tracksData, style, parentStylePointer, TrackType)
+
+#define SET_TRACKS_DATA(tracksData, style, TrackType) \
+    BuilderConverter::TracksData* tracksDataPointer = &tracksData; \
+    const RenderStyle* parentStyle = nullptr; \
+    SET_TRACKS_DATA_INTERNAL(tracksDataPointer, style, parentStyle, TrackType)
+
 inline void BuilderCustom::applyInitialGridTemplateColumns(BuilderState& builderState)
 {
-    builderState.style().setGridColumns(RenderStyle::initialGridColumns());
-    builderState.style().setNamedGridColumnLines(RenderStyle::initialNamedGridColumnLines());
-    builderState.style().setOrderedNamedGridColumnLines(RenderStyle::initialOrderedNamedGridColumnLines());
+    BuilderConverter::TracksData initialTracksData;
+    SET_TRACKS_DATA(initialTracksData, builderState.style(), Column);
 }
 
 inline void BuilderCustom::applyInheritGridTemplateColumns(BuilderState& builderState)
 {
-    builderState.style().setGridColumns(builderState.parentStyle().gridColumns());
-    builderState.style().setNamedGridColumnLines(builderState.parentStyle().namedGridColumnLines());
-    builderState.style().setOrderedNamedGridColumnLines(builderState.parentStyle().orderedNamedGridColumnLines());
+    SET_INHERIT_TRACKS_DATA(builderState.style(), builderState.parentStyle(), Column);
 }
 
-#define SET_TRACKS_DATA(tracksData, style, TrackType) \
-    style.setGrid##TrackType##s(tracksData.m_trackSizes); \
-    style.setNamedGrid##TrackType##Lines(tracksData.m_namedGridLines); \
-    style.setOrderedNamedGrid##TrackType##Lines(tracksData.m_orderedNamedGridLines); \
-    style.setGridAutoRepeat##TrackType##s(tracksData.m_autoRepeatTrackSizes); \
-    style.setGridAutoRepeat##TrackType##sInsertionPoint(tracksData.m_autoRepeatInsertionPoint); \
-    style.setAutoRepeatNamedGrid##TrackType##Lines(tracksData.m_autoRepeatNamedGridLines); \
-    style.setAutoRepeatOrderedNamedGrid##TrackType##Lines(tracksData.m_autoRepeatOrderedNamedGridLines); \
-    style.setGridAutoRepeat##TrackType##sType(tracksData.m_autoRepeatType); \
-    style.setGridAutoRepeat##TrackType##sInsertionPoint(tracksData.m_autoRepeatInsertionPoint);
-
 inline void BuilderCustom::applyValueGridTemplateColumns(BuilderState& builderState, CSSValue& value)
 {
     BuilderConverter::TracksData tracksData;
@@ -1933,16 +1940,13 @@
 
 inline void BuilderCustom::applyInitialGridTemplateRows(BuilderState& builderState)
 {
-    builderState.style().setGridRows(RenderStyle::initialGridRows());
-    builderState.style().setNamedGridRowLines(RenderStyle::initialNamedGridRowLines());
-    builderState.style().setOrderedNamedGridRowLines(RenderStyle::initialOrderedNamedGridRowLines());
+    BuilderConverter::TracksData initialTracksData;
+    SET_TRACKS_DATA(initialTracksData, builderState.style(), Row);
 }
 
 inline void BuilderCustom::applyInheritGridTemplateRows(BuilderState& builderState)
 {
-    builderState.style().setGridRows(builderState.parentStyle().gridRows());
-    builderState.style().setNamedGridRowLines(builderState.parentStyle().namedGridRowLines());
-    builderState.style().setOrderedNamedGridRowLines(builderState.parentStyle().orderedNamedGridRowLines());
+    SET_INHERIT_TRACKS_DATA(builderState.style(), builderState.parentStyle(), Row);
 }
 
 inline void BuilderCustom::applyValueGridTemplateRows(BuilderState& builderState, CSSValue& value)
_______________________________________________
webkit-changes mailing list
webkit-changes@lists.webkit.org
https://lists.webkit.org/mailman/listinfo/webkit-changes

Reply via email to