Title: [219665] trunk
Revision
219665
Author
mmaxfi...@apple.com
Date
2017-07-19 16:38:06 -0700 (Wed, 19 Jul 2017)

Log Message

Setting the minimum font size preference doesn’t affect absolute line-height values, so lines overlap
https://bugs.webkit.org/show_bug.cgi?id=174406
Source/WebCore:

Reviewed by Simon Fraser.
<rdar://problem/10139227>

Reviewed by NOBODY.

When the minimumFontSize API preference is set, we will increase the font size without increasing
the line height. If the content specifies line-height as an absolute value, there can be two
unfortunate results:

- Adjacent lines in a paragraph can overlap
- If the paragraph (or containin block or whatever) uses overflow: hidden, the first and last lines
can be cut off and potentially indecipherable.

Instead, we should use the minimum font size preference as a signal that we should increase the
line-height as well as the font-size. Eventually, we will want to increase it by an amount
proportional to the increase in font-size (which can be due to minimumFontSize, minimumLogicalFontSize,
text autosizing, etc.). However, because minimumLogicalFontSize is on by default, this would cause
a behavior change on many webpages which use small text, so such a change would be too risky right now.
Instead, we can pretend that minimumFontSize is the only cause that text increases, and use this as the
only signal to boost the corresponding line-height.

Tests: fast/text/line-height-minimumFontSize-text-zoom.html
       fast/text/line-height-minimumFontSize-visual.html
       fast/text/line-height-minimumFontSize-zoom.html
       fast/text/line-height-minimumFontSize.html
       fast/text/line-height-minimumFontSize-autosize.html

* css/StyleBuilderCustom.h:
(WebCore::computeBaseSpecifiedFontSize):
(WebCore::computeLineHeightMultiplierDueToFontSize):
(WebCore::StyleBuilderCustom::applyValueLineHeight):
(WebCore::StyleBuilderCustom::applyValueFill):
(WebCore::StyleBuilderCustom::applyValueStroke):
(WebCore::StyleBuilderCustom::applyValueContent):
* rendering/TextAutoSizing.cpp:

LayoutTests:

<rdar://problem/10139227>

Reviewed by Simon Fraser.

* fast/text/line-height-minimumFontSize-autosize-expected.text: Added.
* fast/text/line-height-minimumFontSize-autosize.html: Added.
* fast/text/line-height-minimumFontSize-expected.txt: Added.
* fast/text/line-height-minimumFontSize-text-zoom-expected.html: Added.
* fast/text/line-height-minimumFontSize-text-zoom.html: Added.
* fast/text/line-height-minimumFontSize-visual-expected.html: Added.
* fast/text/line-height-minimumFontSize-visual.html: Added.
* fast/text/line-height-minimumFontSize-zoom-expected.html: Added.
* fast/text/line-height-minimumFontSize-zoom.html: Added.
* fast/text/line-height-minimumFontSize.html: Added.

Modified Paths

Added Paths

Diff

Modified: trunk/LayoutTests/ChangeLog (219664 => 219665)


--- trunk/LayoutTests/ChangeLog	2017-07-19 20:42:21 UTC (rev 219664)
+++ trunk/LayoutTests/ChangeLog	2017-07-19 23:38:06 UTC (rev 219665)
@@ -1,3 +1,41 @@
+2017-07-19  Myles C. Maxfield  <mmaxfi...@apple.com>
+
+        Setting the minimum font size preference doesn’t affect absolute line-height values, so lines overlap
+        https://bugs.webkit.org/show_bug.cgi?id=174406
+        <rdar://problem/10139227>
+
+        Reviewed by Simon Fraser.
+
+        * fast/text/line-height-minimumFontSize-autosize-expected.text: Added.
+        * fast/text/line-height-minimumFontSize-autosize.html: Added.
+        * fast/text/line-height-minimumFontSize-expected.txt: Added.
+        * fast/text/line-height-minimumFontSize-text-zoom-expected.html: Added.
+        * fast/text/line-height-minimumFontSize-text-zoom.html: Added.
+        * fast/text/line-height-minimumFontSize-visual-expected.html: Added.
+        * fast/text/line-height-minimumFontSize-visual.html: Added.
+        * fast/text/line-height-minimumFontSize-zoom-expected.html: Added.
+        * fast/text/line-height-minimumFontSize-zoom.html: Added.
+        * fast/text/line-height-minimumFontSize.html: Added.
+
+2017-07-18  Myles C. Maxfield  <mmaxfi...@apple.com>
+
+        Setting the minimum font size preference doesn’t affect absolute line-height values, so lines overlap
+        https://bugs.webkit.org/show_bug.cgi?id=174406
+        <rdar://problem/10139227>
+
+        Reviewed by Simon Fraser.
+
+        * fast/text/line-height-minimumFontSize-autosize-expected.text: Added.
+        * fast/text/line-height-minimumFontSize-autosize.html: Added.
+        * fast/text/line-height-minimumFontSize-expected.txt: Added.
+        * fast/text/line-height-minimumFontSize-text-zoom-expected.html: Added.
+        * fast/text/line-height-minimumFontSize-text-zoom.html: Added.
+        * fast/text/line-height-minimumFontSize-visual-expected.html: Added.
+        * fast/text/line-height-minimumFontSize-visual.html: Added.
+        * fast/text/line-height-minimumFontSize-zoom-expected.html: Added.
+        * fast/text/line-height-minimumFontSize-zoom.html: Added.
+        * fast/text/line-height-minimumFontSize.html: Added.
+
 2017-07-19  Chris Dumez  <cdu...@apple.com>
 
         DOMException should not have its own toString()

Added: trunk/LayoutTests/fast/text/line-height-minimumFontSize-autosize-expected.txt (0 => 219665)


