Diff
Modified: trunk/LayoutTests/ChangeLog (183747 => 183748)
--- trunk/LayoutTests/ChangeLog 2015-05-04 16:22:23 UTC (rev 183747)
+++ trunk/LayoutTests/ChangeLog 2015-05-04 17:25:21 UTC (rev 183748)
@@ -1,3 +1,23 @@
+2015-05-04 Javier Fernandez <[email protected]>
+
+ [CSS Box Alignment] Upgrade justify-content parsing to CSS3 Box Alignment spec.
+ https://bugs.webkit.org/show_bug.cgi?id=144442
+
+ Reviewed by David Hyatt.
+
+ Upgrade the justify-content property to the last CSS3 Box
+ Alignment specification. It defines a different enumeration for
+ Positional and Distribution alignment, which requires changes in
+ the FlexibleBox implementation.
+
+ Some minor changes in some Flexbox related test cases for adapting
+ them to the new parsing logic. New layout tests, not Flexbox
+ specific, to verify the parsing of the new values.
+
+ * css3/flexbox/css-properties.html:
+ * css3/parse-justify-content-expected.txt: Added.
+ * css3/parse-justify-content.html: Added.
+
2015-05-04 Manuel Rego Casasnovas <[email protected]>
[CSS Grid Layout] Wrong computed style for named grid lines in implicit tracks
Modified: trunk/LayoutTests/css3/flexbox/css-properties.html (183747 => 183748)
--- trunk/LayoutTests/css3/flexbox/css-properties.html 2015-05-04 16:22:23 UTC (rev 183747)
+++ trunk/LayoutTests/css3/flexbox/css-properties.html 2015-05-04 17:25:21 UTC (rev 183748)
@@ -51,6 +51,8 @@
shouldBeEqualToString('flexitem.style.webkitOrder', '');
+flexbox.style.display = '-webkit-flex';
+
shouldBeEqualToString('flexbox.style.webkitJustifyContent', '');
// The initial value is 'flex-start'.
shouldBeEqualToString('window.getComputedStyle(flexbox, null).webkitJustifyContent', 'flex-start');
@@ -78,8 +80,6 @@
shouldBeEqualToString('flexbox.style.webkitJustifyContent', '');
shouldBeEqualToString('window.getComputedStyle(flexbox, null).webkitJustifyContent', 'flex-start');
-flexbox.style.display = '-webkit-flex';
-
shouldBeEqualToString('flexbox.style.webkitAlignSelf', '');
// The initial value is 'auto', which will be resolved depending on parent's style (except for the 'document' element).
shouldBeEqualToString('window.getComputedStyle(flexbox, null).webkitAlignSelf', 'start');
Added: trunk/LayoutTests/css3/parse-justify-content-expected.txt (0 => 183748)
--- trunk/LayoutTests/css3/parse-justify-content-expected.txt (rev 0)
+++ trunk/LayoutTests/css3/parse-justify-content-expected.txt 2015-05-04 17:25:21 UTC (rev 183748)
@@ -0,0 +1,142 @@
+Test that setting and getting justify-content works as expected
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+
+Test getting justify-content set through CSS
+PASS getComputedStyle(justifyContentAuto, '').getPropertyValue('justify-content') is "start"
+PASS getComputedStyle(justifyContentBaseline, '').getPropertyValue('justify-content') is "baseline"
+PASS getComputedStyle(justifyContentLastBaseline, '').getPropertyValue('justify-content') is "last-baseline"
+PASS getComputedStyle(justifyContentSpaceBetween, '').getPropertyValue('justify-content') is "space-between"
+PASS getComputedStyle(justifyContentSpaceAround, '').getPropertyValue('justify-content') is "space-around"
+PASS getComputedStyle(justifyContentSpaceEvenly, '').getPropertyValue('justify-content') is "space-evenly"
+PASS getComputedStyle(justifyContentStretch, '').getPropertyValue('justify-content') is "stretch"
+PASS getComputedStyle(justifyContentStart, '').getPropertyValue('justify-content') is "start"
+PASS getComputedStyle(justifyContentEnd, '').getPropertyValue('justify-content') is "end"
+PASS getComputedStyle(justifyContentCenter, '').getPropertyValue('justify-content') is "center"
+PASS getComputedStyle(justifyContentLeft, '').getPropertyValue('justify-content') is "left"
+PASS getComputedStyle(justifyContentRight, '').getPropertyValue('justify-content') is "right"
+PASS getComputedStyle(justifyContentFlexStart, '').getPropertyValue('justify-content') is "flex-start"
+PASS getComputedStyle(justifyContentFlexEnd, '').getPropertyValue('justify-content') is "flex-end"
+PASS getComputedStyle(justifyContentEndTrue, '').getPropertyValue('justify-content') is "end true"
+PASS getComputedStyle(justifyContentCenterTrue, '').getPropertyValue('justify-content') is "center true"
+PASS getComputedStyle(justifyContentRightSafe, '').getPropertyValue('justify-content') is "right safe"
+PASS getComputedStyle(justifyContentLeftTrue, '').getPropertyValue('justify-content') is "left true"
+PASS getComputedStyle(justifyContentFlexStartTrue, '').getPropertyValue('justify-content') is "flex-start true"
+PASS getComputedStyle(justifyContentFlexEndSafe, '').getPropertyValue('justify-content') is "flex-end safe"
+PASS getComputedStyle(justifyContentSpaceBetweenLeft, '').getPropertyValue('justify-content') is "space-between left"
+PASS getComputedStyle(justifyContentSpaceAroundCenter, '').getPropertyValue('justify-content') is "space-around center"
+PASS getComputedStyle(justifyContentSpaceEvenlyRight, '').getPropertyValue('justify-content') is "space-evenly right"
+PASS getComputedStyle(justifyContentStretchStartSafe, '').getPropertyValue('justify-content') is "stretch start safe"
+PASS getComputedStyle(justifyContentSpaceAroundEndTrue, '').getPropertyValue('justify-content') is "space-around end true"
+PASS getComputedStyle(justifyContentSpaceEvenlyFlexStartSafe, '').getPropertyValue('justify-content') is "space-evenly flex-start safe"
+PASS getComputedStyle(justifyContentSpaceBetweenSafe, '').getPropertyValue('justify-content') is "start"
+PASS getComputedStyle(justifyContentSpaceBetweenStretch, '').getPropertyValue('justify-content') is "start"
+PASS getComputedStyle(justifyContentSafe, '').getPropertyValue('justify-content') is "start"
+PASS getComputedStyle(justifyContentRightSafeTrue, '').getPropertyValue('justify-content') is "start"
+PASS getComputedStyle(justifyContentCenterLeft, '').getPropertyValue('justify-content') is "start"
+
+Test initial value of justify-content through JS
+PASS getComputedStyle(element, '').getPropertyValue('justify-content') is "start"
+
+Test getting and setting justify-content through JS
+PASS element.style.justifyContent is "center"
+PASS window.getComputedStyle(element, '').getPropertyValue('justify-content') is "center"
+PASS element.style.justifyContent is "start true"
+PASS window.getComputedStyle(element, '').getPropertyValue('justify-content') is "start true"
+PASS element.style.justifyContent is "flex-end safe"
+PASS window.getComputedStyle(element, '').getPropertyValue('justify-content') is "flex-end safe"
+PASS element.style.justifyContent is "space-between right safe"
+PASS window.getComputedStyle(element, '').getPropertyValue('justify-content') is "space-between right safe"
+PASS element.style.justifyContent is "stretch center"
+PASS window.getComputedStyle(element, '').getPropertyValue('justify-content') is "stretch center"
+PASS element.style.justifyContent is "right true"
+PASS window.getComputedStyle(element, '').getPropertyValue('justify-content') is "right true"
+PASS element.style.justifyContent is "auto"
+PASS window.getComputedStyle(element, '').getPropertyValue('justify-content') is "start"
+PASS element.style.justifyContent is "auto"
+PASS window.getComputedStyle(element, '').getPropertyValue('justify-content') is "flex-start"
+PASS element.style.justifyContent is "auto"
+PASS window.getComputedStyle(element, '').getPropertyValue('justify-content') is "start"
+PASS element.style.justifyContent is "flex-end"
+PASS window.getComputedStyle(element, '').getPropertyValue('justify-content') is "flex-end"
+
+Test bad combinations of justify-content
+PASS element.style.justifyContent is ""
+PASS window.getComputedStyle(element, '').getPropertyValue('justify-content') is "start"
+PASS element.style.justifyContent is ""
+PASS window.getComputedStyle(element, '').getPropertyValue('justify-content') is "start"
+PASS element.style.justifyContent is ""
+PASS window.getComputedStyle(element, '').getPropertyValue('justify-content') is "start"
+PASS element.style.justifyContent is ""
+PASS window.getComputedStyle(element, '').getPropertyValue('justify-content') is "start"
+PASS element.style.justifyContent is ""
+PASS window.getComputedStyle(element, '').getPropertyValue('justify-content') is "start"
+PASS element.style.justifyContent is ""
+PASS window.getComputedStyle(element, '').getPropertyValue('justify-content') is "start"
+PASS element.style.justifyContent is ""
+PASS window.getComputedStyle(element, '').getPropertyValue('justify-content') is "start"
+PASS element.style.justifyContent is ""
+PASS window.getComputedStyle(element, '').getPropertyValue('justify-content') is "start"
+PASS element.style.justifyContent is ""
+PASS window.getComputedStyle(element, '').getPropertyValue('justify-content') is "start"
+PASS element.style.justifyContent is ""
+PASS window.getComputedStyle(element, '').getPropertyValue('justify-content') is "start"
+PASS element.style.justifyContent is ""
+PASS window.getComputedStyle(element, '').getPropertyValue('justify-content') is "start"
+PASS element.style.justifyContent is ""
+PASS window.getComputedStyle(element, '').getPropertyValue('justify-content') is "start"
+PASS element.style.justifyContent is ""
+PASS window.getComputedStyle(element, '').getPropertyValue('justify-content') is "start"
+PASS element.style.justifyContent is ""
+PASS window.getComputedStyle(element, '').getPropertyValue('justify-content') is "start"
+PASS element.style.justifyContent is ""
+PASS window.getComputedStyle(element, '').getPropertyValue('justify-content') is "start"
+PASS element.style.justifyContent is ""
+PASS window.getComputedStyle(element, '').getPropertyValue('justify-content') is "start"
+PASS element.style.justifyContent is ""
+PASS window.getComputedStyle(element, '').getPropertyValue('justify-content') is "start"
+PASS element.style.justifyContent is ""
+PASS window.getComputedStyle(element, '').getPropertyValue('justify-content') is "start"
+PASS element.style.justifyContent is ""
+PASS window.getComputedStyle(element, '').getPropertyValue('justify-content') is "start"
+PASS element.style.justifyContent is ""
+PASS window.getComputedStyle(element, '').getPropertyValue('justify-content') is "start"
+PASS element.style.justifyContent is ""
+PASS window.getComputedStyle(element, '').getPropertyValue('justify-content') is "start"
+
+Test the value 'initial'
+PASS element.style.justifyContent is "stretch center"
+PASS window.getComputedStyle(element, '').getPropertyValue('justify-content') is "stretch center"
+PASS element.style.justifyContent is "initial"
+PASS window.getComputedStyle(element, '').getPropertyValue('justify-content') is "start"
+
+Test the value 'initial' for grid containers
+PASS element.style.justifyContent is "space-between left"
+PASS window.getComputedStyle(element, '').getPropertyValue('justify-content') is "space-between left"
+PASS element.style.justifyContent is "initial"
+PASS window.getComputedStyle(element, '').getPropertyValue('justify-content') is "start"
+
+Test the value 'initial' for flex containers
+PASS element.style.justifyContent is "right true"
+PASS window.getComputedStyle(element, '').getPropertyValue('justify-content') is "right true"
+PASS element.style.justifyContent is "initial"
+PASS window.getComputedStyle(element, '').getPropertyValue('justify-content') is "flex-start"
+
+Test the value 'inherit'
+PASS element.style.justifyContent is "end"
+PASS window.getComputedStyle(element, '').getPropertyValue('justify-content') is "end"
+PASS element.style.justifyContent is "inherit"
+PASS window.getComputedStyle(element, '').getPropertyValue('justify-content') is "end"
+PASS element.style.justifyContent is "left safe"
+PASS window.getComputedStyle(element, '').getPropertyValue('justify-content') is "left safe"
+PASS element.style.justifyContent is "inherit"
+PASS window.getComputedStyle(element, '').getPropertyValue('justify-content') is "left safe"
+PASS element.style.justifyContent is "stretch center"
+PASS window.getComputedStyle(element, '').getPropertyValue('justify-content') is "stretch center"
+PASS element.style.justifyContent is "inherit"
+PASS window.getComputedStyle(element, '').getPropertyValue('justify-content') is "stretch center"
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
Added: trunk/LayoutTests/css3/parse-justify-content.html (0 => 183748)
--- trunk/LayoutTests/css3/parse-justify-content.html (rev 0)
+++ trunk/LayoutTests/css3/parse-justify-content.html 2015-05-04 17:25:21 UTC (rev 183748)
@@ -0,0 +1,356 @@
+<!DOCTYPE html>
+<html>
+<head>
+<style>
+#justifyContentAuto {
+ justify-content: auto;
+}
+
+#justifyContentBaseline {
+ justify-content: baseline;
+}
+
+#justifyContentLastBaseline {
+ justify-content: last-baseline;
+}
+
+#justifyContentSpaceBetween {
+ justify-content: space-between;
+}
+
+#justifyContentSpaceAround {
+ justify-content: space-around;
+}
+
+#justifyContentSpaceEvenly {
+ justify-content: space-evenly;
+}
+
+#justifyContentStretch {
+ justify-content: stretch;
+}
+
+#justifyContentStart {
+ justify-content: start;
+}
+
+#justifyContentEnd {
+ justify-content: end;
+}
+
+#justifyContentCenter {
+ justify-content: center;
+}
+
+#justifyContentLeft {
+ justify-content: left;
+}
+
+#justifyContentRight {
+ justify-content: right;
+}
+
+#justifyContentFlexStart {
+ justify-content: flex-start;
+}
+
+#justifyContentFlexEnd {
+ justify-content: flex-end;
+}
+
+#justifyContentEndTrue {
+ justify-content: end true;
+}
+
+#justifyContentCenterTrue {
+ justify-content: center true;
+}
+
+#justifyContentRightSafe {
+ justify-content: right safe;
+}
+
+#justifyContentLeftTrue {
+ justify-content: left true;
+}
+
+#justifyContentFlexStartTrue {
+ justify-content: flex-start true;
+}
+
+#justifyContentFlexEndSafe {
+ justify-content: flex-end safe;
+}
+
+#justifyContentSpaceBetweenLeft {
+ justify-content: space-between left;
+}
+
+#justifyContentSpaceAroundCenter {
+ justify-content: space-around center;
+}
+
+#justifyContentSpaceEvenlyRight {
+ justify-content: space-evenly right;
+}
+
+#justifyContentStretchStartSafe {
+ justify-content: stretch start safe;
+}
+
+#justifyContentSpaceAroundEndTrue {
+ justify-content: space-around end true;
+}
+
+#justifyContentSpaceEvenlyFlexStartSafe {
+ justify-content: space-evenly flex-start safe;
+}
+
+<!-- Invalid CSS cases -->
+#justifyContentSpaceBetweenSafe {
+ justify-content: space-between safe;
+}
+
+#justifyContentSpaceBetweenStretch {
+ justify-content: space-between stretch;
+}
+
+#justifyContentSafe {
+ justify-content: safe;
+}
+
+#justifyContentRightSafeTrue {
+ justify-content: right safe true;
+}
+
+#justifyContentCenterLeft {
+ justify-content: center left;
+}
+</style>
+<script src=""
+</head>
+<body>
+<div id="justifyContentAuto"></div>
+<div id="justifyContentBaseline"></div>
+<div id="justifyContentLastBaseline"></div>
+<div id="justifyContentSpaceBetween"></div>
+<div id="justifyContentSpaceAround"></div>
+<div id="justifyContentSpaceEvenly"></div>
+<div id="justifyContentStretch"></div>
+<div id="justifyContentStart"></div>
+<div id="justifyContentEnd"></div>
+<div id="justifyContentCenter"></div>
+<div id="justifyContentLeft"></div>
+<div id="justifyContentRight"></div>
+<div id="justifyContentFlexStart"></div>
+<div id="justifyContentFlexEnd"></div>
+<div id="justifyContentEndTrue"></div>
+<div id="justifyContentCenterTrue"></div>
+<div id="justifyContentRightSafe"></div>
+<div id="justifyContentLeftTrue"></div>
+<div id="justifyContentFlexStartTrue"></div>
+<div id="justifyContentFlexEndSafe"></div>
+<div id="justifyContentSpaceBetweenLeft"></div>
+<div id="justifyContentSpaceAroundCenter"></div>
+<div id="justifyContentSpaceEvenlyRight"></div>
+<div id="justifyContentStretchStartSafe"></div>
+<div id="justifyContentSpaceAroundEndTrue"></div>
+<div id="justifyContentSpaceEvenlyFlexStartSafe"></div>
+
+<div id="justifyContentSpaceBetweenSafe"></div>
+<div id="justifyContentSpaceBetweenStretch"></div>
+<div id="justifyContentSafe"></div>
+<div id="justifyContentRightSafeTrue"></div>
+<div id="justifyContentCenterLeft"></div>
+
+<script src=""
+<script>
+description('Test that setting and getting justify-content works as expected');
+
+debug("Test getting justify-content set through CSS");
+var justifyContentAuto = document.getElementById("justifyContentAuto");
+shouldBeEqualToString("getComputedStyle(justifyContentAuto, '').getPropertyValue('justify-content')", "start");
+
+var justifyContentBaseline = document.getElementById("justifyContentBaseline");
+shouldBeEqualToString("getComputedStyle(justifyContentBaseline, '').getPropertyValue('justify-content')", "baseline");
+
+var justifyContentLastBaseline = document.getElementById("justifyContentLastBaseline");
+shouldBeEqualToString("getComputedStyle(justifyContentLastBaseline, '').getPropertyValue('justify-content')", "last-baseline");
+
+var justifyContentSpaceBetween = document.getElementById("justifyContentSpaceBetween");
+shouldBeEqualToString("getComputedStyle(justifyContentSpaceBetween, '').getPropertyValue('justify-content')", "space-between");
+
+var justifyContentSpaceAround = document.getElementById("justifyContentSpaceAround");
+shouldBeEqualToString("getComputedStyle(justifyContentSpaceAround, '').getPropertyValue('justify-content')", "space-around");
+
+var justifyContentSpaceEvenly = document.getElementById("justifyContentSpaceEvenly");
+shouldBeEqualToString("getComputedStyle(justifyContentSpaceEvenly, '').getPropertyValue('justify-content')", "space-evenly");
+
+var justifyContentStretch = document.getElementById("justifyContentStretch");
+shouldBeEqualToString("getComputedStyle(justifyContentStretch, '').getPropertyValue('justify-content')", "stretch");
+
+var justifyContentStart = document.getElementById("justifyContentStart");
+shouldBeEqualToString("getComputedStyle(justifyContentStart, '').getPropertyValue('justify-content')", "start");
+
+var justifyContentEnd = document.getElementById("justifyContentEnd");
+shouldBeEqualToString("getComputedStyle(justifyContentEnd, '').getPropertyValue('justify-content')", "end");
+
+var justifyContentCenter = document.getElementById("justifyContentCenter");
+shouldBeEqualToString("getComputedStyle(justifyContentCenter, '').getPropertyValue('justify-content')", "center");
+
+var justifyContentLeft = document.getElementById("justifyContentLeft");
+shouldBeEqualToString("getComputedStyle(justifyContentLeft, '').getPropertyValue('justify-content')", "left");
+
+var justifyContentRight = document.getElementById("justifyContentRight");
+shouldBeEqualToString("getComputedStyle(justifyContentRight, '').getPropertyValue('justify-content')", "right");
+
+var justifyContentFlexStart = document.getElementById("justifyContentFlexStart");
+shouldBeEqualToString("getComputedStyle(justifyContentFlexStart, '').getPropertyValue('justify-content')", "flex-start");
+
+var justifyContentFlexEnd = document.getElementById("justifyContentFlexEnd");
+shouldBeEqualToString("getComputedStyle(justifyContentFlexEnd, '').getPropertyValue('justify-content')", "flex-end");
+
+var justifyContentEndTrue = document.getElementById("justifyContentEndTrue");
+shouldBeEqualToString("getComputedStyle(justifyContentEndTrue, '').getPropertyValue('justify-content')", "end true");
+
+var justifyContentCenterTrue = document.getElementById("justifyContentCenterTrue");
+shouldBeEqualToString("getComputedStyle(justifyContentCenterTrue, '').getPropertyValue('justify-content')", "center true");
+
+var justifyContentRightSafe = document.getElementById("justifyContentRightSafe");
+shouldBeEqualToString("getComputedStyle(justifyContentRightSafe, '').getPropertyValue('justify-content')", "right safe");
+
+var justifyContentLeftTrue = document.getElementById("justifyContentLeftTrue");
+shouldBeEqualToString("getComputedStyle(justifyContentLeftTrue, '').getPropertyValue('justify-content')", "left true");
+
+var justifyContentFlexStartTrue = document.getElementById("justifyContentFlexStartTrue");
+shouldBeEqualToString("getComputedStyle(justifyContentFlexStartTrue, '').getPropertyValue('justify-content')", "flex-start true");
+
+var justifyContentFlexEndSafe = document.getElementById("justifyContentFlexEndSafe");
+shouldBeEqualToString("getComputedStyle(justifyContentFlexEndSafe, '').getPropertyValue('justify-content')", "flex-end safe");
+
+var justifyContentSpaceBetweenLeft = document.getElementById("justifyContentSpaceBetweenLeft");
+shouldBeEqualToString("getComputedStyle(justifyContentSpaceBetweenLeft, '').getPropertyValue('justify-content')", "space-between left");
+
+var justifyContentSpaceAroundCenter = document.getElementById("justifyContentSpaceAroundCenter");
+shouldBeEqualToString("getComputedStyle(justifyContentSpaceAroundCenter, '').getPropertyValue('justify-content')", "space-around center");
+
+var justifyContentSpaceEvenlyRight = document.getElementById("justifyContentSpaceEvenlyRight");
+shouldBeEqualToString("getComputedStyle(justifyContentSpaceEvenlyRight, '').getPropertyValue('justify-content')", "space-evenly right");
+
+var justifyContentStretchStartSafe = document.getElementById("justifyContentStretchStartSafe");
+shouldBeEqualToString("getComputedStyle(justifyContentStretchStartSafe, '').getPropertyValue('justify-content')", "stretch start safe");
+
+var justifyContentSpaceAroundEndTrue = document.getElementById("justifyContentSpaceAroundEndTrue");
+shouldBeEqualToString("getComputedStyle(justifyContentSpaceAroundEndTrue, '').getPropertyValue('justify-content')", "space-around end true");
+
+var justifyContentSpaceEvenlyFlexStartSafe = document.getElementById("justifyContentSpaceEvenlyFlexStartSafe");
+shouldBeEqualToString("getComputedStyle(justifyContentSpaceEvenlyFlexStartSafe, '').getPropertyValue('justify-content')", "space-evenly flex-start safe");
+
+var justifyContentSpaceBetweenSafe = document.getElementById("justifyContentSpaceBetweenSafe");
+shouldBeEqualToString("getComputedStyle(justifyContentSpaceBetweenSafe, '').getPropertyValue('justify-content')", "start");
+
+var justifyContentSpaceAroundTrue = document.getElementById("justifyContentSpaceBetweenStretch");
+shouldBeEqualToString("getComputedStyle(justifyContentSpaceBetweenStretch, '').getPropertyValue('justify-content')", "start");
+
+var justifyContentSpaceAroundTrue = document.getElementById("justifyContentSafe");
+shouldBeEqualToString("getComputedStyle(justifyContentSafe, '').getPropertyValue('justify-content')", "start");
+
+var justifyContentSpaceAroundTrue = document.getElementById("justifyContentRightSafeTrue");
+shouldBeEqualToString("getComputedStyle(justifyContentRightSafeTrue, '').getPropertyValue('justify-content')", "start");
+
+var justifyContentSpaceAroundTrue = document.getElementById("justifyContentCenterLeft");
+shouldBeEqualToString("getComputedStyle(justifyContentCenterLeft, '').getPropertyValue('justify-content')", "start");
+
+debug("");
+debug("Test initial value of justify-content through JS");
+element = document.createElement("div");
+document.body.appendChild(element);
+shouldBeEqualToString("getComputedStyle(element, '').getPropertyValue('justify-content')", "start");
+
+debug("");
+debug("Test getting and setting justify-content through JS");
+element = document.createElement("div");
+document.body.appendChild(element);
+element.style.justifyContent = "center";
+checkValues(element, "justifyContent", "justify-content", "center", "center");
+
+element.style.justifyContent = "true start";
+checkValues(element, "justifyContent", "justify-content", "start true", "start true");
+
+element.style.justifyContent = "flex-end safe";
+checkValues(element, "justifyContent", "justify-content", "flex-end safe", "flex-end safe");
+
+element.style.justifyContent = "space-between right safe";
+checkValues(element, "justifyContent", "justify-content", "space-between right safe", "space-between right safe");
+
+element.style.justifyContent = "center stretch";
+checkValues(element, "justifyContent", "justify-content", "stretch center", "stretch center");
+
+element.style.justifyContent = "right true";
+checkValues(element, "justifyContent", "justify-content", "right true", "right true");
+
+element.style.justifyContent = "auto";
+checkValues(element, "justifyContent", "justify-content", "auto", "start");
+
+element.style.display = "-webkit-flex";
+element.style.justifyContent = "auto";
+checkValues(element, "justifyContent", "justify-content", "auto", "flex-start");
+
+element.style.display = "-webkit-grid";
+element.style.justifyContent = "auto";
+checkValues(element, "justifyContent", "justify-content", "auto", "start");
+
+element.style.justifyContent = "flex-end";
+checkValues(element, "justifyContent", "justify-content", "flex-end", "flex-end");
+
+debug("");
+debug("Test bad combinations of justify-content");
+element = document.createElement("div");
+document.body.appendChild(element);
+
+checkBadValues(element, "justifyContent", "justify-content", "");
+checkBadValues(element, "justifyContent", "justify-content", "true auto");
+checkBadValues(element, "justifyContent", "justify-content", "auto safe");
+checkBadValues(element, "justifyContent", "justify-content", "auto left");
+checkBadValues(element, "justifyContent", "justify-content", "baseline safe");
+checkBadValues(element, "justifyContent", "justify-content", "last baseline center");
+checkBadValues(element, "justifyContent", "justify-content", "true true");
+checkBadValues(element, "justifyContent", "justify-content", "true safe");
+checkBadValues(element, "justifyContent", "justify-content", "center start");
+checkBadValues(element, "justifyContent", "justify-content", "baseline safe");
+checkBadValues(element, "justifyContent", "justify-content", "true baseline");
+checkBadValues(element, "justifyContent", "justify-content", "true safe left");
+checkBadValues(element, "justifyContent", "justify-content", "true left safe");
+checkBadValues(element, "justifyContent", "justify-content", "left safe true safe");
+checkBadValues(element, "justifyContent", "justify-content", "start right space-between");
+checkBadValues(element, "justifyContent", "justify-content", "safe stretch");
+checkBadValues(element, "justifyContent", "justify-content", "space-around stretch");
+checkBadValues(element, "justifyContent", "justify-content", "end space-between start");
+checkBadValues(element, "justifyContent", "justify-content", "right safe left");
+checkBadValues(element, "justifyContent", "justify-content", "true");
+checkBadValues(element, "justifyContent", "justify-content", "safe");
+
+debug("");
+debug("Test the value 'initial'");
+element.style.display = "";
+checkInitialValues(element, "justifyContent", "justify-content", "stretch center", "start");
+
+debug("");
+debug("Test the value 'initial' for grid containers");
+element.style.display = "-webkit-grid";
+checkInitialValues(element, "justifyContent", "justify-content", "space-between left", "start");
+
+debug("");
+debug("Test the value 'initial' for flex containers");
+element.style.display = "-webkit-flex";
+checkInitialValues(element, "justifyContent", "justify-content", "right true", "flex-start");
+
+debug("");
+debug("Test the value 'inherit'");
+checkInheritValues("justifyContent", "justify-content", "end");
+checkInheritValues("justifyContent", "justify-content", "left safe");
+checkInheritValues("justifyContent", "justify-content", "stretch center");
+
+</script>
+</body>
+</html>
Modified: trunk/LayoutTests/fast/css/getComputedStyle/computed-style-expected.txt (183747 => 183748)
--- trunk/LayoutTests/fast/css/getComputedStyle/computed-style-expected.txt 2015-05-04 16:22:23 UTC (rev 183747)
+++ trunk/LayoutTests/fast/css/getComputedStyle/computed-style-expected.txt 2015-05-04 17:25:21 UTC (rev 183748)
@@ -151,7 +151,7 @@
align-self: start;
flex-direction: row;
flex-wrap: nowrap;
-justify-content: flex-start;
+justify-content: start;
justify-self: start;
justify-items: start;
-webkit-font-kerning: auto;
Modified: trunk/LayoutTests/fast/css/getComputedStyle/computed-style-without-renderer-expected.txt (183747 => 183748)
--- trunk/LayoutTests/fast/css/getComputedStyle/computed-style-without-renderer-expected.txt 2015-05-04 16:22:23 UTC (rev 183747)
+++ trunk/LayoutTests/fast/css/getComputedStyle/computed-style-without-renderer-expected.txt 2015-05-04 17:25:21 UTC (rev 183748)
@@ -150,7 +150,7 @@
align-self: auto
flex-direction: row
flex-wrap: nowrap
-justify-content: flex-start
+justify-content: auto
justify-self: auto
justify-items: auto
-webkit-font-kerning: auto
Modified: trunk/LayoutTests/svg/css/getComputedStyle-basic-expected.txt (183747 => 183748)
--- trunk/LayoutTests/svg/css/getComputedStyle-basic-expected.txt 2015-05-04 16:22:23 UTC (rev 183747)
+++ trunk/LayoutTests/svg/css/getComputedStyle-basic-expected.txt 2015-05-04 17:25:21 UTC (rev 183748)
@@ -300,8 +300,8 @@
rect: style.getPropertyCSSValue(flex-direction) : [object CSSPrimitiveValue]
rect: style.getPropertyValue(flex-wrap) : nowrap
rect: style.getPropertyCSSValue(flex-wrap) : [object CSSPrimitiveValue]
-rect: style.getPropertyValue(justify-content) : flex-start
-rect: style.getPropertyCSSValue(justify-content) : [object CSSPrimitiveValue]
+rect: style.getPropertyValue(justify-content) : start
+rect: style.getPropertyCSSValue(justify-content) : [object CSSValueList]
rect: style.getPropertyValue(justify-self) : start
rect: style.getPropertyCSSValue(justify-self) : [object CSSValueList]
rect: style.getPropertyValue(justify-items) : start
@@ -818,8 +818,8 @@
g: style.getPropertyCSSValue(flex-direction) : [object CSSPrimitiveValue]
g: style.getPropertyValue(flex-wrap) : nowrap
g: style.getPropertyCSSValue(flex-wrap) : [object CSSPrimitiveValue]
-g: style.getPropertyValue(justify-content) : flex-start
-g: style.getPropertyCSSValue(justify-content) : [object CSSPrimitiveValue]
+g: style.getPropertyValue(justify-content) : start
+g: style.getPropertyCSSValue(justify-content) : [object CSSValueList]
g: style.getPropertyValue(justify-self) : start
g: style.getPropertyCSSValue(justify-self) : [object CSSValueList]
g: style.getPropertyValue(justify-items) : start
Modified: trunk/Source/WebCore/CMakeLists.txt (183747 => 183748)
--- trunk/Source/WebCore/CMakeLists.txt 2015-05-04 16:22:23 UTC (rev 183747)
+++ trunk/Source/WebCore/CMakeLists.txt 2015-05-04 17:25:21 UTC (rev 183748)
@@ -1241,6 +1241,7 @@
css/CSSCanvasValue.cpp
css/CSSCharsetRule.cpp
css/CSSComputedStyleDeclaration.cpp
+ css/CSSContentDistributionValue.cpp
css/CSSCrossfadeValue.cpp
css/CSSCursorImageValue.cpp
css/CSSDefaultStyleSheets.cpp
Modified: trunk/Source/WebCore/ChangeLog (183747 => 183748)
--- trunk/Source/WebCore/ChangeLog 2015-05-04 16:22:23 UTC (rev 183747)
+++ trunk/Source/WebCore/ChangeLog 2015-05-04 17:25:21 UTC (rev 183748)
@@ -1,3 +1,99 @@
+2015-05-04 Javier Fernandez <[email protected]>
+
+ [CSS Box Alignment] Upgrade justify-content parsing to CSS3 Box Alignment spec.
+ https://bugs.webkit.org/show_bug.cgi?id=144442
+
+ Reviewed by David Hyatt.
+
+ Upgrade the justify-content property to the last CSS3 Box
+ Alignment specification. It defines a different enumeration for
+ Positional and Distribution alignment, which requires changes in
+ the FlexibleBox implementation.
+
+ A new parsing function has been implemented to replace the basic
+ keyword IDs validation. Because of the complexity of the new
+ values, a new CSSPrimitiveValue derived class has been defined
+ which simplifies considerably the parsing logic.
+
+ We will follow the same approach than for Self Alignment, defining
+ a single class to hold all the related alignment data. This makes
+ possible to use a StyleBuilderConverter function instead of custom
+ builder functions for these properties.
+
+ Test: css3/parse-justify-content.html
+
+ * CMakeLists.txt:
+ * WebCore.xcodeproj/project.pbxproj:
+ * css/CSSComputedStyleDeclaration.cpp:
+ (WebCore::resolveContentAlignmentAuto):
+ (WebCore::valueForContentPositionAndDistributionWithOverflowAlignment):
+ (WebCore::ComputedStyleExtractor::propertyValue):
+ (WebCore::valueForItemPositionWithOverflowAlignment): Deleted.
+ * css/CSSContentDistributionValue.cpp: Added.
+ (WebCore::CSSContentDistributionValue::CSSContentDistributionValue):
+ (WebCore::CSSContentDistributionValue::~CSSContentDistributionValue):
+ (WebCore::CSSContentDistributionValue::customCSSText):
+ (WebCore::CSSContentDistributionValue::equals):
+ * css/CSSContentDistributionValue.h: Added.
+ (WebCore::CSSContentDistributionValue::create):
+ (WebCore::CSSContentDistributionValue::distribution):
+ (WebCore::CSSContentDistributionValue::position):
+ (WebCore::CSSContentDistributionValue::overflow):
+ * css/CSSParser.cpp:
+ (WebCore::isValidKeywordPropertyAndValue):
+ (WebCore::isKeywordPropertyID):
+ (WebCore::CSSParser::parseValue):
+ (WebCore::isContentDistributionKeyword):
+ (WebCore::isContentPositionKeyword):
+ (WebCore::isAlignmentOverflowKeyword):
+ (WebCore::CSSParser::parseContentDistributionOverflowPosition):
+ (WebCore::CSSParser::parseItemPositionOverflowPosition):
+ (WebCore::CSSParser::parseLegacyPosition): Deleted.
+ * css/CSSParser.h:
+ * css/CSSPrimitiveValueMappings.h:
+ (WebCore::CSSPrimitiveValue::CSSPrimitiveValue):
+ (WebCore::CSSPrimitiveValue::operator ContentPosition):
+ (WebCore::CSSPrimitiveValue::operator ContentDistributionType):
+ (WebCore::CSSPrimitiveValue::operator EFlexDirection): Deleted.
+ * css/CSSPropertyNames.in:
+ * css/CSSValue.cpp:
+ (WebCore::CSSValue::equals):
+ (WebCore::CSSValue::cssText):
+ (WebCore::CSSValue::destroy):
+ * css/CSSValue.h:
+ (WebCore::CSSValue::isContentDistributionValue):
+ (WebCore::CSSValue::isWebKitCSSFilterValue): Deleted.
+ * css/CSSValueKeywords.in:
+ * css/StyleBuilderConverter.h:
+ (WebCore::StyleBuilderConverter::convertContentAlignmentData):
+ (WebCore::StyleBuilderConverter::convertSelfOrDefaultAlignmentData): Deleted.
+ * rendering/RenderFlexibleBox.cpp:
+ (WebCore::initialJustifyContentOffset):
+ (WebCore::justifyContentSpaceBetweenChildren):
+ (WebCore::RenderFlexibleBox::layoutAndPlaceChildren):
+ (WebCore::RenderFlexibleBox::layoutColumnReverse):
+ * rendering/RenderFullScreen.cpp:
+ (WebCore::createFullScreenStyle):
+ * rendering/mathml/RenderMathMLScripts.cpp:
+ (WebCore::RenderMathMLScripts::fixAnonymousStyleForSubSupPair):
+ (WebCore::RenderMathMLScripts::fixAnonymousStyles):
+ * rendering/style/RenderStyle.h:
+ * rendering/style/RenderStyleConstants.h:
+ * rendering/style/StyleContentAlignmentData.h: Added.
+ (WebCore::StyleContentAlignmentData::StyleContentAlignmentData):
+ (WebCore::StyleContentAlignmentData::setPosition):
+ (WebCore::StyleContentAlignmentData::setDistribution):
+ (WebCore::StyleContentAlignmentData::setOverflow):
+ (WebCore::StyleContentAlignmentData::position):
+ (WebCore::StyleContentAlignmentData::distribution):
+ (WebCore::StyleContentAlignmentData::overflow):
+ (WebCore::StyleContentAlignmentData::operator==):
+ (WebCore::StyleContentAlignmentData::operator!=):
+ * rendering/style/StyleRareNonInheritedData.cpp:
+ (WebCore::StyleRareNonInheritedData::StyleRareNonInheritedData):
+ (WebCore::StyleRareNonInheritedData::operator==):
+ * rendering/style/StyleRareNonInheritedData.h:
+
2015-05-04 Per Arne Vollan <[email protected]>
[WinCairo] Compile error in sharedEGLDisplay() method.
Modified: trunk/Source/WebCore/WebCore.xcodeproj/project.pbxproj (183747 => 183748)
--- trunk/Source/WebCore/WebCore.xcodeproj/project.pbxproj 2015-05-04 16:22:23 UTC (rev 183747)
+++ trunk/Source/WebCore/WebCore.xcodeproj/project.pbxproj 2015-05-04 17:25:21 UTC (rev 183748)
@@ -3789,6 +3789,9 @@
9BF9A8801648DD2F001C6B23 /* JSHTMLFormControlsCollection.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 9BF9A87E1648DD2F001C6B23 /* JSHTMLFormControlsCollection.cpp */; };
9BF9A8811648DD2F001C6B23 /* JSHTMLFormControlsCollection.h in Headers */ = {isa = PBXBuildFile; fileRef = 9BF9A87F1648DD2F001C6B23 /* JSHTMLFormControlsCollection.h */; };
9D6380101AF173220031A15C /* StyleSelfAlignmentData.h in Headers */ = {isa = PBXBuildFile; fileRef = 9D63800F1AF16E160031A15C /* StyleSelfAlignmentData.h */; settings = {ATTRIBUTES = (Private, ); }; };
+ 9DAC7C541AF2CAA100437C44 /* CSSContentDistributionValue.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 9DAC7C521AF2CAA100437C44 /* CSSContentDistributionValue.cpp */; };
+ 9DAC7C551AF2CAA200437C44 /* CSSContentDistributionValue.h in Headers */ = {isa = PBXBuildFile; fileRef = 9DAC7C531AF2CAA100437C44 /* CSSContentDistributionValue.h */; };
+ 9DAC7C571AF2CB6400437C44 /* StyleContentAlignmentData.h in Headers */ = {isa = PBXBuildFile; fileRef = 9DAC7C561AF2CB6400437C44 /* StyleContentAlignmentData.h */; settings = {ATTRIBUTES = (Private, ); }; };
9F72304F11184B4100AD0126 /* ScriptProfile.h in Headers */ = {isa = PBXBuildFile; fileRef = 9F72304C11184B4100AD0126 /* ScriptProfile.h */; settings = {ATTRIBUTES = (Private, ); }; };
9FA37EE41172FC8000C4CD55 /* ScriptProfileNode.h in Headers */ = {isa = PBXBuildFile; fileRef = 9FA37EE31172FC8000C4CD55 /* ScriptProfileNode.h */; settings = {ATTRIBUTES = (Private, ); }; };
9FA37EFA1172FDA600C4CD55 /* JSScriptProfile.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 9FA37EF61172FD9300C4CD55 /* JSScriptProfile.cpp */; };
@@ -11078,6 +11081,9 @@
9BF9A87E1648DD2F001C6B23 /* JSHTMLFormControlsCollection.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = JSHTMLFormControlsCollection.cpp; sourceTree = "<group>"; };
9BF9A87F1648DD2F001C6B23 /* JSHTMLFormControlsCollection.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = JSHTMLFormControlsCollection.h; sourceTree = "<group>"; };
9D63800F1AF16E160031A15C /* StyleSelfAlignmentData.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = StyleSelfAlignmentData.h; path = style/StyleSelfAlignmentData.h; sourceTree = "<group>"; };
+ 9DAC7C521AF2CAA100437C44 /* CSSContentDistributionValue.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = CSSContentDistributionValue.cpp; sourceTree = "<group>"; };
+ 9DAC7C531AF2CAA100437C44 /* CSSContentDistributionValue.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = CSSContentDistributionValue.h; sourceTree = "<group>"; };
+ 9DAC7C561AF2CB6400437C44 /* StyleContentAlignmentData.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = StyleContentAlignmentData.h; path = style/StyleContentAlignmentData.h; sourceTree = "<group>"; };
9F72304C11184B4100AD0126 /* ScriptProfile.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ScriptProfile.h; sourceTree = "<group>"; };
9FA37EE31172FC8000C4CD55 /* ScriptProfileNode.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ScriptProfileNode.h; sourceTree = "<group>"; };
9FA37EEF1172FD4100C4CD55 /* ScriptProfile.idl */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = ScriptProfile.idl; sourceTree = "<group>"; };
@@ -21376,6 +21382,7 @@
BC8C8FAA0DDCD2F200B592F4 /* style */ = {
isa = PBXGroup;
children = (
+ 9DAC7C561AF2CB6400437C44 /* StyleContentAlignmentData.h */,
9D63800F1AF16E160031A15C /* StyleSelfAlignmentData.h */,
FBD6AF8215EF21A3008B7110 /* BasicShapes.cpp */,
FBD6AF8315EF21A3008B7110 /* BasicShapes.h */,
@@ -22334,6 +22341,8 @@
children = (
31BC742B1AAFF45C006B4340 /* CSSAnimationTriggerScrollValue.cpp */,
31BC742C1AAFF45C006B4340 /* CSSAnimationTriggerScrollValue.h */,
+ 9DAC7C521AF2CAA100437C44 /* CSSContentDistributionValue.cpp */,
+ 9DAC7C531AF2CAA100437C44 /* CSSContentDistributionValue.h */,
83520C7D1A71BFCC006BD2AA /* CSSFontFamily.h */,
FBD6AF8415EF21D4008B7110 /* BasicShapeFunctions.cpp */,
FBD6AF8515EF21D4008B7110 /* BasicShapeFunctions.h */,
@@ -23993,7 +24002,6 @@
CE1252371A15BDBE00864480 /* CoreGraphicsSPI.h in Headers */,
443818001A91B2F8006E04F2 /* CoreMediaSoftLink.h in Headers */,
7C9DBFEE1A9C49B1000D6B25 /* JSHTMLAttachmentElement.h in Headers */,
- 9D6380101AF173220031A15C /* StyleSelfAlignmentData.h in Headers */,
4449A4051A964B0000B64AD5 /* CoreMediaSPI.h in Headers */,
1C6466251A12C38E0094603C /* CoreTextSPI.h in Headers */,
862F129E18C1576F005C54AF /* CountedUserActivity.h in Headers */,
@@ -24058,6 +24066,7 @@
BC6049CC0DB560C200204739 /* CSSCanvasValue.h in Headers */,
A80E6CF90A1989CA007FB8C5 /* CSSCharsetRule.h in Headers */,
BCEA4790097CAAC80094C9E4 /* CSSComputedStyleDeclaration.h in Headers */,
+ 9DAC7C551AF2CAA200437C44 /* CSSContentDistributionValue.h in Headers */,
2D8FEBDD143E3EF70072502B /* CSSCrossfadeValue.h in Headers */,
AA21ECCD0ABF0FC6002B834C /* CSSCursorImageValue.h in Headers */,
4A9CC81816BB9AC600EC645A /* CSSDefaultStyleSheets.h in Headers */,
@@ -26516,6 +26525,7 @@
835D363719FF6193004C93AB /* StyleBuilderCustom.h in Headers */,
BCEF444D0E674628001C1287 /* StyleCachedImage.h in Headers */,
9393E605151A9A1800066F06 /* StyleCachedImageSet.h in Headers */,
+ 9DAC7C571AF2CB6400437C44 /* StyleContentAlignmentData.h in Headers */,
BC5EB67F0E81D4A700B25965 /* StyleDashboardRegion.h in Headers */,
A8C4A7FD09D563270003AC8D /* StyledElement.h in Headers */,
BC5EB8B90E8201BD00B25965 /* StyleDeprecatedFlexibleBoxData.h in Headers */,
@@ -26542,6 +26552,7 @@
E4BBED4D14FCDBA1003F0B98 /* StyleRule.h in Headers */,
E4946EAF156E64DD00D3297F /* StyleRuleImport.h in Headers */,
F47A5E3E195B8C8A00483100 /* StyleScrollSnapPoints.h in Headers */,
+ 9D6380101AF173220031A15C /* StyleSelfAlignmentData.h in Headers */,
A8EA800C0A19516E00A8EF5F /* StyleSheet.h in Headers */,
E4F9EEF3156DA00700D23E7E /* StyleSheetContents.h in Headers */,
A8EA800A0A19516E00A8EF5F /* StyleSheetList.h in Headers */,
@@ -27787,6 +27798,7 @@
BC604A430DB5634E00204739 /* CSSCanvasValue.cpp in Sources */,
E1EBBBD40AAC9B87001FE8E2 /* CSSCharsetRule.cpp in Sources */,
BCEA478F097CAAC80094C9E4 /* CSSComputedStyleDeclaration.cpp in Sources */,
+ 9DAC7C541AF2CAA100437C44 /* CSSContentDistributionValue.cpp in Sources */,
2D8FEBDC143E3EF70072502B /* CSSCrossfadeValue.cpp in Sources */,
AA21ECCA0ABF0FBA002B834C /* CSSCursorImageValue.cpp in Sources */,
4A9CC81716BB9AC600EC645A /* CSSDefaultStyleSheets.cpp in Sources */,
Modified: trunk/Source/WebCore/css/CSSAllInOne.cpp (183747 => 183748)
--- trunk/Source/WebCore/css/CSSAllInOne.cpp 2015-05-04 16:22:23 UTC (rev 183747)
+++ trunk/Source/WebCore/css/CSSAllInOne.cpp 2015-05-04 17:25:21 UTC (rev 183748)
@@ -32,6 +32,7 @@
#include "CSSCanvasValue.cpp"
#include "CSSCharsetRule.cpp"
#include "CSSComputedStyleDeclaration.cpp"
+#include "CSSContentDistributionValue.cpp"
#include "CSSCrossfadeValue.cpp"
#include "CSSCursorImageValue.cpp"
#include "CSSDefaultStyleSheets.cpp"
Modified: trunk/Source/WebCore/css/CSSComputedStyleDeclaration.cpp (183747 => 183748)
--- trunk/Source/WebCore/css/CSSComputedStyleDeclaration.cpp 2015-05-04 16:22:23 UTC (rev 183747)
+++ trunk/Source/WebCore/css/CSSComputedStyleDeclaration.cpp 2015-05-04 17:25:21 UTC (rev 183748)
@@ -1717,8 +1717,7 @@
if (position != ItemPositionAuto || !element)
return position;
- bool isFlexOrGrid = element->style().isDisplayFlexibleOrGridBox();
- return isFlexOrGrid ? ItemPositionStretch : ItemPositionStart;
+ return element->style().isDisplayFlexibleOrGridBox() ? ItemPositionStretch : ItemPositionStart;
}
static ItemPosition resolveSelfAlignmentAuto(ItemPosition position, OverflowAlignment& overflow, RenderObject* element)
@@ -1734,6 +1733,14 @@
return resolveContainerAlignmentAuto(parent->style().alignItemsPosition(), parent);
}
+static ContentPosition resolveContentAlignmentAuto(ContentPosition position, ContentDistributionType distribution, RenderObject* element)
+{
+ if (position != ContentPositionAuto || distribution != ContentDistributionDefault || !element)
+ return position;
+
+ return element->style().isDisplayFlexibleBox() ? ContentPositionFlexStart : ContentPositionStart;
+}
+
PassRefPtr<CSSValue> CSSComputedStyleDeclaration::getPropertyCSSValue(CSSPropertyID propertyID, EUpdateLayout updateLayout) const
{
return ComputedStyleExtractor(m_node, m_allowVisitedStyle, m_pseudoElementSpecifier).propertyValue(propertyID, updateLayout);
@@ -1826,6 +1833,20 @@
return result.release();
}
+static PassRefPtr<CSSValueList> valueForContentPositionAndDistributionWithOverflowAlignment(ContentPosition position, ContentDistributionType distribution, OverflowAlignment overflowAlignment)
+{
+ RefPtr<CSSValueList> result = CSSValueList::createSpaceSeparated();
+ if (distribution != ContentDistributionDefault)
+ result->append(CSSPrimitiveValue::create(distribution));
+ if (distribution == ContentDistributionDefault || position != ContentPositionAuto)
+ result->append(CSSPrimitiveValue::create(position));
+ if ((position >= ContentPositionCenter || distribution != ContentDistributionDefault) && overflowAlignment != OverflowAlignmentDefault)
+ result->append(CSSPrimitiveValue::create(overflowAlignment));
+ ASSERT(result->length() > 0);
+ ASSERT(result->length() <= 3);
+ return result.release();
+}
+
PassRefPtr<CSSValue> ComputedStyleExtractor::propertyValue(CSSPropertyID propertyID, EUpdateLayout updateLayout) const
{
Node* styledNode = this->styledNode();
@@ -2210,7 +2231,7 @@
case CSSPropertyFlexWrap:
return cssValuePool().createValue(style->flexWrap());
case CSSPropertyJustifyContent:
- return cssValuePool().createValue(style->justifyContent());
+ return valueForContentPositionAndDistributionWithOverflowAlignment(resolveContentAlignmentAuto(style->justifyContentPosition(), style->justifyContentDistribution(), renderer), style->justifyContentDistribution(), style->justifyContentOverflowAlignment());
case CSSPropertyJustifyItems:
return valueForItemPositionWithOverflowAlignment(resolveContainerAlignmentAuto(style->justifyItemsPosition(), renderer), style->justifyItemsOverflowAlignment(), style->justifyItemsPositionType());
case CSSPropertyJustifySelf: {
Added: trunk/Source/WebCore/css/CSSContentDistributionValue.cpp (0 => 183748)
--- trunk/Source/WebCore/css/CSSContentDistributionValue.cpp (rev 0)
+++ trunk/Source/WebCore/css/CSSContentDistributionValue.cpp 2015-05-04 17:25:21 UTC (rev 183748)
@@ -0,0 +1,63 @@
+/*
+ * Copyright (C) 2015 Igalia S.L. All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS''
+ * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
+ * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+ * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS
+ * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
+ * THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#include "config.h"
+#include "CSSContentDistributionValue.h"
+
+#include "CSSValueList.h"
+#include <wtf/text/StringBuilder.h>
+
+namespace WebCore {
+
+CSSContentDistributionValue::CSSContentDistributionValue(CSSValueID distribution, CSSValueID position, CSSValueID overflow)
+ : CSSValue(CSSContentDistributionClass)
+ , m_distribution(distribution)
+ , m_position(position)
+ , m_overflow(overflow)
+{
+}
+
+CSSContentDistributionValue::~CSSContentDistributionValue()
+{
+}
+
+String CSSContentDistributionValue::customCSSText() const
+{
+ RefPtr<CSSValueList> list = CSSValueList::createSpaceSeparated();
+ if (m_distribution != CSSValueInvalid)
+ list->append(distribution());
+ if (m_position != CSSValueInvalid)
+ list->append(position());
+ if (m_overflow != CSSValueInvalid)
+ list->append(overflow());
+ return list.release()->customCSSText();
+}
+
+bool CSSContentDistributionValue::equals(const CSSContentDistributionValue& other) const
+{
+ return m_distribution == other.m_distribution && m_position == other.m_position && m_overflow == other.m_overflow;
+}
+
+}
Added: trunk/Source/WebCore/css/CSSContentDistributionValue.h (0 => 183748)
--- trunk/Source/WebCore/css/CSSContentDistributionValue.h (rev 0)
+++ trunk/Source/WebCore/css/CSSContentDistributionValue.h 2015-05-04 17:25:21 UTC (rev 183748)
@@ -0,0 +1,63 @@
+/*
+ * Copyright (C) 2015 Igalia S.L. All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS''
+ * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
+ * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+ * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS
+ * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
+ * THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#ifndef CSSContentDistributionValue_h
+#define CSSContentDistributionValue_h
+
+#include "CSSValue.h"
+#include "CSSValuePool.h"
+#include <wtf/RefPtr.h>
+
+namespace WebCore {
+
+class CSSContentDistributionValue : public CSSValue {
+public:
+ static Ref<CSSContentDistributionValue> create(CSSValueID distribution, CSSValueID position, CSSValueID overflow)
+ {
+ return adoptRef(*new CSSContentDistributionValue(distribution, position, overflow));
+ }
+ ~CSSContentDistributionValue();
+
+ Ref<CSSPrimitiveValue> distribution() const { return cssValuePool().createIdentifierValue(m_distribution); }
+ Ref<CSSPrimitiveValue> position() const { return cssValuePool().createIdentifierValue(m_position); }
+ Ref<CSSPrimitiveValue> overflow() const { return cssValuePool().createIdentifierValue(m_overflow); }
+
+ String customCSSText() const;
+
+ bool equals(const CSSContentDistributionValue&) const;
+
+private:
+ CSSContentDistributionValue(CSSValueID distribution, CSSValueID position, CSSValueID overflow);
+
+ CSSValueID m_distribution;
+ CSSValueID m_position;
+ CSSValueID m_overflow;
+};
+
+} // namespace WebCore
+
+SPECIALIZE_TYPE_TRAITS_CSS_VALUE(CSSContentDistributionValue, isContentDistributionValue())
+
+#endif // CSSContentDistributionValue_h
Modified: trunk/Source/WebCore/css/CSSParser.cpp (183747 => 183748)
--- trunk/Source/WebCore/css/CSSParser.cpp 2015-05-04 16:22:23 UTC (rev 183747)
+++ trunk/Source/WebCore/css/CSSParser.cpp 2015-05-04 17:25:21 UTC (rev 183748)
@@ -33,6 +33,7 @@
#include "CSSBasicShapes.h"
#include "CSSBorderImage.h"
#include "CSSCanvasValue.h"
+#include "CSSContentDistributionValue.h"
#include "CSSCrossfadeValue.h"
#include "CSSCursorImageValue.h"
#include "CSSFilterImageValue.h"
@@ -892,11 +893,6 @@
if (valueID == CSSValueNowrap || valueID == CSSValueWrap || valueID == CSSValueWrapReverse)
return true;
break;
- case CSSPropertyJustifyContent:
- // FIXME: Per CSS alignment, this property should accept an optional <overflow-position>. We should share this parsing code with 'justify-self'.
- if (valueID == CSSValueFlexStart || valueID == CSSValueFlexEnd || valueID == CSSValueCenter || valueID == CSSValueSpaceBetween || valueID == CSSValueSpaceAround)
- return true;
- break;
case CSSPropertyWebkitFontKerning:
if (valueID == CSSValueAuto || valueID == CSSValueNormal || valueID == CSSValueNone)
return true;
@@ -1128,7 +1124,6 @@
case CSSPropertyAlignContent:
case CSSPropertyFlexDirection:
case CSSPropertyFlexWrap:
- case CSSPropertyJustifyContent:
case CSSPropertyWebkitFontKerning:
case CSSPropertyWebkitFontSmoothing:
case CSSPropertyWebkitHyphens:
@@ -2713,6 +2708,9 @@
}
return false;
}
+ case CSSPropertyJustifyContent:
+ parsedValue = parseContentDistributionOverflowPosition();
+ break;
case CSSPropertyJustifySelf:
return parseItemPositionOverflowPosition(propId, important);
case CSSPropertyJustifyItems:
@@ -3119,7 +3117,6 @@
case CSSPropertyAlignContent:
case CSSPropertyFlexDirection:
case CSSPropertyFlexWrap:
- case CSSPropertyJustifyContent:
case CSSPropertyWebkitFontKerning:
case CSSPropertyWebkitFontSmoothing:
case CSSPropertyWebkitHyphens:
@@ -3232,11 +3229,29 @@
lval = WTF::move(list);
}
+static bool isContentDistributionKeyword(CSSValueID id)
+{
+ return id == CSSValueSpaceBetween || id == CSSValueSpaceAround
+ || id == CSSValueSpaceEvenly || id == CSSValueStretch;
+}
+
+static bool isContentPositionKeyword(CSSValueID id)
+{
+ return id == CSSValueStart || id == CSSValueEnd || id == CSSValueCenter
+ || id == CSSValueFlexStart || id == CSSValueFlexEnd
+ || id == CSSValueLeft || id == CSSValueRight;
+}
+
static inline bool isBaselinePositionKeyword(CSSValueID id)
{
return id == CSSValueBaseline || id == CSSValueLastBaseline;
}
+static bool isAlignmentOverflowKeyword(CSSValueID id)
+{
+ return id == CSSValueTrue || id == CSSValueSafe;
+}
+
static bool isItemPositionKeyword(CSSValueID id)
{
return id == CSSValueStart || id == CSSValueEnd || id == CSSValueCenter
@@ -3268,6 +3283,57 @@
return !m_valueList->next();
}
+PassRefPtr<CSSValue> CSSParser::parseContentDistributionOverflowPosition()
+{
+ // auto | <baseline-position> | <content-distribution> || [ <overflow-position>? && <content-position> ]
+ // <baseline-position> = baseline | last-baseline;
+ // <content-distribution> = space-between | space-around | space-evenly | stretch;
+ // <content-position> = center | start | end | flex-start | flex-end | left | right;
+ // <overflow-position> = true | safe
+
+ CSSParserValue* value = m_valueList->current();
+ if (!value)
+ return nullptr;
+
+ // auto | <baseline-position>
+ if (value->id == CSSValueAuto || isBaselinePositionKeyword(value->id)) {
+ m_valueList->next();
+ return CSSContentDistributionValue::create(CSSValueInvalid, value->id, CSSValueInvalid);
+ }
+
+ CSSValueID distribution = CSSValueInvalid;
+ CSSValueID position = CSSValueInvalid;
+ CSSValueID overflow = CSSValueInvalid;
+ while (value) {
+ if (isContentDistributionKeyword(value->id)) {
+ if (distribution != CSSValueInvalid)
+ return nullptr;
+ distribution = value->id;
+ } else if (isContentPositionKeyword(value->id)) {
+ if (position != CSSValueInvalid)
+ return nullptr;
+ position = value->id;
+ } else if (isAlignmentOverflowKeyword(value->id)) {
+ if (overflow != CSSValueInvalid)
+ return nullptr;
+ overflow = value->id;
+ } else
+ return nullptr;
+ value = m_valueList->next();
+ }
+
+ // The grammar states that we should have at least <content-distribution> or
+ // <content-position> ( <content-distribution> || <content-position> ).
+ if (position == CSSValueInvalid && distribution == CSSValueInvalid)
+ return nullptr;
+
+ // The grammar states that <overflow-position> must be associated to <content-position>.
+ if (overflow != CSSValueInvalid && position == CSSValueInvalid)
+ return nullptr;
+
+ return CSSContentDistributionValue::create(distribution, position, overflow);
+}
+
bool CSSParser::parseItemPositionOverflowPosition(CSSPropertyID propId, bool important)
{
// auto | stretch | <baseline-position> | [<item-position> && <overflow-position>? ]
@@ -3297,16 +3363,15 @@
return false;
overflowAlignmentKeyword = cssValuePool().createIdentifierValue(value->id);
}
- } else if (value->id != CSSValueTrue && value->id != CSSValueSafe)
- return false;
- else {
+ } else if (isAlignmentOverflowKeyword(value->id)) {
overflowAlignmentKeyword = cssValuePool().createIdentifierValue(value->id);
value = m_valueList->next();
if (value && isItemPositionKeyword(value->id))
position = cssValuePool().createIdentifierValue(value->id);
else
return false;
- }
+ } else
+ return false;
if (m_valueList->next())
return false;
Modified: trunk/Source/WebCore/css/CSSParser.h (183747 => 183748)
--- trunk/Source/WebCore/css/CSSParser.h 2015-05-04 16:22:23 UTC (rev 183747)
+++ trunk/Source/WebCore/css/CSSParser.h 2015-05-04 17:25:21 UTC (rev 183748)
@@ -231,6 +231,7 @@
bool parseLegacyPosition(CSSPropertyID, bool important);
bool parseItemPositionOverflowPosition(CSSPropertyID, bool important);
+ PassRefPtr<CSSValue> parseContentDistributionOverflowPosition();
#if ENABLE(CSS_SHAPES)
PassRefPtr<CSSValue> parseShapeProperty(CSSPropertyID);
Modified: trunk/Source/WebCore/css/CSSPrimitiveValueMappings.h (183747 => 183748)
--- trunk/Source/WebCore/css/CSSPrimitiveValueMappings.h 2015-05-04 16:22:23 UTC (rev 183747)
+++ trunk/Source/WebCore/css/CSSPrimitiveValueMappings.h 2015-05-04 17:25:21 UTC (rev 183748)
@@ -1438,52 +1438,6 @@
return SHOW;
}
-template<> inline CSSPrimitiveValue::CSSPrimitiveValue(EJustifyContent e)
- : CSSValue(PrimitiveClass)
-{
- m_primitiveUnitType = CSS_VALUE_ID;
- switch (e) {
- case JustifyFlexStart:
- m_value.valueID = CSSValueFlexStart;
- break;
- case JustifyFlexEnd:
- m_value.valueID = CSSValueFlexEnd;
- break;
- case JustifyCenter:
- m_value.valueID = CSSValueCenter;
- break;
- case JustifySpaceBetween:
- m_value.valueID = CSSValueSpaceBetween;
- break;
- case JustifySpaceAround:
- m_value.valueID = CSSValueSpaceAround;
- break;
- }
-}
-
-template<> inline CSSPrimitiveValue::operator EJustifyContent() const
-{
- ASSERT(isValueID());
-
- switch (m_value.valueID) {
- case CSSValueFlexStart:
- return JustifyFlexStart;
- case CSSValueFlexEnd:
- return JustifyFlexEnd;
- case CSSValueCenter:
- return JustifyCenter;
- case CSSValueSpaceBetween:
- return JustifySpaceBetween;
- case CSSValueSpaceAround:
- return JustifySpaceAround;
- default:
- break;
- }
-
- ASSERT_NOT_REACHED();
- return JustifyFlexStart;
-}
-
template<> inline CSSPrimitiveValue::CSSPrimitiveValue(EFlexDirection e)
: CSSValue(PrimitiveClass)
{
@@ -5186,7 +5140,115 @@
return OverflowAlignmentTrue;
}
+template<> inline CSSPrimitiveValue::CSSPrimitiveValue(ContentPosition contentPosition)
+ : CSSValue(PrimitiveClass)
+{
+ m_primitiveUnitType = CSS_VALUE_ID;
+ switch (contentPosition) {
+ case ContentPositionAuto:
+ m_value.valueID = CSSValueAuto;
+ break;
+ case ContentPositionBaseline:
+ m_value.valueID = CSSValueBaseline;
+ break;
+ case ContentPositionLastBaseline:
+ m_value.valueID = CSSValueLastBaseline;
+ break;
+ case ContentPositionCenter:
+ m_value.valueID = CSSValueCenter;
+ break;
+ case ContentPositionStart:
+ m_value.valueID = CSSValueStart;
+ break;
+ case ContentPositionEnd:
+ m_value.valueID = CSSValueEnd;
+ break;
+ case ContentPositionFlexStart:
+ m_value.valueID = CSSValueFlexStart;
+ break;
+ case ContentPositionFlexEnd:
+ m_value.valueID = CSSValueFlexEnd;
+ break;
+ case ContentPositionLeft:
+ m_value.valueID = CSSValueLeft;
+ break;
+ case ContentPositionRight:
+ m_value.valueID = CSSValueRight;
+ break;
+ }
+}
+template<> inline CSSPrimitiveValue::operator ContentPosition() const
+{
+ switch (m_value.valueID) {
+ case CSSValueAuto:
+ return ContentPositionAuto;
+ case CSSValueBaseline:
+ return ContentPositionBaseline;
+ case CSSValueLastBaseline:
+ return ContentPositionLastBaseline;
+ case CSSValueCenter:
+ return ContentPositionCenter;
+ case CSSValueStart:
+ return ContentPositionStart;
+ case CSSValueEnd:
+ return ContentPositionEnd;
+ case CSSValueFlexStart:
+ return ContentPositionFlexStart;
+ case CSSValueFlexEnd:
+ return ContentPositionFlexEnd;
+ case CSSValueLeft:
+ return ContentPositionLeft;
+ case CSSValueRight:
+ return ContentPositionRight;
+ default:
+ break;
+ }
+ ASSERT_NOT_REACHED();
+ return ContentPositionAuto;
+}
+
+template<> inline CSSPrimitiveValue::CSSPrimitiveValue(ContentDistributionType contentDistribution)
+ : CSSValue(PrimitiveClass)
+{
+ m_primitiveUnitType = CSS_VALUE_ID;
+ switch (contentDistribution) {
+ case ContentDistributionDefault:
+ m_value.valueID = CSSValueDefault;
+ break;
+ case ContentDistributionSpaceBetween:
+ m_value.valueID = CSSValueSpaceBetween;
+ break;
+ case ContentDistributionSpaceAround:
+ m_value.valueID = CSSValueSpaceAround;
+ break;
+ case ContentDistributionSpaceEvenly:
+ m_value.valueID = CSSValueSpaceEvenly;
+ break;
+ case ContentDistributionStretch:
+ m_value.valueID = CSSValueStretch;
+ break;
+ }
+}
+
+template<> inline CSSPrimitiveValue::operator ContentDistributionType() const
+{
+ switch (m_value.valueID) {
+ case CSSValueSpaceBetween:
+ return ContentDistributionSpaceBetween;
+ case CSSValueSpaceAround:
+ return ContentDistributionSpaceAround;
+ case CSSValueSpaceEvenly:
+ return ContentDistributionSpaceEvenly;
+ case CSSValueStretch:
+ return ContentDistributionStretch;
+ default:
+ break;
+ }
+ ASSERT_NOT_REACHED();
+ return ContentDistributionStretch;
+}
+
#if ENABLE(CSS_SCROLL_SNAP)
template<> inline CSSPrimitiveValue::CSSPrimitiveValue(ScrollSnapType e)
: CSSValue(PrimitiveClass)
Modified: trunk/Source/WebCore/css/CSSPropertyNames.in (183747 => 183748)
--- trunk/Source/WebCore/css/CSSPropertyNames.in 2015-05-04 16:22:23 UTC (rev 183747)
+++ trunk/Source/WebCore/css/CSSPropertyNames.in 2015-05-04 17:25:21 UTC (rev 183748)
@@ -473,7 +473,7 @@
-webkit-flex-shrink = flex-shrink
flex-wrap
-webkit-flex-wrap = flex-wrap
-justify-content
+justify-content [Initial=initialContentAlignment, Converter=ContentAlignmentData]
-webkit-justify-content = justify-content
#if defined(ENABLE_FILTERS_LEVEL_2) && ENABLE_FILTERS_LEVEL_2
-webkit-backdrop-filter [ConditionalConverter=FilterOperations]
Modified: trunk/Source/WebCore/css/CSSValue.cpp (183747 => 183748)
--- trunk/Source/WebCore/css/CSSValue.cpp 2015-05-04 16:22:23 UTC (rev 183747)
+++ trunk/Source/WebCore/css/CSSValue.cpp 2015-05-04 17:25:21 UTC (rev 183748)
@@ -33,6 +33,7 @@
#include "CSSBorderImageSliceValue.h"
#include "CSSCalculationValue.h"
#include "CSSCanvasValue.h"
+#include "CSSContentDistributionValue.h"
#include "CSSCrossfadeValue.h"
#include "CSSCursorImageValue.h"
#include "CSSFilterImageValue.h"
@@ -231,6 +232,8 @@
case AnimationTriggerScrollClass:
return compareCSSValues<CSSAnimationTriggerScrollValue>(*this, other);
#endif
+ case CSSContentDistributionClass:
+ return compareCSSValues<CSSContentDistributionValue>(*this, other);
default:
ASSERT_NOT_REACHED();
return false;
@@ -323,6 +326,8 @@
#endif
case WebKitCSSResourceClass:
return downcast<WebKitCSSResourceValue>(*this).customCSSText();
+ case CSSContentDistributionClass:
+ return downcast<CSSContentDistributionValue>(*this).customCSSText();
}
ASSERT_NOT_REACHED();
return String();
@@ -443,6 +448,9 @@
case WebKitCSSResourceClass:
delete downcast<WebKitCSSResourceValue>(this);
return;
+ case CSSContentDistributionClass:
+ delete downcast<CSSContentDistributionValue>(this);
+ return;
}
ASSERT_NOT_REACHED();
}
Modified: trunk/Source/WebCore/css/CSSValue.h (183747 => 183748)
--- trunk/Source/WebCore/css/CSSValue.h 2015-05-04 16:22:23 UTC (rev 183747)
+++ trunk/Source/WebCore/css/CSSValue.h 2015-05-04 17:25:21 UTC (rev 183748)
@@ -96,6 +96,7 @@
bool isCalcValue() const {return m_classType == CalculationClass; }
bool isFilterImageValue() const { return m_classType == FilterImageClass; }
bool isWebKitCSSFilterValue() const { return m_classType == WebKitCSSFilterClass; }
+ bool isContentDistributionValue() const { return m_classType == CSSContentDistributionClass; }
#if ENABLE(CSS_GRID_LAYOUT)
bool isGridTemplateAreasValue() const { return m_classType == GridTemplateAreasClass; }
bool isGridLineNamesValue() const { return m_classType == GridLineNamesClass; }
@@ -173,6 +174,8 @@
AnimationTriggerScrollClass,
#endif
+ CSSContentDistributionClass,
+
// List class types must appear after ValueListClass.
ValueListClass,
#if ENABLE(CSS_IMAGE_SET)
Modified: trunk/Source/WebCore/css/CSSValueKeywords.in (183747 => 183748)
--- trunk/Source/WebCore/css/CSSValueKeywords.in 2015-05-04 16:22:23 UTC (rev 183747)
+++ trunk/Source/WebCore/css/CSSValueKeywords.in 2015-05-04 17:25:21 UTC (rev 183748)
@@ -545,6 +545,7 @@
// center
space-between
space-around
+space-evenly
// stretch
// CSS_PROP_ALIGN_ITEMS / CSS_PROP_ALIGN_SELF
@@ -556,11 +557,15 @@
// stretch
// CSS_PROP_JUSTIFY_CONTENT
+// start
+// end
// flex-start
// flex-end
// center
// space-between
// space-around
+// space-evenly
+// stretch
// CSS_PROP_JUSTIFY_ITEMS / CSS_PROP_JUSTIFY_SELF
// auto
Modified: trunk/Source/WebCore/css/StyleBuilderConverter.h (183747 => 183748)
--- trunk/Source/WebCore/css/StyleBuilderConverter.h 2015-05-04 16:22:23 UTC (rev 183747)
+++ trunk/Source/WebCore/css/StyleBuilderConverter.h 2015-05-04 17:25:21 UTC (rev 183748)
@@ -29,6 +29,7 @@
#include "BasicShapeFunctions.h"
#include "CSSCalculationValue.h"
+#include "CSSContentDistributionValue.h"
#include "CSSFontFeatureValue.h"
#include "CSSFunctionValue.h"
#include "CSSGridLineNamesValue.h"
@@ -122,6 +123,7 @@
static String convertSVGURIReference(StyleResolver&, CSSValue&);
static Color convertSVGColor(StyleResolver&, CSSValue&);
static StyleSelfAlignmentData convertSelfOrDefaultAlignmentData(StyleResolver&, CSSValue&);
+ static StyleContentAlignmentData convertContentAlignmentData(StyleResolver&, CSSValue&);
static EGlyphOrientation convertGlyphOrientation(StyleResolver&, CSSValue&);
static EGlyphOrientation convertGlyphOrientationOrAuto(StyleResolver&, CSSValue&);
static Optional<Length> convertLineHeight(StyleResolver&, CSSValue&, float multiplier = 1.f);
@@ -1188,6 +1190,19 @@
return alignmentData;
}
+inline StyleContentAlignmentData StyleBuilderConverter::convertContentAlignmentData(StyleResolver&, CSSValue& value)
+{
+ StyleContentAlignmentData alignmentData = RenderStyle::initialContentAlignment();
+ auto& contentValue = downcast<CSSContentDistributionValue>(value);
+ if (contentValue.distribution()->getValueID() != CSSValueInvalid)
+ alignmentData.setDistribution(contentValue.distribution().get());
+ if (contentValue.position()->getValueID() != CSSValueInvalid)
+ alignmentData.setPosition(contentValue.position().get());
+ if (contentValue.overflow()->getValueID() != CSSValueInvalid)
+ alignmentData.setOverflow(contentValue.overflow().get());
+ return alignmentData;
+}
+
inline EGlyphOrientation StyleBuilderConverter::convertGlyphOrientation(StyleResolver&, CSSValue& value)
{
float angle = fabsf(fmodf(downcast<CSSPrimitiveValue>(value).getFloatValue(), 360.0f));
Modified: trunk/Source/WebCore/rendering/RenderFlexibleBox.cpp (183747 => 183748)
--- trunk/Source/WebCore/rendering/RenderFlexibleBox.cpp 2015-05-04 16:22:23 UTC (rev 183747)
+++ trunk/Source/WebCore/rendering/RenderFlexibleBox.cpp 2015-05-04 17:25:21 UTC (rev 183748)
@@ -958,13 +958,13 @@
return !totalViolation;
}
-static LayoutUnit initialJustifyContentOffset(LayoutUnit availableFreeSpace, EJustifyContent justifyContent, unsigned numberOfChildren)
+static LayoutUnit initialJustifyContentOffset(LayoutUnit availableFreeSpace, ContentPosition justifyContent, ContentDistributionType justifyContentDistribution, unsigned numberOfChildren)
{
- if (justifyContent == JustifyFlexEnd)
+ if (justifyContent == ContentPositionFlexEnd)
return availableFreeSpace;
- if (justifyContent == JustifyCenter)
+ if (justifyContent == ContentPositionCenter)
return availableFreeSpace / 2;
- if (justifyContent == JustifySpaceAround) {
+ if (justifyContentDistribution == ContentDistributionSpaceAround) {
if (availableFreeSpace > 0 && numberOfChildren)
return availableFreeSpace / (2 * numberOfChildren);
else
@@ -973,12 +973,12 @@
return 0;
}
-static LayoutUnit justifyContentSpaceBetweenChildren(LayoutUnit availableFreeSpace, EJustifyContent justifyContent, unsigned numberOfChildren)
+static LayoutUnit justifyContentSpaceBetweenChildren(LayoutUnit availableFreeSpace, ContentDistributionType justifyContentDistribution, unsigned numberOfChildren)
{
if (availableFreeSpace > 0 && numberOfChildren > 1) {
- if (justifyContent == JustifySpaceBetween)
+ if (justifyContentDistribution == ContentDistributionSpaceBetween)
return availableFreeSpace / (numberOfChildren - 1);
- if (justifyContent == JustifySpaceAround)
+ if (justifyContentDistribution == ContentDistributionSpaceAround)
return availableFreeSpace / numberOfChildren;
}
return 0;
@@ -1060,7 +1060,7 @@
size_t numberOfChildrenForJustifyContent = numberOfInFlowPositionedChildren(children);
LayoutUnit autoMarginOffset = autoMarginOffsetInMainAxis(children, availableFreeSpace);
LayoutUnit mainAxisOffset = flowAwareBorderStart() + flowAwarePaddingStart();
- mainAxisOffset += initialJustifyContentOffset(availableFreeSpace, style().justifyContent(), numberOfChildrenForJustifyContent);
+ mainAxisOffset += initialJustifyContentOffset(availableFreeSpace, style().justifyContentPosition(), style().justifyContentDistribution(), numberOfChildrenForJustifyContent);
if (style().flexDirection() == FlowRowReverse)
mainAxisOffset += isHorizontalFlow() ? verticalScrollbarWidth() : horizontalScrollbarHeight();
@@ -1117,7 +1117,7 @@
++seenInFlowPositionedChildren;
if (seenInFlowPositionedChildren < numberOfChildrenForJustifyContent)
- mainAxisOffset += justifyContentSpaceBetweenChildren(availableFreeSpace, style().justifyContent(), numberOfChildrenForJustifyContent);
+ mainAxisOffset += justifyContentSpaceBetweenChildren(availableFreeSpace, style().justifyContentDistribution(), numberOfChildrenForJustifyContent);
}
if (isColumnFlow())
@@ -1143,7 +1143,7 @@
// just moving the children to a new position.
size_t numberOfChildrenForJustifyContent = numberOfInFlowPositionedChildren(children);
LayoutUnit mainAxisOffset = logicalHeight() - flowAwareBorderEnd() - flowAwarePaddingEnd();
- mainAxisOffset -= initialJustifyContentOffset(availableFreeSpace, style().justifyContent(), numberOfChildrenForJustifyContent);
+ mainAxisOffset -= initialJustifyContentOffset(availableFreeSpace, style().justifyContentPosition(), style().justifyContentDistribution(), numberOfChildrenForJustifyContent);
mainAxisOffset -= isHorizontalFlow() ? verticalScrollbarWidth() : horizontalScrollbarHeight();
size_t seenInFlowPositionedChildren = 0;
@@ -1161,7 +1161,7 @@
++seenInFlowPositionedChildren;
if (seenInFlowPositionedChildren < numberOfChildrenForJustifyContent)
- mainAxisOffset -= justifyContentSpaceBetweenChildren(availableFreeSpace, style().justifyContent(), numberOfChildrenForJustifyContent);
+ mainAxisOffset -= justifyContentSpaceBetweenChildren(availableFreeSpace, style().justifyContentDistribution(), numberOfChildrenForJustifyContent);
}
}
Modified: trunk/Source/WebCore/rendering/RenderFullScreen.cpp (183747 => 183748)
--- trunk/Source/WebCore/rendering/RenderFullScreen.cpp 2015-05-04 16:22:23 UTC (rev 183747)
+++ trunk/Source/WebCore/rendering/RenderFullScreen.cpp 2015-05-04 17:25:21 UTC (rev 183748)
@@ -89,7 +89,7 @@
fullscreenStyle.get().fontCascade().update(nullptr);
fullscreenStyle.get().setDisplay(FLEX);
- fullscreenStyle.get().setJustifyContent(JustifyCenter);
+ fullscreenStyle.get().setJustifyContentPosition(ContentPositionCenter);
fullscreenStyle.get().setAlignItemsPosition(ItemPositionCenter);
fullscreenStyle.get().setFlexDirection(FlowColumn);
Modified: trunk/Source/WebCore/rendering/mathml/RenderMathMLScripts.cpp (183747 => 183748)
--- trunk/Source/WebCore/rendering/mathml/RenderMathMLScripts.cpp 2015-05-04 16:22:23 UTC (rev 183747)
+++ trunk/Source/WebCore/rendering/mathml/RenderMathMLScripts.cpp 2015-05-04 17:25:21 UTC (rev 183748)
@@ -95,7 +95,12 @@
// (respectively superscript) with the bottom (respectively top) edge of
// the flex container. Note that for valid <msub> and <msup> elements, the
// subSupPair should actually have only one script.
- scriptsStyle.setJustifyContent(m_kind == Sub ? JustifyFlexStart : m_kind == Super ? JustifyFlexEnd : JustifySpaceBetween);
+ if (m_kind == Sub)
+ scriptsStyle.setJustifyContentPosition(ContentPositionFlexStart);
+ else if (m_kind == Super)
+ scriptsStyle.setJustifyContentPosition(ContentPositionFlexEnd);
+ else
+ scriptsStyle.setJustifyContentDistribution(ContentDistributionSpaceBetween);
// The MathML specification does not specify vertical alignment of scripts.
// Let's right align prescripts and left align postscripts.
@@ -133,7 +138,7 @@
ASSERT(subSupPair && subSupPair->style().refCount() == 1);
RenderStyle& scriptsStyle = subSupPair->style();
scriptsStyle.setFlexDirection(FlowRow);
- scriptsStyle.setJustifyContent(JustifyFlexStart);
+ scriptsStyle.setJustifyContentPosition(ContentPositionFlexStart);
scriptsStyle.setAlignItemsPosition(ItemPositionCenter);
scriptsStyle.setOrder(0);
scriptsStyle.setFontSize(style().fontSize());
Modified: trunk/Source/WebCore/rendering/style/RenderStyle.h (183747 => 183748)
--- trunk/Source/WebCore/rendering/style/RenderStyle.h 2015-05-04 16:22:23 UTC (rev 183747)
+++ trunk/Source/WebCore/rendering/style/RenderStyle.h 2015-05-04 17:25:21 UTC (rev 183748)
@@ -922,7 +922,10 @@
bool isColumnFlexDirection() const { return flexDirection() == FlowColumn || flexDirection() == FlowColumnReverse; }
bool isReverseFlexDirection() const { return flexDirection() == FlowRowReverse || flexDirection() == FlowColumnReverse; }
EFlexWrap flexWrap() const { return static_cast<EFlexWrap>(rareNonInheritedData->m_flexibleBox->m_flexWrap); }
- EJustifyContent justifyContent() const { return static_cast<EJustifyContent>(rareNonInheritedData->m_justifyContent); }
+ const StyleContentAlignmentData& justifyContent() const { return rareNonInheritedData->m_justifyContent; }
+ ContentPosition justifyContentPosition() const { return rareNonInheritedData->m_justifyContent.position(); }
+ ContentDistributionType justifyContentDistribution() const { return rareNonInheritedData->m_justifyContent.distribution(); }
+ OverflowAlignment justifyContentOverflowAlignment() const { return rareNonInheritedData->m_justifyContent.overflow(); }
const StyleSelfAlignmentData& justifyItems() const { return rareNonInheritedData->m_justifyItems; }
ItemPosition justifyItemsPosition() const { return rareNonInheritedData->m_justifyItems.position(); }
OverflowAlignment justifyItemsOverflowAlignment() const { return rareNonInheritedData->m_justifyItems.overflow(); }
@@ -1510,7 +1513,10 @@
void setAlignSelfOverflow(OverflowAlignment overflow) { rareNonInheritedData.access()->m_alignSelf.setOverflow(overflow); }
void setFlexDirection(EFlexDirection direction) { SET_VAR(rareNonInheritedData.access()->m_flexibleBox, m_flexDirection, direction); }
void setFlexWrap(EFlexWrap w) { SET_VAR(rareNonInheritedData.access()->m_flexibleBox, m_flexWrap, w); }
- void setJustifyContent(EJustifyContent p) { SET_VAR(rareNonInheritedData, m_justifyContent, p); }
+ void setJustifyContent(const StyleContentAlignmentData& data) { SET_VAR(rareNonInheritedData, m_justifyContent, data); }
+ void setJustifyContentPosition(ContentPosition position) { rareNonInheritedData.access()->m_justifyContent.setPosition(position); }
+ void setJustifyContentOverflow(OverflowAlignment overflow) { rareNonInheritedData.access()->m_justifyContent.setOverflow(overflow); }
+ void setJustifyContentDistribution(ContentDistributionType distribution) { rareNonInheritedData.access()->m_justifyContent.setDistribution(distribution); }
void setJustifyItems(const StyleSelfAlignmentData& data) { SET_VAR(rareNonInheritedData, m_justifyItems, data); }
void setJustifyItemsPosition(ItemPosition position) { rareNonInheritedData.access()->m_justifyItems.setPosition(position); }
void setJustifyItemsOverflow(OverflowAlignment overflow) { rareNonInheritedData.access()->m_justifyItems.setOverflow(overflow); }
@@ -1804,6 +1810,7 @@
bool isDisplayInlineType() const { return isDisplayInlineType(display()); }
bool isOriginalDisplayInlineType() const { return isDisplayInlineType(originalDisplay()); }
bool isDisplayFlexibleOrGridBox() const { return isDisplayFlexibleOrGridBox(display()); }
+ bool isDisplayFlexibleBox() const { return isDisplayFlexibleBox(display()); }
bool isDisplayRegionType() const
{
return display() == BLOCK || display() == INLINE_BLOCK
@@ -1928,9 +1935,9 @@
static int initialOrder() { return 0; }
static EAlignContent initialAlignContent() { return AlignContentStretch; }
static StyleSelfAlignmentData initialSelfAlignment() { return StyleSelfAlignmentData(ItemPositionAuto, OverflowAlignmentDefault); }
+ static StyleContentAlignmentData initialContentAlignment() { return StyleContentAlignmentData(ContentPositionAuto, ContentDistributionDefault, OverflowAlignmentDefault); }
static EFlexDirection initialFlexDirection() { return FlowRow; }
static EFlexWrap initialFlexWrap() { return FlexNoWrap; }
- static EJustifyContent initialJustifyContent() { return JustifyFlexStart; }
static int initialMarqueeLoopCount() { return -1; }
static int initialMarqueeSpeed() { return 85; }
static Length initialMarqueeIncrement() { return Length(6, Fixed); }
Modified: trunk/Source/WebCore/rendering/style/RenderStyleConstants.h (183747 => 183748)
--- trunk/Source/WebCore/rendering/style/RenderStyleConstants.h 2015-05-04 16:22:23 UTC (rev 183747)
+++ trunk/Source/WebCore/rendering/style/RenderStyleConstants.h 2015-05-04 17:25:21 UTC (rev 183748)
@@ -248,10 +248,11 @@
enum EAlignContent { AlignContentFlexStart, AlignContentFlexEnd, AlignContentCenter, AlignContentSpaceBetween, AlignContentSpaceAround, AlignContentStretch };
enum EFlexDirection { FlowRow, FlowRowReverse, FlowColumn, FlowColumnReverse };
enum EFlexWrap { FlexNoWrap, FlexWrap, FlexWrapReverse };
-enum EJustifyContent { JustifyFlexStart, JustifyFlexEnd, JustifyCenter, JustifySpaceBetween, JustifySpaceAround };
enum ItemPosition {ItemPositionAuto, ItemPositionStretch, ItemPositionBaseline, ItemPositionLastBaseline, ItemPositionCenter, ItemPositionStart, ItemPositionEnd, ItemPositionSelfStart, ItemPositionSelfEnd, ItemPositionFlexStart, ItemPositionFlexEnd, ItemPositionLeft, ItemPositionRight};
enum OverflowAlignment {OverflowAlignmentDefault, OverflowAlignmentTrue, OverflowAlignmentSafe};
enum ItemPositionType {NonLegacyPosition, LegacyPosition};
+enum ContentPosition {ContentPositionAuto, ContentPositionBaseline, ContentPositionLastBaseline, ContentPositionCenter, ContentPositionStart, ContentPositionEnd, ContentPositionFlexStart, ContentPositionFlexEnd, ContentPositionLeft, ContentPositionRight};
+enum ContentDistributionType {ContentDistributionDefault, ContentDistributionSpaceBetween, ContentDistributionSpaceAround, ContentDistributionSpaceEvenly, ContentDistributionStretch};
enum ETextSecurity {
TSNONE, TSDISC, TSCIRCLE, TSSQUARE
Added: trunk/Source/WebCore/rendering/style/StyleContentAlignmentData.h (0 => 183748)
--- trunk/Source/WebCore/rendering/style/StyleContentAlignmentData.h (rev 0)
+++ trunk/Source/WebCore/rendering/style/StyleContentAlignmentData.h 2015-05-04 17:25:21 UTC (rev 183748)
@@ -0,0 +1,69 @@
+/*
+ * Copyright (C) 2015 Igalia S.L. All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS''
+ * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
+ * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+ * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS
+ * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
+ * THE POSSIBILITY OF SUCH DAMAGE.
+ */
+#ifndef StyleContentAlignmentData_h
+#define StyleContentAlignmentData_h
+
+#include "RenderStyleConstants.h"
+
+namespace WebCore {
+
+class StyleContentAlignmentData {
+public:
+ // Style data for Content-Distribution properties: align-content, justify-content.
+ // <content-distribution> || [ <overflow-position>? && <content-position> ]
+ StyleContentAlignmentData(ContentPosition position, ContentDistributionType distribution, OverflowAlignment overflow = OverflowAlignmentDefault)
+ : m_position(position)
+ , m_distribution(distribution)
+ , m_overflow(overflow)
+ {
+ }
+
+ void setPosition(ContentPosition position) { m_position = position; }
+ void setDistribution(ContentDistributionType distribution) { m_distribution = distribution; }
+ void setOverflow(OverflowAlignment overflow) { m_overflow = overflow; }
+
+ ContentPosition position() const { return static_cast<ContentPosition>(m_position); }
+ ContentDistributionType distribution() const { return static_cast<ContentDistributionType>(m_distribution); }
+ OverflowAlignment overflow() const { return static_cast<OverflowAlignment>(m_overflow); }
+
+ bool operator==(const StyleContentAlignmentData& o) const
+ {
+ return m_position == o.m_position && m_distribution == o.m_distribution && m_overflow == o.m_overflow;
+ }
+
+ bool operator!=(const StyleContentAlignmentData& o) const
+ {
+ return !(*this == o);
+ }
+
+private:
+ unsigned m_position : 4; // ContentPosition
+ unsigned m_distribution : 3; // ContentDistributionType
+ unsigned m_overflow : 2; // OverflowAlignment
+};
+
+} // namespace WebCore
+
+#endif // StyleContentAlignmentData_h
Modified: trunk/Source/WebCore/rendering/style/StyleRareNonInheritedData.cpp (183747 => 183748)
--- trunk/Source/WebCore/rendering/style/StyleRareNonInheritedData.cpp 2015-05-04 16:22:23 UTC (rev 183747)
+++ trunk/Source/WebCore/rendering/style/StyleRareNonInheritedData.cpp 2015-05-04 17:25:21 UTC (rev 183748)
@@ -73,6 +73,7 @@
, m_regionThread(RenderStyle::initialRegionThread())
, m_alignItems(RenderStyle::initialSelfAlignment())
, m_alignSelf(RenderStyle::initialSelfAlignment())
+ , m_justifyContent(RenderStyle::initialContentAlignment())
, m_justifyItems(RenderStyle::initialSelfAlignment())
, m_justifySelf(RenderStyle::initialSelfAlignment())
#if ENABLE(CSS_SCROLL_SNAP)
@@ -86,7 +87,6 @@
, m_transformStyle3D(RenderStyle::initialTransformStyle3D())
, m_backfaceVisibility(RenderStyle::initialBackfaceVisibility())
, m_alignContent(RenderStyle::initialAlignContent())
- , m_justifyContent(RenderStyle::initialJustifyContent())
, userDrag(RenderStyle::initialUserDrag())
, textOverflow(RenderStyle::initialTextOverflow())
, marginBeforeCollapse(MCOLLAPSE)
@@ -161,6 +161,7 @@
, m_regionThread(o.m_regionThread)
, m_alignItems(o.m_alignItems)
, m_alignSelf(o.m_alignSelf)
+ , m_justifyContent(o.m_justifyContent)
, m_justifyItems(o.m_justifyItems)
, m_justifySelf(o.m_justifySelf)
#if ENABLE(CSS_SCROLL_SNAP)
@@ -174,7 +175,6 @@
, m_transformStyle3D(o.m_transformStyle3D)
, m_backfaceVisibility(o.m_backfaceVisibility)
, m_alignContent(o.m_alignContent)
- , m_justifyContent(o.m_justifyContent)
, userDrag(o.userDrag)
, textOverflow(o.textOverflow)
, marginBeforeCollapse(o.marginBeforeCollapse)
@@ -258,6 +258,7 @@
&& m_flowThread == o.m_flowThread
&& m_alignItems == o.m_alignItems
&& m_alignSelf == o.m_alignSelf
+ && m_justifyContent == o.m_justifyContent
&& m_justifyItems == o.m_justifyItems
&& m_justifySelf == o.m_justifySelf
&& m_regionThread == o.m_regionThread
@@ -269,7 +270,6 @@
&& m_transformStyle3D == o.m_transformStyle3D
&& m_backfaceVisibility == o.m_backfaceVisibility
&& m_alignContent == o.m_alignContent
- && m_justifyContent == o.m_justifyContent
&& userDrag == o.userDrag
&& textOverflow == o.textOverflow
&& marginBeforeCollapse == o.marginBeforeCollapse
Modified: trunk/Source/WebCore/rendering/style/StyleRareNonInheritedData.h (183747 => 183748)
--- trunk/Source/WebCore/rendering/style/StyleRareNonInheritedData.h 2015-05-04 16:22:23 UTC (rev 183747)
+++ trunk/Source/WebCore/rendering/style/StyleRareNonInheritedData.h 2015-05-04 17:25:21 UTC (rev 183748)
@@ -34,6 +34,7 @@
#include "LineClampValue.h"
#include "NinePieceImage.h"
#include "ShapeValue.h"
+#include "StyleContentAlignmentData.h"
#include "StyleSelfAlignmentData.h"
#include <memory>
#include <wtf/PassRefPtr.h>
@@ -178,6 +179,7 @@
StyleSelfAlignmentData m_alignItems;
StyleSelfAlignmentData m_alignSelf;
+ StyleContentAlignmentData m_justifyContent;
StyleSelfAlignmentData m_justifyItems;
StyleSelfAlignmentData m_justifySelf;
@@ -196,7 +198,6 @@
unsigned m_backfaceVisibility : 1; // EBackfaceVisibility
unsigned m_alignContent : 3; // EAlignContent
- unsigned m_justifyContent : 3; // EJustifyContent
unsigned userDrag : 2; // EUserDrag
unsigned textOverflow : 1; // Whether or not lines that spill out should be truncated with "..."