Commit 01f08d9b authored by Yoshifumi Inoue's avatar Yoshifumi Inoue Committed by Commit Bot

[LayoutNG] Make LayoutText to associate to proper NGInlineItem objects

This patch changes |NGInlineNode::AssociateItemsWithInlines()| to associate
|NGInlineItem| to |LayoutText| correctly by skipping |NGInlineItem| without
layout object.

Before this patch, |LayoutText| is assocaited |NGIninlineItem| objects
after the |NGIninlineItem.layout_object == nullptr|.

This patch is a preparation of the patch[1].

[1] http://crrev.com/c/1309562 Make Element#innterText to utilize NGInlineItem
instead of NGPaintFragment

Cq-Include-Trybots: luci.chromium.try:linux_layout_tests_layout_ng
Change-Id: I41f16ea13ca1e0641cb2a42331d64fa2cd6387ac
Reviewed-on: https://chromium-review.googlesource.com/c/1317217
Commit-Queue: Yoshifumi Inoue <yosin@chromium.org>
Reviewed-by: default avatarKoji Ishii <kojii@chromium.org>
Cr-Commit-Position: refs/heads/master@{#605592}
parent ae83af95
...@@ -639,7 +639,9 @@ void NGInlineNode::AssociateItemsWithInlines(NGInlineNodeData* data) { ...@@ -639,7 +639,9 @@ void NGInlineNode::AssociateItemsWithInlines(NGInlineNodeData* data) {
LayoutObject* last_object = nullptr; LayoutObject* last_object = nullptr;
for (auto& item : data->items) { for (auto& item : data->items) {
LayoutObject* object = item.GetLayoutObject(); LayoutObject* object = item.GetLayoutObject();
if (object && object->IsText()) { if (!object)
continue;
if (object->IsText()) {
LayoutText* layout_text = ToLayoutText(object); LayoutText* layout_text = ToLayoutText(object);
if (object != last_object) if (object != last_object)
layout_text->ClearInlineItems(); layout_text->ClearInlineItems();
......
...@@ -490,6 +490,19 @@ TEST_F(NGInlineNodeTest, MinMaxSizeFloatsClearance) { ...@@ -490,6 +490,19 @@ TEST_F(NGInlineNodeTest, MinMaxSizeFloatsClearance) {
EXPECT_EQ(160, sizes.max_size); EXPECT_EQ(160, sizes.max_size);
} }
TEST_F(NGInlineNodeTest, AssociatedItemsWithControlItem) {
SetBodyInnerHTML(
"<pre id=t style='-webkit-rtl-ordering:visual'>ab\nde</pre>");
LayoutText* const layout_text = ToLayoutText(
GetDocument().getElementById("t")->firstChild()->GetLayoutObject());
ASSERT_TRUE(layout_text->HasValidInlineItems());
const Vector<NGInlineItem*>& items = layout_text->InlineItems();
ASSERT_EQ(3u, items.size());
TEST_ITEM_TYPE_OFFSET((*items[0]), kText, 1u, 3u);
TEST_ITEM_TYPE_OFFSET((*items[1]), kControl, 4u, 5u);
TEST_ITEM_TYPE_OFFSET((*items[2]), kText, 6u, 8u);
}
TEST_F(NGInlineNodeTest, InvalidateAddSpan) { TEST_F(NGInlineNodeTest, InvalidateAddSpan) {
SetupHtml("t", "<div id=t>before</div>"); SetupHtml("t", "<div id=t>before</div>");
EXPECT_FALSE(layout_block_flow_->NeedsCollectInlines()); EXPECT_FALSE(layout_block_flow_->NeedsCollectInlines());
......
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