--- trunk/LayoutTests/fast/text/line-height-minimumFontSize-autosize-expected.txt	                        (rev 0)
+++ trunk/LayoutTests/fast/text/line-height-minimumFontSize-autosize-expected.txt	2017-07-19 23:38:06 UTC (rev 219665)
@@ -0,0 +1,41 @@
+This test makes sure that webkit text autosizing does not obey the minimumFontSize setting.
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+
+PASS parseFloat(window.getComputedStyle(document.getElementById('test1')).getPropertyValue('font-size')) is 8 * 2
+PASS parseFloat(window.getComputedStyle(document.getElementById('test1')).getPropertyValue('line-height')) is comparisonLineHeight1
+PASS parseFloat(window.getComputedStyle(document.getElementById('test2')).getPropertyValue('font-size')) is 20 * 2
+PASS parseFloat(window.getComputedStyle(document.getElementById('test2')).getPropertyValue('line-height')) is comparisonLineHeight2
+PASS parseFloat(window.getComputedStyle(document.getElementById('test3')).getPropertyValue('font-size')) is 10 * 2
+PASS parseFloat(window.getComputedStyle(document.getElementById('test3')).getPropertyValue('line-height')) is comparisonLineHeight3
+PASS parseFloat(window.getComputedStyle(document.getElementById('test4')).getPropertyValue('font-size')) is 8 * 2
+PASS parseFloat(window.getComputedStyle(document.getElementById('test4')).getPropertyValue('line-height')) is (32 / (2 * 8)) * 12
+PASS parseFloat(window.getComputedStyle(document.getElementById('test5')).getPropertyValue('font-size')) is 20 * 2
+PASS parseFloat(window.getComputedStyle(document.getElementById('test5')).getPropertyValue('line-height')) is 25 * 2
+PASS parseFloat(window.getComputedStyle(document.getElementById('test6')).getPropertyValue('font-size')) is 10 * 2
+PASS parseFloat(window.getComputedStyle(document.getElementById('test6')).getPropertyValue('line-height')) is (32 / (2 * 10)) * 15
+PASS parseFloat(window.getComputedStyle(document.getElementById('test7')).getPropertyValue('line-height')) is 8 * 2 * 1.5
+PASS parseFloat(window.getComputedStyle(document.getElementById('test8')).getPropertyValue('line-height')) is 20 * 2 * 1.5
+PASS parseFloat(window.getComputedStyle(document.getElementById('test9')).getPropertyValue('line-height')) is 10 * 2 * 1.5
+PASS parseFloat(window.getComputedStyle(document.getElementById('test10')).getPropertyValue('line-height')) is 8 * 2 * 1.5
+PASS parseFloat(window.getComputedStyle(document.getElementById('test11')).getPropertyValue('line-height')) is 20 * 2 * 1.5
+PASS parseFloat(window.getComputedStyle(document.getElementById('test12')).getPropertyValue('line-height')) is 10 * 2 * 1.5
+PASS successfullyParsed is true
+
+TEST COMPLETE
+This text should have a decent spacing between the lines. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Cras ante orci, posuere at aliquam eget, ornare ut sapien. Praesent commodo volutpat auctor. Class aptent taciti sociosqu ad litora torquent per conubia nostra, per inceptos himenaeos. Vivamus interdum tincidunt pulvinar. Donec nec libero eros. Morbi facilisis lacus quis mi mattis quis pretium velit fringilla. Integer ipsum metus, pretium et tincidunt eget, commodo vel nibh. Cras feugiat lorem et velit interdum eu luctus dui gravida. Nullam nec gravida orci. Vestibulum quis imperdiet nibh. Vivamus tincidunt erat ac risus egestas mattis.
+This text should have a decent spacing between the lines. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Cras ante orci, posuere at aliquam eget, ornare ut sapien. Praesent commodo volutpat auctor. Class aptent taciti sociosqu ad litora torquent per conubia nostra, per inceptos himenaeos. Vivamus interdum tincidunt pulvinar. Donec nec libero eros. Morbi facilisis lacus quis mi mattis quis pretium velit fringilla. Integer ipsum metus, pretium et tincidunt eget, commodo vel nibh. Cras feugiat lorem et velit interdum eu luctus dui gravida. Nullam nec gravida orci. Vestibulum quis imperdiet nibh. Vivamus tincidunt erat ac risus egestas mattis.
+This text should have a decent spacing between the lines. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Cras ante orci, posuere at aliquam eget, ornare ut sapien. Praesent commodo volutpat auctor. Class aptent taciti sociosqu ad litora torquent per conubia nostra, per inceptos himenaeos. Vivamus interdum tincidunt pulvinar. Donec nec libero eros. Morbi facilisis lacus quis mi mattis quis pretium velit fringilla. Integer ipsum metus, pretium et tincidunt eget, commodo vel nibh. Cras feugiat lorem et velit interdum eu luctus dui gravida. Nullam nec gravida orci. Vestibulum quis imperdiet nibh. Vivamus tincidunt erat ac risus egestas mattis.
+This text should have a decent spacing between the lines. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Cras ante orci, posuere at aliquam eget, ornare ut sapien. Praesent commodo volutpat auctor. Class aptent taciti sociosqu ad litora torquent per conubia nostra, per inceptos himenaeos. Vivamus interdum tincidunt pulvinar. Donec nec libero eros. Morbi facilisis lacus quis mi mattis quis pretium velit fringilla. Integer ipsum metus, pretium et tincidunt eget, commodo vel nibh. Cras feugiat lorem et velit interdum eu luctus dui gravida. Nullam nec gravida orci. Vestibulum quis imperdiet nibh. Vivamus tincidunt erat ac risus egestas mattis.
+This text should have a decent spacing between the lines. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Cras ante orci, posuere at aliquam eget, ornare ut sapien. Praesent commodo volutpat auctor. Class aptent taciti sociosqu ad litora torquent per conubia nostra, per inceptos himenaeos. Vivamus interdum tincidunt pulvinar. Donec nec libero eros. Morbi facilisis lacus quis mi mattis quis pretium velit fringilla. Integer ipsum metus, pretium et tincidunt eget, commodo vel nibh. Cras feugiat lorem et velit interdum eu luctus dui gravida. Nullam nec gravida orci. Vestibulum quis imperdiet nibh. Vivamus tincidunt erat ac risus egestas mattis.
+This text should have a decent spacing between the lines. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Cras ante orci, posuere at aliquam eget, ornare ut sapien. Praesent commodo volutpat auctor. Class aptent taciti sociosqu ad litora torquent per conubia nostra, per inceptos himenaeos. Vivamus interdum tincidunt pulvinar. Donec nec libero eros. Morbi facilisis lacus quis mi mattis quis pretium velit fringilla. Integer ipsum metus, pretium et tincidunt eget, commodo vel nibh. Cras feugiat lorem et velit interdum eu luctus dui gravida. Nullam nec gravida orci. Vestibulum quis imperdiet nibh. Vivamus tincidunt erat ac risus egestas mattis.
+This text should have a decent spacing between the lines. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Cras ante orci, posuere at aliquam eget, ornare ut sapien. Praesent commodo volutpat auctor. Class aptent taciti sociosqu ad litora torquent per conubia nostra, per inceptos himenaeos. Vivamus interdum tincidunt pulvinar. Donec nec libero eros. Morbi facilisis lacus quis mi mattis quis pretium velit fringilla. Integer ipsum metus, pretium et tincidunt eget, commodo vel nibh. Cras feugiat lorem et velit interdum eu luctus dui gravida. Nullam nec gravida orci. Vestibulum quis imperdiet nibh. Vivamus tincidunt erat ac risus egestas mattis.
+This text should have a decent spacing between the lines. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Cras ante orci, posuere at aliquam eget, ornare ut sapien. Praesent commodo volutpat auctor. Class aptent taciti sociosqu ad litora torquent per conubia nostra, per inceptos himenaeos. Vivamus interdum tincidunt pulvinar. Donec nec libero eros. Morbi facilisis lacus quis mi mattis quis pretium velit fringilla. Integer ipsum metus, pretium et tincidunt eget, commodo vel nibh. Cras feugiat lorem et velit interdum eu luctus dui gravida. Nullam nec gravida orci. Vestibulum quis imperdiet nibh. Vivamus tincidunt erat ac risus egestas mattis.
+This text should have a decent spacing between the lines. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Cras ante orci, posuere at aliquam eget, ornare ut sapien. Praesent commodo volutpat auctor. Class aptent taciti sociosqu ad litora torquent per conubia nostra, per inceptos himenaeos. Vivamus interdum tincidunt pulvinar. Donec nec libero eros. Morbi facilisis lacus quis mi mattis quis pretium velit fringilla. Integer ipsum metus, pretium et tincidunt eget, commodo vel nibh. Cras feugiat lorem et velit interdum eu luctus dui gravida. Nullam nec gravida orci. Vestibulum quis imperdiet nibh. Vivamus tincidunt erat ac risus egestas mattis.
+This text should have a decent spacing between the lines. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Cras ante orci, posuere at aliquam eget, ornare ut sapien. Praesent commodo volutpat auctor. Class aptent taciti sociosqu ad litora torquent per conubia nostra, per inceptos himenaeos. Vivamus interdum tincidunt pulvinar. Donec nec libero eros. Morbi facilisis lacus quis mi mattis quis pretium velit fringilla. Integer ipsum metus, pretium et tincidunt eget, commodo vel nibh. Cras feugiat lorem et velit interdum eu luctus dui gravida. Nullam nec gravida orci. Vestibulum quis imperdiet nibh. Vivamus tincidunt erat ac risus egestas mattis.
+This text should have a decent spacing between the lines. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Cras ante orci, posuere at aliquam eget, ornare ut sapien. Praesent commodo volutpat auctor. Class aptent taciti sociosqu ad litora torquent per conubia nostra, per inceptos himenaeos. Vivamus interdum tincidunt pulvinar. Donec nec libero eros. Morbi facilisis lacus quis mi mattis quis pretium velit fringilla. Integer ipsum metus, pretium et tincidunt eget, commodo vel nibh. Cras feugiat lorem et velit interdum eu luctus dui gravida. Nullam nec gravida orci. Vestibulum quis imperdiet nibh. Vivamus tincidunt erat ac risus egestas mattis.
+This text should have a decent spacing between the lines. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Cras ante orci, posuere at aliquam eget, ornare ut sapien. Praesent commodo volutpat auctor. Class aptent taciti sociosqu ad litora torquent per conubia nostra, per inceptos himenaeos. Vivamus interdum tincidunt pulvinar. Donec nec libero eros. Morbi facilisis lacus quis mi mattis quis pretium velit fringilla. Integer ipsum metus, pretium et tincidunt eget, commodo vel nibh. Cras feugiat lorem et velit interdum eu luctus dui gravida. Nullam nec gravida orci. Vestibulum quis imperdiet nibh. Vivamus tincidunt erat ac risus egestas mattis.
+This text should have a decent spacing between the lines. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Cras ante orci, posuere at aliquam eget, ornare ut sapien. Praesent commodo volutpat auctor. Class aptent taciti sociosqu ad litora torquent per conubia nostra, per inceptos himenaeos. Vivamus interdum tincidunt pulvinar. Donec nec libero eros. Morbi facilisis lacus quis mi mattis quis pretium velit fringilla. Integer ipsum metus, pretium et tincidunt eget, commodo vel nibh. Cras feugiat lorem et velit interdum eu luctus dui gravida. Nullam nec gravida orci. Vestibulum quis imperdiet nibh. Vivamus tincidunt erat ac risus egestas mattis.
+This text should have a decent spacing between the lines. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Cras ante orci, posuere at aliquam eget, ornare ut sapien. Praesent commodo volutpat auctor. Class aptent taciti sociosqu ad litora torquent per conubia nostra, per inceptos himenaeos. Vivamus interdum tincidunt pulvinar. Donec nec libero eros. Morbi facilisis lacus quis mi mattis quis pretium velit fringilla. Integer ipsum metus, pretium et tincidunt eget, commodo vel nibh. Cras feugiat lorem et velit interdum eu luctus dui gravida. Nullam nec gravida orci. Vestibulum quis imperdiet nibh. Vivamus tincidunt erat ac risus egestas mattis.
+This text should have a decent spacing between the lines. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Cras ante orci, posuere at aliquam eget, ornare ut sapien. Praesent commodo volutpat auctor. Class aptent taciti sociosqu ad litora torquent per conubia nostra, per inceptos himenaeos. Vivamus interdum tincidunt pulvinar. Donec nec libero eros. Morbi facilisis lacus quis mi mattis quis pretium velit fringilla. Integer ipsum metus, pretium et tincidunt eget, commodo vel nibh. Cras feugiat lorem et velit interdum eu luctus dui gravida. Nullam nec gravida orci. Vestibulum quis imperdiet nibh. Vivamus tincidunt erat ac risus egestas mattis.

