Implement CSS Logical Properties: inline/block size
These properties provide the author with the ability to control layout through logical,
rather than physical, direction and dimension mappings.
Intent to Implement and Ship: CSS Logical Properties, Inline/Block size,
https://groups.google.com/a/chromium.org/forum/#!topic/blink-dev/4qEXWptfVHs. This intent
is a followup for "Intent to Deprecate and Remove: -webkit-{min-,max-}logical-{width,height}",
https://groups.google.com/a/chromium.org/forum/#!topic/blink-dev/VbPI65jBMIc.
When entire css-logical-props are implemented, will review these
-webkit-{min-,max-}logical-{width,height} and see if it is necessary to remove them.
Spec:
https://drafts.csswg.org/css-logical-props-1/#logical-dimension-properties
https://drafts.csswg.org/css-writing-modes-3/#logical-to-physical
BUG=538475
Review-Url: https://codereview.chromium.org/2577363002
Cr-Commit-Position: refs/heads/master@{#441979}
diff --git a/third_party/WebKit/LayoutTests/css3/logical-props/logicalprops-block-size-vlr.html b/third_party/WebKit/LayoutTests/css3/logical-props/logicalprops-block-size-vlr.html
new file mode 100644
index 0000000..139c199
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/css3/logical-props/logicalprops-block-size-vlr.html
@@ -0,0 +1,167 @@
+<!doctype html>
+<meta charset="utf-8">
+<title>CSS Logical Properties: {max-,min-}block-size vertical-lr</title>
+<link rel="author" title="Xu Xing" href="mailto:openxu@gmail.com">
+<link rel="help" href="https://drafts.csswg.org/css-logical-props-1/#logical-dimension-properties">
+<link rel="help" href="https://drafts.csswg.org/css-writing-modes-3/#logical-to-physical">
+<script src="../../resources/testharness.js"></script>
+<script src="../../resources/testharnessreport.js"></script>
+<script src="resources/style-check.js"></script>
+
+<style>
+div {
+ border: 1px solid #000;
+ writing-mode: vertical-lr;
+}
+#div1 {
+ block-size: 40px;
+ min-block-size: 50px;
+ max-block-size: 100px;
+}
+#div2 {
+ block-size: 100px;
+ min-block-size: 50px;
+ max-block-size: 100px;
+}
+#div3 {
+ block-size: 120px;
+ min-block-size: 50px;
+ max-block-size: 100px;
+}
+#ref_div1 {
+ width: 40px;
+ min-width: 50px;
+ max-width: 100px;
+}
+#ref_div2 {
+ width: 100px;
+ min-width: 50px;
+ max-width: 100px;
+}
+#ref_div3 {
+ width: 120px;
+ min-width: 50px;
+ max-width: 100px;
+}
+
+p {
+ border: 1px solid #000;
+ writing-mode: vertical-lr;
+}
+#p1 {
+ block-size: 100px;
+ width: 50px;
+}
+#p2 {
+ width: 50px;
+ block-size: 100px;
+}
+#ref_p1 {
+ width: 50px;
+}
+#ref_p2 {
+ width: 100px;
+}
+
+.table {
+ border: 1px solid #000;
+ display: table;
+ writing-mode: vertical-lr;
+}
+.tablecell {
+ display: table-cell;
+ writing-mode: vertical-lr;
+}
+#table1_cell {
+ block-size: 40px;
+ min-block-size: 50px;
+ max-block-size: 100px;
+ inline-size: 100px;
+ background-color: red;
+}
+#table2_cell {
+ block-size: 100px;
+ min-block-size: 50px;
+ max-block-size: 100px;
+ inline-size: 100px;
+ background-color: blue;
+}
+#table3_cell {
+ block-size: 120px;
+ min-block-size: 50px;
+ max-block-size: 100px;
+ inline-size: 100px;
+ background-color: green;
+}
+#ref_table1_cell {
+ width: 40px;
+ min-width: 50px;
+ max-width: 100px;
+ height: 100px;
+ background-color: red;
+}
+#ref_table2_cell {
+ width: 100px;
+ min-width: 50px;
+ max-width: 100px;
+ height: 100px;
+ background-color: blue;
+}
+#ref_table3_cell {
+ width: 120px;
+ min-width: 50px;
+ max-width: 100px;
+ height: 100px;
+ background-color: green;
+}
+</style>
+
+<div id="div1"></div>
+<div id="div2"></div>
+<div id="div3"></div>
+<div id="ref_div1"></div>
+<div id="ref_div2"></div>
+<div id="ref_div3"></div>
+
+<p id="p1"></div>
+<p id="p2"></div>
+<p id="ref_p1"></div>
+<p id="ref_p2"></div>
+
+<div class="table">
+ <div class="tablecell" id="table1_cell"></div>
+</div>
+<div class="table">
+ <div class="tablecell" id="table2_cell"></div>
+</div>
+<div class="table">
+ <div class="tablecell" id="table3_cell"></div>
+</div>
+<div class="table">
+ <div class="tablecell" id="ref_table1_cell"></div>
+</div>
+<div class="table">
+ <div class="tablecell" id="ref_table2_cell"></div>
+</div>
+<div class="table">
+ <div class="tablecell" id="ref_table3_cell"></div>
+</div>
+
+<script>
+test(function () {
+ assert_true(compareWidthHeight("div1", "ref_div1"));
+ assert_true(compareWidthHeight("div2", "ref_div2"));
+ assert_true(compareWidthHeight("div3", "ref_div3"));
+}, "Check that block-size < min-block-size or min-block-size < block-size <= max-block-size or block-size > max-block-size in vertical-lr");
+
+test(function () {
+ assert_true(compareWidthHeight("p1", "ref_p1"));
+ assert_true(compareWidthHeight("p2", "ref_p2"));
+}, "Check that width override block-size and vice versa in vertical-lr");
+
+test(function () {
+ assert_true(compareWidthHeight("table1_cell", "ref_table1_cell"));
+ assert_true(compareWidthHeight("table2_cell", "ref_table2_cell"));
+ assert_true(compareWidthHeight("table3_cell", "ref_table3_cell"));
+}, "Check that block-size < min-block-size or min-block-size < block-size <= max-block-size or block-size > max-block-size in table vertical-lr");
+</script>
diff --git a/third_party/WebKit/LayoutTests/css3/logical-props/logicalprops-block-size.html b/third_party/WebKit/LayoutTests/css3/logical-props/logicalprops-block-size.html
new file mode 100644
index 0000000..eeb86e4
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/css3/logical-props/logicalprops-block-size.html
@@ -0,0 +1,163 @@
+<!doctype html>
+<meta charset="utf-8">
+<title>CSS Logical Properties: {max-,min-}block-size</title>
+<link rel="author" title="Xu Xing" href="mailto:openxu@gmail.com">
+<link rel="help" href="https://drafts.csswg.org/css-logical-props-1/#logical-dimension-properties">
+<link rel="help" href="https://drafts.csswg.org/css-writing-modes-3/#logical-to-physical">
+<script src="../../resources/testharness.js"></script>
+<script src="../../resources/testharnessreport.js"></script>
+<script src="resources/style-check.js"></script>
+
+<style>
+div {
+ border: 1px solid #000;
+}
+#div1 {
+ block-size: 40px;
+ min-block-size: 50px;
+ max-block-size: 100px;
+}
+#div2 {
+ block-size: 100px;
+ min-block-size: 50px;
+ max-block-size: 100px;
+}
+#div3 {
+ block-size: 120px;
+ min-block-size: 50px;
+ max-block-size: 100px;
+}
+#ref_div1 {
+ height: 40px;
+ min-height: 50px;
+ max-height: 100px;
+}
+#ref_div2 {
+ height: 100px;
+ min-height: 50px;
+ max-height: 100px;
+}
+#ref_div3 {
+ height: 120px;
+ min-height: 50px;
+ max-height: 100px;
+}
+
+p {
+ border: 1px solid #000;
+}
+#p1 {
+ block-size: 100px;
+ height: 50px;
+}
+#p2 {
+ height: 50px;
+ block-size: 100px;
+}
+#ref_p1 {
+ height: 50px;
+}
+#ref_p2 {
+ height: 100px;
+}
+
+.table {
+ border: 1px solid #000;
+ display: table;
+}
+.tablecell {
+ display: table-cell;
+}
+#table1_cell {
+ block-size: 40px;
+ min-block-size: 50px;
+ max-block-size: 100px;
+ inline-size: 100px;
+ background-color: red;
+}
+#table2_cell {
+ block-size: 100px;
+ min-block-size: 50px;
+ max-block-size: 100px;
+ inline-size: 100px;
+ background-color: blue;
+}
+#table3_cell {
+ block-size: 120px;
+ min-block-size: 50px;
+ max-block-size: 100px;
+ inline-size: 100px;
+ background-color: green;
+}
+#ref_table1_cell {
+ height: 40px;
+ min-height: 50px;
+ max-height: 100px;
+ width: 100px;
+ background-color: red;
+}
+#ref_table2_cell {
+ height: 100px;
+ min-height: 50px;
+ max-height: 100px;
+ width: 100px;
+ background-color: blue;
+}
+#ref_table3_cell {
+ height: 120px;
+ min-height: 50px;
+ max-height: 100px;
+ width: 100px;
+ background-color: green;
+}
+</style>
+
+<div id="div1"></div>
+<div id="div2"></div>
+<div id="div3"></div>
+<div id="ref_div1"></div>
+<div id="ref_div2"></div>
+<div id="ref_div3"></div>
+
+<p id="p1"></div>
+<p id="p2"></div>
+<p id="ref_p1"></div>
+<p id="ref_p2"></div>
+
+<div class="table">
+ <div class="tablecell" id="table1_cell"></div>
+</div>
+<div class="table">
+ <div class="tablecell" id="table2_cell"></div>
+</div>
+<div class="table">
+ <div class="tablecell" id="table3_cell"></div>
+</div>
+<div class="table">
+ <div class="tablecell" id="ref_table1_cell"></div>
+</div>
+<div class="table">
+ <div class="tablecell" id="ref_table2_cell"></div>
+</div>
+<div class="table">
+ <div class="tablecell" id="ref_table3_cell"></div>
+</div>
+
+<script>
+test(function () {
+ assert_true(compareWidthHeight("div1", "ref_div1"));
+ assert_true(compareWidthHeight("div2", "ref_div2"));
+ assert_true(compareWidthHeight("div3", "ref_div3"));
+}, "Check that block-size < min-block-size or min-block-size < block-size <= max-block-size or block-size > max-block-size");
+
+test(function () {
+ assert_true(compareWidthHeight("p1", "ref_p1"));
+ assert_true(compareWidthHeight("p2", "ref_p2"));
+}, "Check that height override block-size and vice versa");
+
+test(function () {
+ assert_true(compareWidthHeight("table1_cell", "ref_table1_cell"));
+ assert_true(compareWidthHeight("table2_cell", "ref_table2_cell"));
+ assert_true(compareWidthHeight("table3_cell", "ref_table3_cell"));
+}, "Check that block-size < min-block-size or min-block-size < block-size <= max-block-size or block-size > max-block-size in table");
+</script>
diff --git a/third_party/WebKit/LayoutTests/css3/logical-props/logicalprops-inline-size-vlr.html b/third_party/WebKit/LayoutTests/css3/logical-props/logicalprops-inline-size-vlr.html
new file mode 100644
index 0000000..83e1548
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/css3/logical-props/logicalprops-inline-size-vlr.html
@@ -0,0 +1,167 @@
+<!doctype html>
+<meta charset="utf-8">
+<title>CSS Logical Properties: {max-,min-}inline-size vertical-lr</title>
+<link rel="author" title="Xu Xing" href="mailto:openxu@gmail.com">
+<link rel="help" href="https://drafts.csswg.org/css-logical-props-1/#logical-dimension-properties">
+<link rel="help" href="https://drafts.csswg.org/css-writing-modes-3/#logical-to-physical">
+<script src="../../resources/testharness.js"></script>
+<script src="../../resources/testharnessreport.js"></script>
+<script src="resources/style-check.js"></script>
+
+<style>
+div {
+ border: 1px solid #000;
+ writing-mode: vertical-lr;
+}
+#div1 {
+ inline-size: 40px;
+ min-inline-size: 50px;
+ max-inline-size: 100px;
+}
+#div2 {
+ inline-size: 100px;
+ min-inline-size: 50px;
+ max-inline-size: 100px;
+}
+#div3 {
+ inline-size: 120px;
+ min-inline-size: 50px;
+ max-inline-size: 100px;
+}
+#ref_div1 {
+ height: 40px;
+ min-height: 50px;
+ max-height: 100px;
+}
+#ref_div2 {
+ height: 100px;
+ min-height: 50px;
+ max-height: 100px;
+}
+#ref_div3 {
+ height: 120px;
+ min-height: 50px;
+ max-height: 100px;
+}
+
+p {
+ border: 1px solid #000;
+ writing-mode: vertical-lr;
+}
+#p1 {
+ inline-size: 100px;
+ height: 50px;
+}
+#p2 {
+ height: 50px;
+ inline-size: 100px;
+}
+#ref_p1 {
+ height: 50px;
+}
+#ref_p2 {
+ height: 100px;
+}
+
+.table {
+ border: 1px solid #000;
+ display: table;
+ writing-mode: vertical-lr;
+}
+.tablecell {
+ display: table-cell;
+ writing-mode: vertical-lr;
+}
+#table1_cell {
+ inline-size: 40px;
+ min-inline-size: 50px;
+ max-inline-size: 100px;
+ block-size: 100px;
+ background-color: red;
+}
+#table2_cell {
+ inline-size: 100px;
+ min-inline-size: 50px;
+ max-inline-size: 100px;
+ block-size: 100px;
+ background-color: blue;
+}
+#table3_cell {
+ inline-size: 120px;
+ min-inline-size: 50px;
+ max-inline-size: 100px;
+ block-size: 100px;
+ background-color: green;
+}
+#ref_table1_cell {
+ height: 40px;
+ min-height: 50px;
+ max-height: 100px;
+ width: 100px;
+ background-color: red;
+}
+#ref_table2_cell {
+ height: 100px;
+ min-height: 50px;
+ max-height: 100px;
+ width: 100px;
+ background-color: blue;
+}
+#ref_table3_cell {
+ height: 120px;
+ min-height: 50px;
+ max-height: 100px;
+ width: 100px;
+ background-color: green;
+}
+</style>
+
+<div id="div1"></div>
+<div id="div2"></div>
+<div id="div3"></div>
+<div id="ref_div1"></div>
+<div id="ref_div2"></div>
+<div id="ref_div3"></div>
+
+<p id="p1"></div>
+<p id="p2"></div>
+<p id="ref_p1"></div>
+<p id="ref_p2"></div>
+
+<div class="table">
+ <div class="tablecell" id="table1_cell"></div>
+</div>
+<div class="table">
+ <div class="tablecell" id="table2_cell"></div>
+</div>
+<div class="table">
+ <div class="tablecell" id="table3_cell"></div>
+</div>
+<div class="table">
+ <div class="tablecell" id="ref_table1_cell"></div>
+</div>
+<div class="table">
+ <div class="tablecell" id="ref_table2_cell"></div>
+</div>
+<div class="table">
+ <div class="tablecell" id="ref_table3_cell"></div>
+</div>
+
+<script>
+test(function () {
+ assert_true(compareWidthHeight("div1", "ref_div1"));
+ assert_true(compareWidthHeight("div2", "ref_div2"));
+ assert_true(compareWidthHeight("div3", "ref_div3"));
+}, "Check that inline-size < min-inline-size or min-inline-size < inline-size <= max-inline-size or inline-size > max-inline-size in vertical-lr");
+
+test(function () {
+ assert_true(compareWidthHeight("p1", "ref_p1"));
+ assert_true(compareWidthHeight("p2", "ref_p2"));
+}, "Check that height override inline-size and vice versa in vertical-lr");
+
+test(function () {
+ assert_true(compareWidthHeight("table1_cell", "ref_table1_cell"));
+ assert_true(compareWidthHeight("table2_cell", "ref_table2_cell"));
+ assert_true(compareWidthHeight("table3_cell", "ref_table3_cell"));
+}, "Check that inline-size < min-inline-size or min-inline-size < inline-size <= max-inline-size or inline-size > max-inline-size in table vertical-lr");
+</script>
diff --git a/third_party/WebKit/LayoutTests/css3/logical-props/logicalprops-inline-size.html b/third_party/WebKit/LayoutTests/css3/logical-props/logicalprops-inline-size.html
new file mode 100644
index 0000000..c22dcefb
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/css3/logical-props/logicalprops-inline-size.html
@@ -0,0 +1,163 @@
+<!doctype html>
+<meta charset="utf-8">
+<title>CSS Logical Properties: {max-,min-}inline-size</title>
+<link rel="author" title="Xu Xing" href="mailto:openxu@gmail.com">
+<link rel="help" href="https://drafts.csswg.org/css-logical-props-1/#logical-dimension-properties">
+<link rel="help" href="https://drafts.csswg.org/css-writing-modes-3/#logical-to-physical">
+<script src="../../resources/testharness.js"></script>
+<script src="../../resources/testharnessreport.js"></script>
+<script src="resources/style-check.js"></script>
+
+<style>
+div {
+ border: 1px solid #000;
+}
+#div1 {
+ inline-size: 40px;
+ min-inline-size: 50px;
+ max-inline-size: 100px;
+}
+#div2 {
+ inline-size: 100px;
+ min-inline-size: 50px;
+ max-inline-size: 100px;
+}
+#div3 {
+ inline-size: 120px;
+ min-inline-size: 50px;
+ max-inline-size: 100px;
+}
+#ref_div1 {
+ width: 40px;
+ min-width: 50px;
+ max-width: 100px;
+}
+#ref_div2 {
+ width: 100px;
+ min-width: 50px;
+ max-width: 100px;
+}
+#ref_div3 {
+ width: 120px;
+ min-width: 50px;
+ max-width: 100px;
+}
+
+p {
+ border: 1px solid #000;
+}
+#p1 {
+ inline-size: 100px;
+ width: 50px;
+}
+#p2 {
+ width: 50px;
+ inline-size: 100px;
+}
+#ref_p1 {
+ width: 50px;
+}
+#ref_p2 {
+ width: 100px;
+}
+
+.table {
+ border: 1px solid #000;
+ display: table;
+}
+.tablecell {
+ display: table-cell;
+}
+#table1_cell {
+ inline-size: 40px;
+ min-inline-size: 50px;
+ max-inline-size: 100px;
+ block-size: 100px;
+ background-color: red;
+}
+#table2_cell {
+ inline-size: 100px;
+ min-inline-size: 50px;
+ max-inline-size: 100px;
+ block-size: 100px;
+ background-color: blue;
+}
+#table3_cell {
+ inline-size: 120px;
+ min-inline-size: 50px;
+ max-inline-size: 100px;
+ block-size: 100px;
+ background-color: green;
+}
+#ref_table1_cell {
+ width: 40px;
+ min-width: 50px;
+ max-width: 100px;
+ height: 100px;
+ background-color: red;
+}
+#ref_table2_cell {
+ width: 100px;
+ min-width: 50px;
+ max-width: 100px;
+ height: 100px;
+ background-color: blue;
+}
+#ref_table3_cell {
+ width: 120px;
+ min-width: 50px;
+ max-width: 100px;
+ height: 100px;
+ background-color: green;
+}
+</style>
+
+<div id="div1"></div>
+<div id="div2"></div>
+<div id="div3"></div>
+<div id="ref_div1"></div>
+<div id="ref_div2"></div>
+<div id="ref_div3"></div>
+
+<p id="p1"></div>
+<p id="p2"></div>
+<p id="ref_p1"></div>
+<p id="ref_p2"></div>
+
+<div class="table">
+ <div class="tablecell" id="table1_cell"></div>
+</div>
+<div class="table">
+ <div class="tablecell" id="table2_cell"></div>
+</div>
+<div class="table">
+ <div class="tablecell" id="table3_cell"></div>
+</div>
+<div class="table">
+ <div class="tablecell" id="ref_table1_cell"></div>
+</div>
+<div class="table">
+ <div class="tablecell" id="ref_table2_cell"></div>
+</div>
+<div class="table">
+ <div class="tablecell" id="ref_table3_cell"></div>
+</div>
+
+<script>
+test(function () {
+ assert_true(compareWidthHeight("div1", "ref_div1"));
+ assert_true(compareWidthHeight("div2", "ref_div2"));
+ assert_true(compareWidthHeight("div3", "ref_div3"));
+}, "Check that inline-size < min-inline-size or min-inline-size < inline-size <= max-inline-size or inline-size > max-inline-size");
+
+test(function () {
+ assert_true(compareWidthHeight("p1", "ref_p1"));
+ assert_true(compareWidthHeight("p2", "ref_p2"));
+}, "Check that width override inline-size and vice versa");
+
+test(function () {
+ assert_true(compareWidthHeight("table1_cell", "ref_table1_cell"));
+ assert_true(compareWidthHeight("table2_cell", "ref_table2_cell"));
+ assert_true(compareWidthHeight("table3_cell", "ref_table3_cell"));
+}, "Check that inline-size < min-inline-size or min-inline-size < inline-size <= max-inline-size or inline-size > max-inline-size in table");
+</script>
diff --git a/third_party/WebKit/LayoutTests/css3/logical-props/logicalprops-quirklength.html b/third_party/WebKit/LayoutTests/css3/logical-props/logicalprops-quirklength.html
new file mode 100644
index 0000000..98e9011
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/css3/logical-props/logicalprops-quirklength.html
@@ -0,0 +1,30 @@
+<meta charset="utf-8">
+<title>CSS Logical Properties: {max-,min-}block-size</title>
+<link rel="author" title="Xu Xing" href="mailto:openxu@gmail.com">
+<link rel="help" href="https://drafts.csswg.org/css-logical-props-1/#logical-dimension-properties">
+<link rel="help" href="https://drafts.csswg.org/css-writing-modes-3/#logical-to-physical">
+<script src="../../resources/testharness.js"></script>
+<script src="../../resources/testharnessreport.js"></script>
+
+<style> #dummy {} </style>
+
+<script>
+function isValidDeclaration(cssText) {
+ var cssRule = document.styleSheets[0].cssRules[0];
+ cssRule.style = cssText;
+ var valid = (cssRule.style.length > 0);
+ cssRule.style = "";
+ return valid;
+}
+var tests = [
+ {cssText:"block-size: 1"},
+ {cssText:"min-block-size: 1"},
+ {cssText:"max-block-size: 1"},
+ {cssText:"inline-size: 1"},
+ {cssText:"min-inline-size: 1"},
+ {cssText:"max-inline-size: 1"},
+];
+tests.forEach(function(t) {
+ test(() => assert_false(isValidDeclaration(t.cssText)), "Check that unitless lengths are not valid for logical properties in quirks mode");
+});
+</script>
diff --git a/third_party/WebKit/LayoutTests/css3/logical-props/resources/style-check.js b/third_party/WebKit/LayoutTests/css3/logical-props/resources/style-check.js
new file mode 100644
index 0000000..cd129fd
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/css3/logical-props/resources/style-check.js
@@ -0,0 +1,9 @@
+"use strict";
+function compareWidthHeight(id1, id2) {
+ var element1 = document.getElementById(id1);
+ var style1 = getComputedStyle(element1);
+ var element2 = document.getElementById(id2);
+ var style2 = getComputedStyle(element2);
+ return (style1.width == style2.width) &&
+ (style1.height == style2.height)
+}
diff --git a/third_party/WebKit/LayoutTests/virtual/stable/webexposed/css-properties-as-js-properties-expected.txt b/third_party/WebKit/LayoutTests/virtual/stable/webexposed/css-properties-as-js-properties-expected.txt
index 1131a5b..f4f541d 100644
--- a/third_party/WebKit/LayoutTests/virtual/stable/webexposed/css-properties-as-js-properties-expected.txt
+++ b/third_party/WebKit/LayoutTests/virtual/stable/webexposed/css-properties-as-js-properties-expected.txt
@@ -30,6 +30,7 @@
backgroundRepeatY
backgroundSize
baselineShift
+blockSize
border
borderBottom
borderBottomColor
@@ -153,6 +154,7 @@
height
hyphens
imageRendering
+inlineSize
isolation
item
justifyContent
@@ -178,10 +180,14 @@
markerStart
mask
maskType
+maxBlockSize
maxHeight
+maxInlineSize
maxWidth
maxZoom
+minBlockSize
minHeight
+minInlineSize
minWidth
minZoom
mixBlendMode
diff --git a/third_party/WebKit/LayoutTests/webexposed/css-properties-as-js-properties-expected.txt b/third_party/WebKit/LayoutTests/webexposed/css-properties-as-js-properties-expected.txt
index b69e8ad..41ca12b 100644
--- a/third_party/WebKit/LayoutTests/webexposed/css-properties-as-js-properties-expected.txt
+++ b/third_party/WebKit/LayoutTests/webexposed/css-properties-as-js-properties-expected.txt
@@ -31,6 +31,7 @@
backgroundRepeatY
backgroundSize
baselineShift
+blockSize
border
borderBottom
borderBottomColor
@@ -158,6 +159,7 @@
hyphens
imageOrientation
imageRendering
+inlineSize
isolation
item
justifyContent
@@ -184,10 +186,14 @@
mask
maskSourceType
maskType
+maxBlockSize
maxHeight
+maxInlineSize
maxWidth
maxZoom
+minBlockSize
minHeight
+minInlineSize
minWidth
minZoom
mixBlendMode
diff --git a/third_party/WebKit/Source/core/css/CSSProperties.in b/third_party/WebKit/Source/core/css/CSSProperties.in
index 9221264..04b2366 100644
--- a/third_party/WebKit/Source/core/css/CSSProperties.in
+++ b/third_party/WebKit/Source/core/css/CSSProperties.in
@@ -475,6 +475,14 @@
word-wrap inherited, name_for_methods=OverflowWrap
z-index interpolable, type_name=int, custom_all
+// CSS logical props
+inline-size direction_aware
+block-size direction_aware
+min-inline-size direction_aware
+min-block-size direction_aware
+max-inline-size direction_aware
+max-block-size direction_aware
+
// Non-standard direction aware properties
-webkit-border-end-color direction_aware
diff --git a/third_party/WebKit/Source/core/css/CSSProperty.cpp b/third_party/WebKit/Source/core/css/CSSProperty.cpp
index 7df3a339..54fb6514 100644
--- a/third_party/WebKit/Source/core/css/CSSProperty.cpp
+++ b/third_party/WebKit/Source/core/css/CSSProperty.cpp
@@ -226,29 +226,35 @@
case CSSPropertyWebkitBorderAfterWidth:
return resolveToPhysicalProperty(direction, writingMode, AfterSide,
borderWidthShorthand());
+ case CSSPropertyInlineSize:
case CSSPropertyWebkitLogicalWidth: {
const CSSPropertyID properties[2] = {CSSPropertyWidth, CSSPropertyHeight};
return resolveToPhysicalProperty(writingMode, LogicalWidth, properties);
}
+ case CSSPropertyBlockSize:
case CSSPropertyWebkitLogicalHeight: {
const CSSPropertyID properties[2] = {CSSPropertyWidth, CSSPropertyHeight};
return resolveToPhysicalProperty(writingMode, LogicalHeight, properties);
}
+ case CSSPropertyMinInlineSize:
case CSSPropertyWebkitMinLogicalWidth: {
const CSSPropertyID properties[2] = {CSSPropertyMinWidth,
CSSPropertyMinHeight};
return resolveToPhysicalProperty(writingMode, LogicalWidth, properties);
}
+ case CSSPropertyMinBlockSize:
case CSSPropertyWebkitMinLogicalHeight: {
const CSSPropertyID properties[2] = {CSSPropertyMinWidth,
CSSPropertyMinHeight};
return resolveToPhysicalProperty(writingMode, LogicalHeight, properties);
}
+ case CSSPropertyMaxInlineSize:
case CSSPropertyWebkitMaxLogicalWidth: {
const CSSPropertyID properties[2] = {CSSPropertyMaxWidth,
CSSPropertyMaxHeight};
return resolveToPhysicalProperty(writingMode, LogicalWidth, properties);
}
+ case CSSPropertyMaxBlockSize:
case CSSPropertyWebkitMaxLogicalHeight: {
const CSSPropertyID properties[2] = {CSSPropertyMaxWidth,
CSSPropertyMaxHeight};
diff --git a/third_party/WebKit/Source/core/css/ComputedStyleCSSValueMapping.cpp b/third_party/WebKit/Source/core/css/ComputedStyleCSSValueMapping.cpp
index 0b1dbb4..b6bddae 100644
--- a/third_party/WebKit/Source/core/css/ComputedStyleCSSValueMapping.cpp
+++ b/third_party/WebKit/Source/core/css/ComputedStyleCSSValueMapping.cpp
@@ -3341,6 +3341,12 @@
// Directional properties are resolved by resolveDirectionAwareProperty()
// before the switch.
+ case CSSPropertyBlockSize:
+ case CSSPropertyInlineSize:
+ case CSSPropertyMaxBlockSize:
+ case CSSPropertyMaxInlineSize:
+ case CSSPropertyMinBlockSize:
+ case CSSPropertyMinInlineSize:
case CSSPropertyWebkitBorderEnd:
case CSSPropertyWebkitBorderEndColor:
case CSSPropertyWebkitBorderEndStyle:
diff --git a/third_party/WebKit/Source/core/css/parser/CSSParserFastPaths.cpp b/third_party/WebKit/Source/core/css/parser/CSSParserFastPaths.cpp
index 19b0fb2..d7c12f4 100644
--- a/third_party/WebKit/Source/core/css/parser/CSSParserFastPaths.cpp
+++ b/third_party/WebKit/Source/core/css/parser/CSSParserFastPaths.cpp
@@ -23,6 +23,10 @@
static inline bool isSimpleLengthPropertyID(CSSPropertyID propertyId,
bool& acceptsNegativeNumbers) {
switch (propertyId) {
+ case CSSPropertyBlockSize:
+ case CSSPropertyInlineSize:
+ case CSSPropertyMinBlockSize:
+ case CSSPropertyMinInlineSize:
case CSSPropertyFontSize:
case CSSPropertyGridColumnGap:
case CSSPropertyGridRowGap:
diff --git a/third_party/WebKit/Source/core/css/parser/CSSPropertyParser.cpp b/third_party/WebKit/Source/core/css/parser/CSSPropertyParser.cpp
index b4ebb79b..1d6cbb4 100644
--- a/third_party/WebKit/Source/core/css/parser/CSSPropertyParser.cpp
+++ b/third_party/WebKit/Source/core/css/parser/CSSPropertyParser.cpp
@@ -3445,6 +3445,8 @@
case CSSPropertyMaxWidth:
case CSSPropertyMaxHeight:
return consumeMaxWidthOrHeight(m_range, m_context, UnitlessQuirk::Allow);
+ case CSSPropertyMaxInlineSize:
+ case CSSPropertyMaxBlockSize:
case CSSPropertyWebkitMaxLogicalWidth:
case CSSPropertyWebkitMaxLogicalHeight:
return consumeMaxWidthOrHeight(m_range, m_context);
@@ -3453,6 +3455,10 @@
case CSSPropertyWidth:
case CSSPropertyHeight:
return consumeWidthOrHeight(m_range, m_context, UnitlessQuirk::Allow);
+ case CSSPropertyInlineSize:
+ case CSSPropertyBlockSize:
+ case CSSPropertyMinInlineSize:
+ case CSSPropertyMinBlockSize:
case CSSPropertyWebkitMinLogicalWidth:
case CSSPropertyWebkitMinLogicalHeight:
case CSSPropertyWebkitLogicalWidth:
diff --git a/third_party/WebKit/Source/core/frame/UseCounter.cpp b/third_party/WebKit/Source/core/frame/UseCounter.cpp
index e8526fe..21d98b3 100644
--- a/third_party/WebKit/Source/core/frame/UseCounter.cpp
+++ b/third_party/WebKit/Source/core/frame/UseCounter.cpp
@@ -46,7 +46,7 @@
}
// Make sure update_use_counter_css.py was run which updates histograms.xml.
-constexpr int kMaximumCSSSampleId = 549;
+constexpr int kMaximumCSSSampleId = 555;
} // namespace
@@ -1067,6 +1067,18 @@
return 548;
case CSSPropertyFontVariationSettings:
return 549;
+ case CSSPropertyInlineSize:
+ return 550;
+ case CSSPropertyBlockSize:
+ return 551;
+ case CSSPropertyMinInlineSize:
+ return 552;
+ case CSSPropertyMinBlockSize:
+ return 553;
+ case CSSPropertyMaxInlineSize:
+ return 554;
+ case CSSPropertyMaxBlockSize:
+ return 555;
// 1. Add new features above this line (don't change the assigned numbers of
// the existing items).
// 2. Update kMaximumCSSSampleId with the new maximum value.
diff --git a/tools/metrics/histograms/histograms.xml b/tools/metrics/histograms/histograms.xml
index cb669bf..b6b4d92 100644
--- a/tools/metrics/histograms/histograms.xml
+++ b/tools/metrics/histograms/histograms.xml
@@ -95487,6 +95487,12 @@
<int value="547" label="caret-color"/>
<int value="548" label="offset-rotate"/>
<int value="549" label="font-variation-settings"/>
+ <int value="550" label="inline-size"/>
+ <int value="551" label="block-size"/>
+ <int value="552" label="min-inline-size"/>
+ <int value="553" label="min-block-size"/>
+ <int value="554" label="max-inline-size"/>
+ <int value="555" label="max-block-size"/>
</enum>
<enum name="MappedEditingCommands" type="int">