Commit c4ca16cd authored by Xiaocheng Hu's avatar Xiaocheng Hu Committed by Commit Bot

Make ShowLineTreeForThis work on RootInlineBox and children-inline LayoutBlockFlow

When calling ShowLineTreeForThis() on RootInlineBox and children-
inline LayoutBlockFlow, the existing code searches for inline
structures in a wrong LayoutBlock, which is the block container of
the inline formatting context instead of the inline formatting
context itself.

This patch fixes the issue.

Bug: 821289
Change-Id: Icba7ee2b036649df5caba75050b4267188a8dbda
Reviewed-on: https://chromium-review.googlesource.com/961797Reviewed-by: default avatarKoji Ishii <kojii@chromium.org>
Commit-Queue: Xiaocheng Hu <xiaochengh@chromium.org>
Cr-Commit-Position: refs/heads/master@{#543022}
parent 9b067647
...@@ -1020,6 +1020,12 @@ LayoutBlock* LayoutObject::ContainingBlockForFixedPosition( ...@@ -1020,6 +1020,12 @@ LayoutBlock* LayoutObject::ContainingBlockForFixedPosition(
return FindContainingBlock(container, skip_info); return FindContainingBlock(container, skip_info);
} }
const LayoutBlock* LayoutObject::InclusiveContainingBlock() const {
if (IsLayoutBlock())
return ToLayoutBlock(this);
return ContainingBlock();
}
LayoutBlock* LayoutObject::ContainingBlock(AncestorSkipInfo* skip_info) const { LayoutBlock* LayoutObject::ContainingBlock(AncestorSkipInfo* skip_info) const {
LayoutObject* object = Parent(); LayoutObject* object = Parent();
if (!object && IsLayoutScrollbarPart()) if (!object && IsLayoutScrollbarPart())
...@@ -1622,7 +1628,7 @@ void LayoutObject::ShowLayoutTreeForThis() const { ...@@ -1622,7 +1628,7 @@ void LayoutObject::ShowLayoutTreeForThis() const {
} }
void LayoutObject::ShowLineTreeForThis() const { void LayoutObject::ShowLineTreeForThis() const {
if (LayoutBlock* cb = ContainingBlock()) { if (const LayoutBlock* cb = InclusiveContainingBlock()) {
if (cb->IsLayoutBlockFlow()) if (cb->IsLayoutBlockFlow())
ToLayoutBlockFlow(cb)->ShowLineTreeAndMark(nullptr, nullptr, nullptr, ToLayoutBlockFlow(cb)->ShowLineTreeAndMark(nullptr, nullptr, nullptr,
nullptr, this); nullptr, this);
......
...@@ -1229,6 +1229,8 @@ class CORE_EXPORT LayoutObject : public ImageResourceObserver, ...@@ -1229,6 +1229,8 @@ class CORE_EXPORT LayoutObject : public ImageResourceObserver,
// See LayoutBlock.h for some extra explanations on containing blocks. // See LayoutBlock.h for some extra explanations on containing blocks.
LayoutBlock* ContainingBlock(AncestorSkipInfo* = nullptr) const; LayoutBlock* ContainingBlock(AncestorSkipInfo* = nullptr) const;
const LayoutBlock* InclusiveContainingBlock() const;
bool CanContainAbsolutePositionObjects() const { bool CanContainAbsolutePositionObjects() const {
return style_->CanContainAbsolutePositionObjects() || return style_->CanContainAbsolutePositionObjects() ||
CanContainFixedPositionObjects(); CanContainFixedPositionObjects();
......
...@@ -21,6 +21,7 @@ ...@@ -21,6 +21,7 @@
#include "core/layout/HitTestLocation.h" #include "core/layout/HitTestLocation.h"
#include "core/layout/LayoutBlockFlow.h" #include "core/layout/LayoutBlockFlow.h"
#include "core/layout/api/LineLayoutAPIShim.h"
#include "core/layout/api/LineLayoutBlockFlow.h" #include "core/layout/api/LineLayoutBlockFlow.h"
#include "core/layout/line/InlineFlowBox.h" #include "core/layout/line/InlineFlowBox.h"
#include "core/layout/line/RootInlineBox.h" #include "core/layout/line/RootInlineBox.h"
...@@ -110,7 +111,13 @@ void InlineBox::ShowTreeForThis() const { ...@@ -110,7 +111,13 @@ void InlineBox::ShowTreeForThis() const {
} }
void InlineBox::ShowLineTreeForThis() const { void InlineBox::ShowLineTreeForThis() const {
GetLineLayoutItem().ContainingBlock().ShowLineTreeAndMark(this, "*"); const LayoutBlock* containing_block =
LineLayoutAPIShim::LayoutObjectFrom(GetLineLayoutItem())
->InclusiveContainingBlock();
if (containing_block) {
LineLayoutBox(const_cast<LayoutBlock*>(containing_block))
.ShowLineTreeAndMark(this, "*");
}
} }
void InlineBox::DumpLineTreeAndMark(StringBuilder& string_builder, void InlineBox::DumpLineTreeAndMark(StringBuilder& string_builder,
......
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