Added: trunk/LayoutTests/fast/text/line-height-minimumFontSize-autosize.html (0 => 219665)


--- trunk/LayoutTests/fast/text/line-height-minimumFontSize-autosize.html	                        (rev 0)
+++ trunk/LayoutTests/fast/text/line-height-minimumFontSize-autosize.html	2017-07-19 23:38:06 UTC (rev 219665)
@@ -0,0 +1,57 @@
+<html>
+<head>
+<meta name="viewport" content="user-scalable=no, width=320">
+<script>
+if (window.internals) {
+    internals.settings.setMinimumFontSize(32);
+    internals.settings.setTextAutosizingEnabled(true);
+    internals.settings.setTextAutosizingWindowSizeOverride(320, 480);
+}
+</script>
+<script src=""
+</head>
+<body style="-webkit-text-size-adjust: 200%;">
+<div id="reference1" style="-webkit-text-size-adjust: 100%; font-size: 16px; line-height: normal;">This text should have a decent spacing between the lines. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Cras ante orci, posuere at aliquam eget, ornare ut sapien. Praesent commodo volutpat auctor. Class aptent taciti sociosqu ad litora torquent per conubia nostra, per inceptos himenaeos. Vivamus interdum tincidunt pulvinar. Donec nec libero eros. Morbi facilisis lacus quis mi mattis quis pretium velit fringilla. Integer ipsum metus, pretium et tincidunt eget, commodo vel nibh. Cras feugiat lorem et velit interdum eu luctus dui gravida. Nullam nec gravida orci. Vestibulum quis imperdiet nibh. Vivamus tincidunt erat ac risus egestas mattis.</div>
+<div id="reference2" style="-webkit-text-size-adjust: 100%; font-size: 40px; line-height: normal;">This text should have a decent spacing between the lines. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Cras ante orci, posuere at aliquam eget, ornare ut sapien. Praesent commodo volutpat auctor. Class aptent taciti sociosqu ad litora torquent per conubia nostra, per inceptos himenaeos. Vivamus interdum tincidunt pulvinar. Donec nec libero eros. Morbi facilisis lacus quis mi mattis quis pretium velit fringilla. Integer ipsum metus, pretium et tincidunt eget, commodo vel nibh. Cras feugiat lorem et velit interdum eu luctus dui gravida. Nullam nec gravida orci. Vestibulum quis imperdiet nibh. Vivamus tincidunt erat ac risus egestas mattis.</div>
+<div id="reference3" style="-webkit-text-size-adjust: 100%; font-size: 20px; line-height: normal;">This text should have a decent spacing between the lines. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Cras ante orci, posuere at aliquam eget, ornare ut sapien. Praesent commodo volutpat auctor. Class aptent taciti sociosqu ad litora torquent per conubia nostra, per inceptos himenaeos. Vivamus interdum tincidunt pulvinar. Donec nec libero eros. Morbi facilisis lacus quis mi mattis quis pretium velit fringilla. Integer ipsum metus, pretium et tincidunt eget, commodo vel nibh. Cras feugiat lorem et velit interdum eu luctus dui gravida. Nullam nec gravida orci. Vestibulum quis imperdiet nibh. Vivamus tincidunt erat ac risus egestas mattis.</div>
+
+<div id="test1" style="font-size: 8px; line-height: normal;">This text should have a decent spacing between the lines. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Cras ante orci, posuere at aliquam eget, ornare ut sapien. Praesent commodo volutpat auctor. Class aptent taciti sociosqu ad litora torquent per conubia nostra, per inceptos himenaeos. Vivamus interdum tincidunt pulvinar. Donec nec libero eros. Morbi facilisis lacus quis mi mattis quis pretium velit fringilla. Integer ipsum metus, pretium et tincidunt eget, commodo vel nibh. Cras feugiat lorem et velit interdum eu luctus dui gravida. Nullam nec gravida orci. Vestibulum quis imperdiet nibh. Vivamus tincidunt erat ac risus egestas mattis.</div>
+<div id="test2" style="font-size: 20px; line-height: normal;">This text should have a decent spacing between the lines. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Cras ante orci, posuere at aliquam eget, ornare ut sapien. Praesent commodo volutpat auctor. Class aptent taciti sociosqu ad litora torquent per conubia nostra, per inceptos himenaeos. Vivamus interdum tincidunt pulvinar. Donec nec libero eros. Morbi facilisis lacus quis mi mattis quis pretium velit fringilla. Integer ipsum metus, pretium et tincidunt eget, commodo vel nibh. Cras feugiat lorem et velit interdum eu luctus dui gravida. Nullam nec gravida orci. Vestibulum quis imperdiet nibh. Vivamus tincidunt erat ac risus egestas mattis.</div>
+<div id="test3" style="font-size: x-small; line-height: normal;">This text should have a decent spacing between the lines. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Cras ante orci, posuere at aliquam eget, ornare ut sapien. Praesent commodo volutpat auctor. Class aptent taciti sociosqu ad litora torquent per conubia nostra, per inceptos himenaeos. Vivamus interdum tincidunt pulvinar. Donec nec libero eros. Morbi facilisis lacus quis mi mattis quis pretium velit fringilla. Integer ipsum metus, pretium et tincidunt eget, commodo vel nibh. Cras feugiat lorem et velit interdum eu luctus dui gravida. Nullam nec gravida orci. Vestibulum quis imperdiet nibh. Vivamus tincidunt erat ac risus egestas mattis.</div>
+<div id="test4" style="font-size: 8px; line-height: 12px;">This text should have a decent spacing between the lines. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Cras ante orci, posuere at aliquam eget, ornare ut sapien. Praesent commodo volutpat auctor. Class aptent taciti sociosqu ad litora torquent per conubia nostra, per inceptos himenaeos. Vivamus interdum tincidunt pulvinar. Donec nec libero eros. Morbi facilisis lacus quis mi mattis quis pretium velit fringilla. Integer ipsum metus, pretium et tincidunt eget, commodo vel nibh. Cras feugiat lorem et velit interdum eu luctus dui gravida. Nullam nec gravida orci. Vestibulum quis imperdiet nibh. Vivamus tincidunt erat ac risus egestas mattis.</div>
+<div id="test5" style="font-size: 20px; line-height: 25px;">This text should have a decent spacing between the lines. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Cras ante orci, posuere at aliquam eget, ornare ut sapien. Praesent commodo volutpat auctor. Class aptent taciti sociosqu ad litora torquent per conubia nostra, per inceptos himenaeos. Vivamus interdum tincidunt pulvinar. Donec nec libero eros. Morbi facilisis lacus quis mi mattis quis pretium velit fringilla. Integer ipsum metus, pretium et tincidunt eget, commodo vel nibh. Cras feugiat lorem et velit interdum eu luctus dui gravida. Nullam nec gravida orci. Vestibulum quis imperdiet nibh. Vivamus tincidunt erat ac risus egestas mattis.</div>
+<div id="test6" style="font-size: x-small; line-height: 15px;">This text should have a decent spacing between the lines. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Cras ante orci, posuere at aliquam eget, ornare ut sapien. Praesent commodo volutpat auctor. Class aptent taciti sociosqu ad litora torquent per conubia nostra, per inceptos himenaeos. Vivamus interdum tincidunt pulvinar. Donec nec libero eros. Morbi facilisis lacus quis mi mattis quis pretium velit fringilla. Integer ipsum metus, pretium et tincidunt eget, commodo vel nibh. Cras feugiat lorem et velit interdum eu luctus dui gravida. Nullam nec gravida orci. Vestibulum quis imperdiet nibh. Vivamus tincidunt erat ac risus egestas mattis.</div>
+<div id="test7" style="font-size: 8px; line-height: 150%;">This text should have a decent spacing between the lines. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Cras ante orci, posuere at aliquam eget, ornare ut sapien. Praesent commodo volutpat auctor. Class aptent taciti sociosqu ad litora torquent per conubia nostra, per inceptos himenaeos. Vivamus interdum tincidunt pulvinar. Donec nec libero eros. Morbi facilisis lacus quis mi mattis quis pretium velit fringilla. Integer ipsum metus, pretium et tincidunt eget, commodo vel nibh. Cras feugiat lorem et velit interdum eu luctus dui gravida. Nullam nec gravida orci. Vestibulum quis imperdiet nibh. Vivamus tincidunt erat ac risus egestas mattis.</div>
+<div id="test8" style="font-size: 20px; line-height: 150%;">This text should have a decent spacing between the lines. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Cras ante orci, posuere at aliquam eget, ornare ut sapien. Praesent commodo volutpat auctor. Class aptent taciti sociosqu ad litora torquent per conubia nostra, per inceptos himenaeos. Vivamus interdum tincidunt pulvinar. Donec nec libero eros. Morbi facilisis lacus quis mi mattis quis pretium velit fringilla. Integer ipsum metus, pretium et tincidunt eget, commodo vel nibh. Cras feugiat lorem et velit interdum eu luctus dui gravida. Nullam nec gravida orci. Vestibulum quis imperdiet nibh. Vivamus tincidunt erat ac risus egestas mattis.</div>
+<div id="test9" style="font-size: x-small; line-height: 150%;">This text should have a decent spacing between the lines. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Cras ante orci, posuere at aliquam eget, ornare ut sapien. Praesent commodo volutpat auctor. Class aptent taciti sociosqu ad litora torquent per conubia nostra, per inceptos himenaeos. Vivamus interdum tincidunt pulvinar. Donec nec libero eros. Morbi facilisis lacus quis mi mattis quis pretium velit fringilla. Integer ipsum metus, pretium et tincidunt eget, commodo vel nibh. Cras feugiat lorem et velit interdum eu luctus dui gravida. Nullam nec gravida orci. Vestibulum quis imperdiet nibh. Vivamus tincidunt erat ac risus egestas mattis.</div>
+<div id="test10" style="font-size: 8px; line-height: 1.5;">This text should have a decent spacing between the lines. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Cras ante orci, posuere at aliquam eget, ornare ut sapien. Praesent commodo volutpat auctor. Class aptent taciti sociosqu ad litora torquent per conubia nostra, per inceptos himenaeos. Vivamus interdum tincidunt pulvinar. Donec nec libero eros. Morbi facilisis lacus quis mi mattis quis pretium velit fringilla. Integer ipsum metus, pretium et tincidunt eget, commodo vel nibh. Cras feugiat lorem et velit interdum eu luctus dui gravida. Nullam nec gravida orci. Vestibulum quis imperdiet nibh. Vivamus tincidunt erat ac risus egestas mattis.</div>
+<div id="test11" style="font-size: 20px; line-height: 1.5;">This text should have a decent spacing between the lines. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Cras ante orci, posuere at aliquam eget, ornare ut sapien. Praesent commodo volutpat auctor. Class aptent taciti sociosqu ad litora torquent per conubia nostra, per inceptos himenaeos. Vivamus interdum tincidunt pulvinar. Donec nec libero eros. Morbi facilisis lacus quis mi mattis quis pretium velit fringilla. Integer ipsum metus, pretium et tincidunt eget, commodo vel nibh. Cras feugiat lorem et velit interdum eu luctus dui gravida. Nullam nec gravida orci. Vestibulum quis imperdiet nibh. Vivamus tincidunt erat ac risus egestas mattis.</div>
+<div id="test12" style="font-size: x-small; line-height: 1.5;">This text should have a decent spacing between the lines. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Cras ante orci, posuere at aliquam eget, ornare ut sapien. Praesent commodo volutpat auctor. Class aptent taciti sociosqu ad litora torquent per conubia nostra, per inceptos himenaeos. Vivamus interdum tincidunt pulvinar. Donec nec libero eros. Morbi facilisis lacus quis mi mattis quis pretium velit fringilla. Integer ipsum metus, pretium et tincidunt eget, commodo vel nibh. Cras feugiat lorem et velit interdum eu luctus dui gravida. Nullam nec gravida orci. Vestibulum quis imperdiet nibh. Vivamus tincidunt erat ac risus egestas mattis.</div>
+<script>
+description("This test makes sure that webkit text autosizing does not obey the minimumFontSize setting.");
+
+var comparisonLineHeight1 = parseFloat(window.getComputedStyle(document.getElementById('reference1')).getPropertyValue('line-height'));
+var comparisonLineHeight2 = parseFloat(window.getComputedStyle(document.getElementById('reference2')).getPropertyValue('line-height'));
+var comparisonLineHeight3 = parseFloat(window.getComputedStyle(document.getElementById('reference3')).getPropertyValue('line-height'));
+shouldBe("parseFloat(window.getComputedStyle(document.getElementById('test1')).getPropertyValue('font-size'))", "8 * 2");
+shouldBe("parseFloat(window.getComputedStyle(document.getElementById('test1')).getPropertyValue('line-height'))", "comparisonLineHeight1");
+shouldBe("parseFloat(window.getComputedStyle(document.getElementById('test2')).getPropertyValue('font-size'))", "20 * 2");
+shouldBe("parseFloat(window.getComputedStyle(document.getElementById('test2')).getPropertyValue('line-height'))", "comparisonLineHeight2");
+shouldBe("parseFloat(window.getComputedStyle(document.getElementById('test3')).getPropertyValue('font-size'))", "10 * 2");
+shouldBe("parseFloat(window.getComputedStyle(document.getElementById('test3')).getPropertyValue('line-height'))", "comparisonLineHeight3");
+shouldBe("parseFloat(window.getComputedStyle(document.getElementById('test4')).getPropertyValue('font-size'))", "8 * 2");
+shouldBe("parseFloat(window.getComputedStyle(document.getElementById('test4')).getPropertyValue('line-height'))", "(32 / (2 * 8)) * 12");
+shouldBe("parseFloat(window.getComputedStyle(document.getElementById('test5')).getPropertyValue('font-size'))", "20 * 2");
+shouldBe("parseFloat(window.getComputedStyle(document.getElementById('test5')).getPropertyValue('line-height'))", "25 * 2");
+shouldBe("parseFloat(window.getComputedStyle(document.getElementById('test6')).getPropertyValue('font-size'))", "10 * 2");
+shouldBe("parseFloat(window.getComputedStyle(document.getElementById('test6')).getPropertyValue('line-height'))", "(32 / (2 * 10)) * 15");
+shouldBe("parseFloat(window.getComputedStyle(document.getElementById('test7')).getPropertyValue('line-height'))", "8 * 2 * 1.5");
+shouldBe("parseFloat(window.getComputedStyle(document.getElementById('test8')).getPropertyValue('line-height'))", "20 * 2 * 1.5");
+shouldBe("parseFloat(window.getComputedStyle(document.getElementById('test9')).getPropertyValue('line-height'))", "10 * 2 * 1.5");
+shouldBe("parseFloat(window.getComputedStyle(document.getElementById('test10')).getPropertyValue('line-height'))", "8 * 2 * 1.5");
+shouldBe("parseFloat(window.getComputedStyle(document.getElementById('test11')).getPropertyValue('line-height'))", "20 * 2 * 1.5");
+shouldBe("parseFloat(window.getComputedStyle(document.getElementById('test12')).getPropertyValue('line-height'))", "10 * 2 * 1.5");
+</script>
+<script src=""
+</body>
+</html>

