Commit f962545c authored by Koji Ishii's avatar Koji Ishii Committed by Commit Bot

[LayoutNG] Fix NeedsLayout failure when CR/FF is dirty

This patch fixes |ClearNeedsLayout| for CR (U+000D) and FF
(U+000C). These were overlooked when |ClearNeedsLayout| was
moved from |NGInlineItemsBuilder| to |NGLineBreaker| and
|NGInlineLayoutAlgorithm|.

Bug: 971811
Change-Id: Ie3d9d3d11e35a7ed3458bb8b96d2fa68bf9c37a9
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/1663478Reviewed-by: default avatarXiaocheng Hu <xiaochengh@chromium.org>
Commit-Queue: Koji Ishii <kojii@chromium.org>
Cr-Commit-Position: refs/heads/master@{#670010}
parent 1a731e10
...@@ -1085,10 +1085,12 @@ void NGLineBreaker::HandleControlItem(const NGInlineItem& item, ...@@ -1085,10 +1085,12 @@ void NGLineBreaker::HandleControlItem(const NGInlineItem& item,
// Ignore carriage return and form feed. // Ignore carriage return and form feed.
// https://drafts.csswg.org/css-text-3/#white-space-processing // https://drafts.csswg.org/css-text-3/#white-space-processing
// https://github.com/w3c/csswg-drafts/issues/855 // https://github.com/w3c/csswg-drafts/issues/855
break; HandleEmptyText(item, line_info);
return;
default: default:
NOTREACHED(); NOTREACHED();
break; HandleEmptyText(item, line_info);
return;
} }
MoveToNextOf(item); MoveToNextOf(item);
} }
......
<!DOCTYPE html>
<link rel="help" href="https://crbug.com/971811">
<link rel="author" title="Koji Ishii" href="mailto:kojii@chromium.org">
<script src="/resources/testharness.js"></script>
<script src="/resources/testharnessreport.js"></script>
<body>
<div id="log"></div>
<script>
const strings = [' ', '\t', '\n', '\f', '\r'];
const whitespace_values = ['normal', 'pre', 'nowrap', 'pre-wrap', 'break-spaces', 'pre-line'];
const container = document.body;
for (let whitespace_value of whitespace_values) {
for (let string of strings) {
test(() => {
let div = document.createElement('div');
div.style.whiteSpace = whitespace_value;
div.textContent = 'test';
container.appendChild(div);
container.offsetTop; // Force layout
div.appendChild(document.createTextNode(string));
container.offsetTop; // Force layout
}, `Append ${toCodePoints(string)} to 'white-space: ${whitespace_value}'`);
}
}
function toCodePoints(string) {
let results = [];
for (let ch of string) {
let hex = ch.codePointAt(0).toString(16).toUpperCase();
hex = ('000' + hex).substr(-4)
results.push('U+' + hex);
}
return results.join(' ');
}
</script>
</body>
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment