Commit d1ab3b63 authored by Manuel Rego Casasnovas's avatar Manuel Rego Casasnovas Committed by Commit Bot

[css-contain] Fix regression on LayoutText::SetText() optimization

This is a revert of the change we did in r607786,
on that patch we applied the optimization if the text doesn't wrap.

However that was causing some weird issues related to overflow
not being repainted as expected in some situations.
Preventing people to use this optimization for real.

This patch reverts that change, so the optimization will now
be used in less cases, but won't cause issues.

This only affects legacy layout.

BUG=985723
TEST=fast/css/containment/change-text-node-data-nowrap.html

Change-Id: Ibbfde6b570ea760025f371448774988b9f7694f4
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/2489503Reviewed-by: default avatarKoji Ishii <kojii@chromium.org>
Commit-Queue: Manuel Rego <rego@igalia.com>
Cr-Commit-Position: refs/heads/master@{#819487}
parent 0370fab5
......@@ -1851,10 +1851,11 @@ void LayoutText::SetTextWithOffset(scoped_refptr<StringImpl> text,
FloatRect glyph_bounds;
float text_width =
style_to_use->GetFont().Width(text_run, nullptr, &glyph_bounds);
// If the text is not wrapping we don't care if it fits or not in the
// container as it's not going to be split in multiple lines.
if (!style_to_use->AutoWrap() ||
(text_width <= ContainingBlock()->ContentLogicalWidth())) {
// TODO(rego): Ideally we could avoid measuring text width in some specific
// situations (e.g. if "white-space" property is "pre" and "overflow-wrap"
// is "normal"). However we tried that on the past and it caused a
// regression (crbug.com/985723).
if (text_width <= ContainingBlock()->ContentLogicalWidth()) {
FirstTextBox()->ManuallySetStartLenAndLogicalWidth(
offset, text->length(), LayoutUnit(text_width));
SetFirstTextBoxLogicalLeft(text_width);
......
......@@ -20,12 +20,18 @@ div {
<div>baar</div>
<div>baarbaar baarbaar</div>
<div>baarbaarbaar baarbaarbaar baarbaarbaar baarbaarbaar baarbaarbaar</div>
<div>baar</div>
<div>baarbaar baarbaar</div>
<div>baarbaarbaar baarbaarbaar baarbaarbaar baarbaarbaar baarbaarbaar</div>
<div>baar baar baar baar</div>
<div>baar</div>
<div>b &#x55e8;</div>
<div class="first-line">baar</div>
<div class="first-line">baarbaar baarbaar</div>
<div class="first-line">baarbaarbaar baarbaarbaar baarbaarbaar baarbaarbaar baarbaarbaar</div>
<div class="first-line">baar</div>
<div class="first-line">baarbaar baarbaar</div>
<div class="first-line">baarbaarbaar baarbaarbaar baarbaarbaar baarbaarbaar baarbaarbaar</div>
<div class="first-line">baar baar baar baar</div>
<div class="first-line">baar</div>
<div class="first-line">b &#x55e8;</div>
......@@ -24,11 +24,17 @@ div {
"foo",
"foofoo foofoo",
"foofoofoo foofoofoo foofoofoo foofoofoo foofoofoo",
"foofoofoo foofoofoo foofoofoo foofoofoo foofoofoo",
"foofoo foofoo",
"foo",
"foo",
"foo foo foo foo foo",
"foo",
];
const newValues = [
"baar",
"baarbaar baarbaar",
"baarbaarbaar baarbaarbaar baarbaarbaar baarbaarbaar baarbaarbaar",
"baar",
"baarbaar baarbaar",
"baarbaarbaar baarbaarbaar baarbaarbaar baarbaarbaar baarbaarbaar",
......
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