Added: trunk/LayoutTests/fast/text/line-height-minimumFontSize-expected.txt (0 => 219665)


--- trunk/LayoutTests/fast/text/line-height-minimumFontSize-expected.txt	                        (rev 0)
+++ trunk/LayoutTests/fast/text/line-height-minimumFontSize-expected.txt	2017-07-19 23:38:06 UTC (rev 219665)
@@ -0,0 +1,27 @@
+This test makes sure that minimumFontSize affects line-height.
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+
+PASS Math.round(parseFloat(window.getComputedStyle(document.getElementById('test1')).getPropertyValue('line-height'))) is comparisonLineHeight
+PASS Math.round(parseFloat(window.getComputedStyle(document.getElementById('test2')).getPropertyValue('line-height'))) is comparisonLineHeight
+PASS Math.round(parseFloat(window.getComputedStyle(document.getElementById('test3')).getPropertyValue('line-height'))) is 20 / 16 * 64
+PASS Math.round(parseFloat(window.getComputedStyle(document.getElementById('test4')).getPropertyValue('line-height'))) is 20 / 10 * 64
+PASS Math.round(parseFloat(window.getComputedStyle(document.getElementById('test5')).getPropertyValue('line-height'))) is 1.5 * 64
+PASS Math.round(parseFloat(window.getComputedStyle(document.getElementById('test6')).getPropertyValue('line-height'))) is 1.5 * 64
+PASS Math.round(parseFloat(window.getComputedStyle(document.getElementById('test7')).getPropertyValue('line-height'))) is 1.5 * 64
+PASS Math.round(parseFloat(window.getComputedStyle(document.getElementById('test8')).getPropertyValue('line-height'))) is 1.5 * 64
+PASS Math.round(parseFloat(window.getComputedStyle(document.getElementById('test9')).getPropertyValue('line-height'))) is 192
+PASS successfullyParsed is true
+
+TEST COMPLETE
+1: Hello World
+1: Hello World
+2: Hello World
+3: Hello World
+4: Hello World
+5: Hello World
+6: Hello World
+7: Hello World
+8: Hello World
+9: Hello World

Added: trunk/LayoutTests/fast/text/line-height-minimumFontSize-text-zoom-expected.html (0 => 219665)


--- trunk/LayoutTests/fast/text/line-height-minimumFontSize-text-zoom-expected.html	                        (rev 0)
+++ trunk/LayoutTests/fast/text/line-height-minimumFontSize-text-zoom-expected.html	2017-07-19 23:38:06 UTC (rev 219665)
@@ -0,0 +1,27 @@
+<!DOCTYPE html>
+<html>
+<head>
+<style>
+.test {
+    display: inline-block;
+    width: 100px;
+    border: 2px solid black;
+}
+</style>
+</head>
+<body style="font-size: 32px;">
+<div class="test" style="font-size: 32px; line-height: normal;">Hello World</div>
+<div class="test" style="font-size: 40px; line-height: normal;">Hello World</div>
+<div class="test" style="font-size: 32px; line-height: normal;">Hello World</div>
+<div class="test" style="font-size: 32px; line-height: 48px;">Hello World</div>
+<div class="test" style="font-size: 40px; line-height: 50px;">Hello World</div>
+<div class="test" style="font-size: 32px; line-height: 48px;">Hello World</div>
+<div class="test" style="font-size: 32px; line-height: 48px;">Hello World</div>
+<div class="test" style="font-size: 40px; line-height: 60px;">Hello World</div>
+<div class="test" style="font-size: 32px; line-height: 48px;">Hello World</div>
+<div class="test" style="font-size: 32px; line-height: 48px;">Hello World</div>
+<div class="test" style="font-size: 40px; line-height: 60px;">Hello World</div>
+<div class="test" style="font-size: 32px; line-height: 48px;">Hello World</div>
+</body>
+</html>
+

Added: trunk/LayoutTests/fast/text/line-height-minimumFontSize-text-zoom.html (0 => 219665)


--- trunk/LayoutTests/fast/text/line-height-minimumFontSize-text-zoom.html	                        (rev 0)
+++ trunk/LayoutTests/fast/text/line-height-minimumFontSize-text-zoom.html	2017-07-19 23:38:06 UTC (rev 219665)
@@ -0,0 +1,32 @@
+<!DOCTYPE html>
+<html>
+<head>
+<script>
+if (window.internals) {
+    internals.settings.setMinimumFontSize(32);
+    internals.setTextZoomFactor(2);
+}
+</script>
+<style>
+.test {
+    display: inline-block;
+    width: 100px;
+    border: 2px solid black;
+}
+</style>
+</head>
+<body style="font-size: 16px;">
+<div class="test" style="font-size: 8px; line-height: normal;">Hello World</div>
+<div class="test" style="font-size: 20px; line-height: normal;">Hello World</div>
+<div class="test" style="font-size: x-small; line-height: normal;">Hello World</div>
+<div class="test" style="font-size: 8px; line-height: 12px;">Hello World</div>
+<div class="test" style="font-size: 20px; line-height: 25px;">Hello World</div>
+<div class="test" style="font-size: x-small; line-height: 15px;">Hello World</div>
+<div class="test" style="font-size: 8px; line-height: 150%;">Hello World</div>
+<div class="test" style="font-size: 20px; line-height: 150%;">Hello World</div>
+<div class="test" style="font-size: x-small; line-height: 150%;">Hello World</div>
+<div class="test" style="font-size: 8px; line-height: 1.5;">Hello World</div>
+<div class="test" style="font-size: 20px; line-height: 1.5;">Hello World</div>
+<div class="test" style="font-size: x-small; line-height: 1.5;">Hello World</div>
+</body>
+</html>

Added: trunk/LayoutTests/fast/text/line-height-minimumFontSize-visual-expected.html (0 => 219665)


--- trunk/LayoutTests/fast/text/line-height-minimumFontSize-visual-expected.html	                        (rev 0)
+++ trunk/LayoutTests/fast/text/line-height-minimumFontSize-visual-expected.html	2017-07-19 23:38:06 UTC (rev 219665)
@@ -0,0 +1,23 @@
+<!DOCTYPE html>
+<html>
+<head>
+<style>
+.test {
+    display: inline-block;
+    width: 100px;
+    border: 2px solid black;
+}
+</style>
+</head>
+<body style="font-size: 32px;">
+<div class="test" style="font-size: 32px; line-height: normal;">Hello World</div>
+<div class="test" style="font-size: 32px; line-height: normal;">Hello World</div>
+<div class="test" style="font-size: 32px; line-height: 48px;">Hello World</div>
+<div class="test" style="font-size: 32px; line-height: 48px;">Hello World</div>
+<div class="test" style="font-size: 32px; line-height: 48px;">Hello World</div>
+<div class="test" style="font-size: 32px; line-height: 48px;">Hello World</div>
+<div class="test" style="font-size: 32px; line-height: 48px;">Hello World</div>
+<div class="test" style="font-size: 32px; line-height: 48px;">Hello World</div>
+</body>
+</html>
+

Added: trunk/LayoutTests/fast/text/line-height-minimumFontSize-visual.html (0 => 219665)


--- trunk/LayoutTests/fast/text/line-height-minimumFontSize-visual.html	                        (rev 0)
+++ trunk/LayoutTests/fast/text/line-height-minimumFontSize-visual.html	2017-07-19 23:38:06 UTC (rev 219665)
@@ -0,0 +1,26 @@
+<!DOCTYPE html>
+<html>
+<head>
+<script>
+if (window.internals)
+    internals.settings.setMinimumFontSize(32);
+</script>
+<style>
+.test {
+    display: inline-block;
+    width: 100px;
+    border: 2px solid black;
+}
+</style>
+</head>
+<body style="font-size: 32px;">
+<div class="test" style="font-size: 16px; line-height: normal;">Hello World</div>
+<div class="test" style="font-size: x-small; line-height: normal;">Hello World</div>
+<div class="test" style="font-size: 16px; line-height: 24px;">Hello World</div>
+<div class="test" style="font-size: x-small; line-height: 15px;">Hello World</div>
+<div class="test" style="font-size: 16px; line-height: 150%;">Hello World</div>
+<div class="test" style="font-size: x-small; line-height: 150%;">Hello World</div>
+<div class="test" style="font-size: 16px; line-height: 1.5;">Hello World</div>
+<div class="test" style="font-size: x-small; line-height: 1.5;">Hello World</div>
+</body>
+</html>

Added: trunk/LayoutTests/fast/text/line-height-minimumFontSize-zoom-expected.html (0 => 219665)


--- trunk/LayoutTests/fast/text/line-height-minimumFontSize-zoom-expected.html	                        (rev 0)
+++ trunk/LayoutTests/fast/text/line-height-minimumFontSize-zoom-expected.html	2017-07-19 23:38:06 UTC (rev 219665)
@@ -0,0 +1,27 @@
+<!DOCTYPE html>
+<html>
+<head>
+<style>
+.test {
+    display: inline-block;
+    width: 100px;
+    border: 2px solid black;
+}
+</style>
+</head>
+<body style="font-size: 32px;">
+<div class="test" style="font-size: 32px; line-height: normal;">Hello World</div>
+<div class="test" style="font-size: 40px; line-height: normal;">Hello World</div>
+<div class="test" style="font-size: 32px; line-height: normal;">Hello World</div>
+<div class="test" style="font-size: 32px; line-height: 48px;">Hello World</div>
+<div class="test" style="font-size: 40px; line-height: 50px;">Hello World</div>
+<div class="test" style="font-size: 32px; line-height: 48px;">Hello World</div>
+<div class="test" style="font-size: 32px; line-height: 48px;">Hello World</div>
+<div class="test" style="font-size: 40px; line-height: 60px;">Hello World</div>
+<div class="test" style="font-size: 32px; line-height: 48px;">Hello World</div>
+<div class="test" style="font-size: 32px; line-height: 48px;">Hello World</div>
+<div class="test" style="font-size: 40px; line-height: 60px;">Hello World</div>
+<div class="test" style="font-size: 32px; line-height: 48px;">Hello World</div>
+</body>
+</html>
+

Added: trunk/LayoutTests/fast/text/line-height-minimumFontSize-zoom.html (0 => 219665)


--- trunk/LayoutTests/fast/text/line-height-minimumFontSize-zoom.html	                        (rev 0)
+++ trunk/LayoutTests/fast/text/line-height-minimumFontSize-zoom.html	2017-07-19 23:38:06 UTC (rev 219665)
@@ -0,0 +1,31 @@
+<!DOCTYPE html>
+<html>
+<head>
+<script>
+if (window.internals)
+    internals.settings.setMinimumFontSize(32);
+</script>
+<style>
+.test {
+    display: inline-block;
+    zoom: 200%;
+    width: 50px;
+    border: 1px solid black;
+}
+</style>
+</head>
+<body style="font-size: 32px;">
+<div class="test" style="font-size: 8px; line-height: normal;">Hello World</div>
+<div class="test" style="font-size: 20px; line-height: normal;">Hello World</div>
+<div class="test" style="font-size: x-small; line-height: normal;">Hello World</div>
+<div class="test" style="font-size: 8px; line-height: 12px;">Hello World</div>
+<div class="test" style="font-size: 20px; line-height: 25px;">Hello World</div>
+<div class="test" style="font-size: x-small; line-height: 15px;">Hello World</div>
+<div class="test" style="font-size: 8px; line-height: 150%;">Hello World</div>
+<div class="test" style="font-size: 20px; line-height: 150%;">Hello World</div>
+<div class="test" style="font-size: x-small; line-height: 150%;">Hello World</div>
+<div class="test" style="font-size: 8px; line-height: 1.5;">Hello World</div>
+<div class="test" style="font-size: 20px; line-height: 1.5;">Hello World</div>
+<div class="test" style="font-size: x-small; line-height: 1.5;">Hello World</div>
+</body>
+</html>

Added: trunk/LayoutTests/fast/text/line-height-minimumFontSize.html (0 => 219665)


--- trunk/LayoutTests/fast/text/line-height-minimumFontSize.html	                        (rev 0)
+++ trunk/LayoutTests/fast/text/line-height-minimumFontSize.html	2017-07-19 23:38:06 UTC (rev 219665)
@@ -0,0 +1,45 @@
+<!DOCTYPE html>
+<html>
+<head>
+<script>
+if (window.internals)
+    internals.settings.setMinimumFontSize(64);
+</script>
+<script src=""
+<style>
+.test {
+    display: inline-block;
+    width: 1px;
+    border: 3px solid black;
+}
+</style>
+</head>
+<body>
+<div><div id="comparison" class="test" style="display: inline-block; font-size: 64px; line-height: normal;">1: Hello World</div></div>
+
+<div><div id="test1" class="test" style="font-size: 16px; line-height: normal;">1: Hello World</div></div>
+<div><div id="test2" class="test" style="font-size: x-small; line-height: normal;">2: Hello World</div></div>
+<div><div id="test3" class="test" style="font-size: 16px; line-height: 20px;">3: Hello World</div></div>
+<div><div id="test4" class="test" style="font-size: x-small; line-height: 20px;">4: Hello World</div></div>
+<div><div id="test5" class="test" style="font-size: 16px; line-height: 150%;">5: Hello World</div></div>
+<div><div id="test6" class="test" style="font-size: x-small; line-height: 150%;">6: Hello World</div></div>
+<div><div id="test7" class="test" style="font-size: 16px; line-height: 1.5;">7: Hello World</div></div>
+<div><div id="test8" class="test" style="font-size: x-small; line-height: 1.5;">8: Hello World</div></div>
+<div><div id="test9" class="test" style="font-size: 128px; line-height: 192px;">9: Hello World</div></div>
+<script>
+description("This test makes sure that minimumFontSize affects line-height.");
+
+var comparisonLineHeight = Math.round(parseFloat(window.getComputedStyle(document.getElementById('comparison')).getPropertyValue('line-height')));
+shouldBe("Math.round(parseFloat(window.getComputedStyle(document.getElementById('test1')).getPropertyValue('line-height')))", "comparisonLineHeight");
+shouldBe("Math.round(parseFloat(window.getComputedStyle(document.getElementById('test2')).getPropertyValue('line-height')))", "comparisonLineHeight");
+shouldBe("Math.round(parseFloat(window.getComputedStyle(document.getElementById('test3')).getPropertyValue('line-height')))", "20 / 16 * 64");
+shouldBe("Math.round(parseFloat(window.getComputedStyle(document.getElementById('test4')).getPropertyValue('line-height')))", "20 / 10 * 64");
+shouldBe("Math.round(parseFloat(window.getComputedStyle(document.getElementById('test5')).getPropertyValue('line-height')))", "1.5 * 64");
+shouldBe("Math.round(parseFloat(window.getComputedStyle(document.getElementById('test6')).getPropertyValue('line-height')))", "1.5 * 64");
+shouldBe("Math.round(parseFloat(window.getComputedStyle(document.getElementById('test7')).getPropertyValue('line-height')))", "1.5 * 64");
+shouldBe("Math.round(parseFloat(window.getComputedStyle(document.getElementById('test8')).getPropertyValue('line-height')))", "1.5 * 64");
+shouldBe("Math.round(parseFloat(window.getComputedStyle(document.getElementById('test9')).getPropertyValue('line-height')))", "192");
+</script>
+<script src=""
+</body>
+</html>

Modified: trunk/Source/WebCore/ChangeLog (219664 => 219665)


--- trunk/Source/WebCore/ChangeLog	2017-07-19 20:42:21 UTC (rev 219664)
+++ trunk/Source/WebCore/ChangeLog	2017-07-19 23:38:06 UTC (rev 219665)
@@ -1,3 +1,83 @@
+2017-07-19  Myles C. Maxfield  <mmaxfi...@apple.com>
+
+        Setting the minimum font size preference doesn’t affect absolute line-height values, so lines overlap
+        https://bugs.webkit.org/show_bug.cgi?id=174406
+
+        Reviewed by Simon Fraser.
+        <rdar://problem/10139227>
+
+        Reviewed by NOBODY.
+
+        When the minimumFontSize API preference is set, we will increase the font size without increasing
+        the line height. If the content specifies line-height as an absolute value, there can be two
+        unfortunate results:
+
+        - Adjacent lines in a paragraph can overlap
+        - If the paragraph (or containin block or whatever) uses overflow: hidden, the first and last lines
+        can be cut off and potentially indecipherable.
+
+        Instead, we should use the minimum font size preference as a signal that we should increase the
+        line-height as well as the font-size. Eventually, we will want to increase it by an amount
+        proportional to the increase in font-size (which can be due to minimumFontSize, minimumLogicalFontSize,
+        text autosizing, etc.). However, because minimumLogicalFontSize is on by default, this would cause
+        a behavior change on many webpages which use small text, so such a change would be too risky right now.
+        Instead, we can pretend that minimumFontSize is the only cause that text increases, and use this as the
+        only signal to boost the corresponding line-height.
+
+        Tests: fast/text/line-height-minimumFontSize-text-zoom.html
+               fast/text/line-height-minimumFontSize-visual.html
+               fast/text/line-height-minimumFontSize-zoom.html
+               fast/text/line-height-minimumFontSize.html
+               fast/text/line-height-minimumFontSize-autosize.html
+
+        * css/StyleBuilderCustom.h:
+        (WebCore::computeBaseSpecifiedFontSize):
+        (WebCore::computeLineHeightMultiplierDueToFontSize):
+        (WebCore::StyleBuilderCustom::applyValueLineHeight):
+        (WebCore::StyleBuilderCustom::applyValueFill):
+        (WebCore::StyleBuilderCustom::applyValueStroke):
+        (WebCore::StyleBuilderCustom::applyValueContent):
+        * rendering/TextAutoSizing.cpp:
+
+2017-07-18  Myles C. Maxfield  <mmaxfi...@apple.com>
+
+        Setting the minimum font size preference doesn’t affect absolute line-height values, so lines overlap
+        https://bugs.webkit.org/show_bug.cgi?id=174406
+        <rdar://problem/10139227>
+
+        Reviewed by Simon Fraser.
+
+        When the minimumFontSize API preference is set, we will increase the font size without increasing
+        the line height. If the content specifies line-height as an absolute value, there can be two
+        unfortunate results:
+
+        - Adjacent lines in a paragraph can overlap
+        - If the paragraph (or containin block or whatever) uses overflow: hidden, the first and last lines
+        can be cut off and potentially indecipherable.
+
+        Instead, we should use the minimum font size preference as a signal that we should increase the
+        line-height as well as the font-size. Eventually, we will want to increase it by an amount
+        proportional to the increase in font-size (which can be due to minimumFontSize, minimumLogicalFontSize,
+        text autosizing, etc.). However, because minimumLogicalFontSize is on by default, this would cause
+        a behavior change on many webpages which use small text, so such a change would be too risky right now.
+        Instead, we can pretend that minimumFontSize is the only cause that text increases, and use this as the
+        only signal to boost the corresponding line-height.
+
+        Tests: fast/text/line-height-minimumFontSize-text-zoom.html
+               fast/text/line-height-minimumFontSize-visual.html
+               fast/text/line-height-minimumFontSize-zoom.html
+               fast/text/line-height-minimumFontSize.html
+               fast/text/line-height-minimumFontSize-autosize.html
+
+        * css/StyleBuilderCustom.h:
+        (WebCore::computeBaseSpecifiedFontSize):
+        (WebCore::computeLineHeightMultiplierDueToFontSize):
+        (WebCore::StyleBuilderCustom::applyValueLineHeight):
+        (WebCore::StyleBuilderCustom::applyValueFill):
+        (WebCore::StyleBuilderCustom::applyValueStroke):
+        (WebCore::StyleBuilderCustom::applyValueContent):
+        * rendering/TextAutoSizing.cpp:
+
 2017-07-19  Chris Dumez  <cdu...@apple.com>
 
         DOMException should not have its own toString()

Modified: trunk/Source/WebCore/css/StyleBuilderCustom.h (219664 => 219665)


--- trunk/Source/WebCore/css/StyleBuilderCustom.h	2017-07-19 20:42:21 UTC (rev 219664)
+++ trunk/Source/WebCore/css/StyleBuilderCustom.h	2017-07-19 23:38:06 UTC (rev 219665)
@@ -650,14 +650,70 @@
     styleResolver.style()->setSpecifiedLineHeight(RenderStyle::initialSpecifiedLineHeight());
 }
 
+static inline float computeBaseSpecifiedFontSize(const Document& document, const RenderStyle& style, bool percentageAutosizingEnabled)
+{
+    float result = style.specifiedFontSize();
+    auto* frame = document.frame();
+    if (frame && style.textZoom() != TextZoomReset)
+        result *= frame->textZoomFactor();
+    result *= style.effectiveZoom();
+    if (percentageAutosizingEnabled)
+        result *= style.textSizeAdjust().multiplier();
+    return result;
+}
+
+static inline float computeLineHeightMultiplierDueToFontSize(const Document& document, const RenderStyle& style, const CSSPrimitiveValue& value)
+{
+    bool percentageAutosizingEnabled = document.settings().textAutosizingEnabled() && style.textSizeAdjust().isPercentage();
+
+    if (value.isLength()) {
+        auto minimumFontSize = document.settings().minimumFontSize();
+        if (minimumFontSize > 0) {
+            auto specifiedFontSize = computeBaseSpecifiedFontSize(document, style, percentageAutosizingEnabled);
+            if (specifiedFontSize < minimumFontSize) {
+                // FIXME: There are two settings which are relevant here: minimum font size, and minimum logical font size (as
+                // well as things like the zoom property, text zoom on the page, and text autosizing). The minimum logical font
+                // size is nonzero by default, and already incorporated into the computed font size, so if we just use the ratio
+                // of the computed : specified font size, it will be > 1 in the cases where the minimum logical font size kicks
+                // in. In general, this is the right thing to do, however, this kind of blanket change is too risky to perform
+                // right now. https://bugs.webkit.org/show_bug.cgi?id=174570 tracks turning this on. For now, we can just pretend
+                // that the minimum font size is the only thing affecting the computed font size.
+
+                // This calculation matches the line-height computed size calculation in
+                // TextAutoSizingValue::adjustTextNodeSizes().
+                auto scaleChange = minimumFontSize / specifiedFontSize;
+                return scaleChange;
+            }
+        }
+    }
+
+    if (percentageAutosizingEnabled)
+        return style.textSizeAdjust().multiplier();
+    return 1;
+}
+
 inline void StyleBuilderCustom::applyValueLineHeight(StyleResolver& styleResolver, CSSValue& value)
 {
-    float multiplier = styleResolver.style()->textSizeAdjust().isPercentage() ? styleResolver.style()->textSizeAdjust().multiplier() : 1.f;
-    std::optional<Length> lineHeight = StyleBuilderConverter::convertLineHeight(styleResolver, value, multiplier);
+    std::optional<Length> lineHeight = StyleBuilderConverter::convertLineHeight(styleResolver, value, 1);
     if (!lineHeight)
         return;
 
-    styleResolver.style()->setLineHeight(Length { lineHeight.value() });
+    Length computedLineHeight;
+    if (lineHeight.value().isNegative())
+        computedLineHeight = lineHeight.value();
+    else {
+        auto& primitiveValue = downcast<CSSPrimitiveValue>(value);
+        auto multiplier = computeLineHeightMultiplierDueToFontSize(styleResolver.document(), *styleResolver.style(), primitiveValue);
+        if (multiplier == 1)
+            computedLineHeight = lineHeight.value();
+        else {
+            std::optional<Length> lineHeight = StyleBuilderConverter::convertLineHeight(styleResolver, value, multiplier);
+            ASSERT(static_cast<bool>(lineHeight));
+            computedLineHeight = lineHeight.value();
+        }
+    }
+
+    styleResolver.style()->setLineHeight(WTFMove(computedLineHeight));
     styleResolver.style()->setSpecifiedLineHeight(WTFMove(lineHeight.value()));
 }
 
@@ -733,7 +789,7 @@
     styleResolver.setWritingMode(downcast<CSSPrimitiveValue>(value));
     styleResolver.style()->setHasExplicitlySetWritingMode(true);
 }
-    
+
 inline void StyleBuilderCustom::applyValueWebkitTextOrientation(StyleResolver& styleResolver, CSSValue& value)
 {
     styleResolver.setTextOrientation(downcast<CSSPrimitiveValue>(value));
@@ -1210,10 +1266,10 @@
         url = ""
         localValue = downcast<CSSPrimitiveValue>(list.item(1));
     }
-    
+
     if (!localValue)
         return;
-    
+
     Color color;
     auto paintType = SVG_PAINTTYPE_RGBCOLOR;
     if (localValue->isURI()) {
@@ -1254,10 +1310,10 @@
         url = ""
         localValue = downcast<CSSPrimitiveValue>(list.item(1));
     }
-    
+
     if (!localValue)
         return;
-    
+
     Color color;
     auto paintType = SVG_PAINTTYPE_RGBCOLOR;
     if (localValue->isURI()) {
@@ -1352,7 +1408,7 @@
         styleResolver.style()->clearContent();
         return;
     }
-    
+
     bool didSet = false;
     for (auto& item : downcast<CSSValueList>(value)) {
         if (is<CSSImageGeneratorValue>(item.get())) {

Modified: trunk/Source/WebCore/rendering/TextAutoSizing.cpp (219664 => 219665)


--- trunk/Source/WebCore/rendering/TextAutoSizing.cpp	2017-07-19 20:42:21 UTC (rev 219664)
+++ trunk/Source/WebCore/rendering/TextAutoSizing.cpp	2017-07-19 23:38:06 UTC (rev 219665)
@@ -142,6 +142,7 @@
         else
             specifiedLineHeight = lineHeightLength.value();
 
+        // This calculation matches the line-height computed size calculation in StyleBuilderCustom::applyValueLineHeight().
         int lineHeight = specifiedLineHeight * scaleChange;
         if (lineHeightLength.isFixed() && lineHeightLength.value() == lineHeight)
             continue;
_______________________________________________
webkit-changes mailing list
webkit-changes@lists.webkit.org
https://lists.webkit.org/mailman/listinfo/webkit-changes

Reply via email to