#include "third_party/blink/renderer/core/layout/block_node.h"
#include <memory>
#include "third_party/blink/renderer/core/css/style_engine.h"
#include "third_party/blink/renderer/core/dom/scroll_button_pseudo_element.h"
#include "third_party/blink/renderer/core/dom/scroll_marker_group_pseudo_element.h"
#include "third_party/blink/renderer/core/frame/local_frame_view.h"
#include "third_party/blink/renderer/core/frame/web_feature.h"
#include "third_party/blink/renderer/core/html/forms/html_input_element.h"
#include "third_party/blink/renderer/core/html/forms/html_select_element.h"
#include "third_party/blink/renderer/core/html/html_marquee_element.h"
#include "third_party/blink/renderer/core/input_type_names.h"
#include "third_party/blink/renderer/core/layout/block_break_token.h"
#include "third_party/blink/renderer/core/layout/block_layout_algorithm.h"
#include "third_party/blink/renderer/core/layout/box_fragment_builder.h"
#include "third_party/blink/renderer/core/layout/column_layout_algorithm.h"
#include "third_party/blink/renderer/core/layout/constraint_space.h"
#include "third_party/blink/renderer/core/layout/constraint_space_builder.h"
#include "third_party/blink/renderer/core/layout/custom/custom_layout_algorithm.h"
#include "third_party/blink/renderer/core/layout/custom/layout_custom.h"
#include "third_party/blink/renderer/core/layout/disable_layout_side_effects_scope.h"
#include "third_party/blink/renderer/core/layout/flex/flex_layout_algorithm.h"
#include "third_party/blink/renderer/core/layout/forms/fieldset_layout_algorithm.h"
#include "third_party/blink/renderer/core/layout/forms/layout_fieldset.h"
#include "third_party/blink/renderer/core/layout/fragment_repeater.h"
#include "third_party/blink/renderer/core/layout/fragmentation_utils.h"
#include "third_party/blink/renderer/core/layout/frame_set_layout_algorithm.h"
#include "third_party/blink/renderer/core/layout/geometry/fragment_geometry.h"
#include "third_party/blink/renderer/core/layout/geometry/writing_mode_converter.h"
#include "third_party/blink/renderer/core/layout/grid/grid_layout_algorithm.h"
#include "third_party/blink/renderer/core/layout/inline/inline_cursor.h"
#include "third_party/blink/renderer/core/layout/inline/inline_node.h"
#include "third_party/blink/renderer/core/layout/intrinsic_sizing_info.h"
#include "third_party/blink/renderer/core/layout/layout_block_flow.h"
#include "third_party/blink/renderer/core/layout/layout_inline.h"
#include "third_party/blink/renderer/core/layout/layout_input_node.h"
#include "third_party/blink/renderer/core/layout/layout_multi_column_flow_thread.h"
#include "third_party/blink/renderer/core/layout/layout_multi_column_set.h"
#include "third_party/blink/renderer/core/layout/layout_multi_column_spanner_placeholder.h"
#include "third_party/blink/renderer/core/layout/layout_result.h"
#include "third_party/blink/renderer/core/layout/layout_utils.h"
#include "third_party/blink/renderer/core/layout/layout_video.h"
#include "third_party/blink/renderer/core/layout/layout_view.h"
#include "third_party/blink/renderer/core/layout/legacy_layout_tree_walking.h"
#include "third_party/blink/renderer/core/layout/length_utils.h"
#include "third_party/blink/renderer/core/layout/list/layout_list_item.h"
#include "third_party/blink/renderer/core/layout/logical_box_fragment.h"
#include "third_party/blink/renderer/core/layout/masonry/masonry_layout_algorithm.h"
#include "third_party/blink/renderer/core/layout/mathml/math_fraction_layout_algorithm.h"
#include "third_party/blink/renderer/core/layout/mathml/math_layout_utils.h"
#include "third_party/blink/renderer/core/layout/mathml/math_operator_layout_algorithm.h"
#include "third_party/blink/renderer/core/layout/mathml/math_padded_layout_algorithm.h"
#include "third_party/blink/renderer/core/layout/mathml/math_radical_layout_algorithm.h"
#include "third_party/blink/renderer/core/layout/mathml/math_row_layout_algorithm.h"
#include "third_party/blink/renderer/core/layout/mathml/math_scripts_layout_algorithm.h"
#include "third_party/blink/renderer/core/layout/mathml/math_space_layout_algorithm.h"
#include "third_party/blink/renderer/core/layout/mathml/math_token_layout_algorithm.h"
#include "third_party/blink/renderer/core/layout/mathml/math_under_over_layout_algorithm.h"
#include "third_party/blink/renderer/core/layout/min_max_sizes.h"
#include "third_party/blink/renderer/core/layout/paginated_root_layout_algorithm.h"
#include "third_party/blink/renderer/core/layout/replaced_layout_algorithm.h"
#include "third_party/blink/renderer/core/layout/shapes/shape_outside_info.h"
#include "third_party/blink/renderer/core/layout/simplified_layout_algorithm.h"
#include "third_party/blink/renderer/core/layout/space_utils.h"
#include "third_party/blink/renderer/core/layout/svg/layout_svg_root.h"
#include "third_party/blink/renderer/core/layout/table/layout_table_cell.h"
#include "third_party/blink/renderer/core/layout/table/table_layout_algorithm.h"
#include "third_party/blink/renderer/core/layout/table/table_row_layout_algorithm.h"
#include "third_party/blink/renderer/core/layout/table/table_section_layout_algorithm.h"
#include "third_party/blink/renderer/core/layout/text_autosizer.h"
#include "third_party/blink/renderer/core/mathml/mathml_element.h"
#include "third_party/blink/renderer/core/mathml/mathml_fraction_element.h"
#include "third_party/blink/renderer/core/mathml/mathml_padded_element.h"
#include "third_party/blink/renderer/core/mathml/mathml_radical_element.h"
#include "third_party/blink/renderer/core/mathml/mathml_scripts_element.h"
#include "third_party/blink/renderer/core/mathml/mathml_space_element.h"
#include "third_party/blink/renderer/core/mathml/mathml_token_element.h"
#include "third_party/blink/renderer/core/mathml/mathml_under_over_element.h"
#include "third_party/blink/renderer/core/paint/paint_layer.h"
#include "third_party/blink/renderer/core/paint/paint_layer_scrollable_area.h"
#include "third_party/blink/renderer/core/paint/transform_utils.h"
#include "third_party/blink/renderer/platform/text/writing_mode.h"
#include "third_party/blink/renderer/platform/wtf/allocator/allocator.h"
#include "ui/gfx/geometry/size_f.h"
namespace blink {
FormControlType;
namespace {
inline bool HasInlineChildren(LayoutBlockFlow* block_flow) { … }
inline LayoutMultiColumnFlowThread* GetFlowThread(
const LayoutBlockFlow* block_flow) { … }
inline LayoutMultiColumnFlowThread* GetFlowThread(const LayoutBox& box) { … }
template <typename Algorithm, typename Callback>
NOINLINE void CreateAlgorithmAndRun(const LayoutAlgorithmParams& params,
const Callback& callback) { … }
template <typename Callback>
NOINLINE void DetermineMathMLAlgorithmAndRun(
const LayoutBox& box,
const LayoutAlgorithmParams& params,
const Callback& callback) { … }
template <typename Callback>
NOINLINE void DetermineAlgorithmAndRun(const LayoutAlgorithmParams& params,
const Callback& callback) { … }
inline const LayoutResult* LayoutWithAlgorithm(
const LayoutAlgorithmParams& params) { … }
inline MinMaxSizesResult ComputeMinMaxSizesWithAlgorithm(
const LayoutAlgorithmParams& params,
const MinMaxSizesFloatInput& float_input) { … }
bool CanUseCachedIntrinsicInlineSizes(const ConstraintSpace& constraint_space,
const MinMaxSizesFloatInput& float_input,
const BlockNode& node) { … }
std::optional<LayoutUnit> ContentMinimumInlineSize(
const BlockNode& block_node,
const BoxStrut& border_padding) { … }
void AttachScrollMarkers(LayoutObject& parent,
Node::AttachContext& context,
bool has_absolute_containment = false,
bool has_fixed_containment = false) { … }
}
const LayoutResult* BlockNode::Layout(
const ConstraintSpace& constraint_space,
const BlockBreakToken* break_token,
const EarlyBreak* early_break,
const ColumnSpannerPath* column_spanner_path) const { … }
const LayoutResult* BlockNode::SimplifiedLayout(
const PhysicalFragment& previous_fragment) const { … }
const LayoutResult* BlockNode::LayoutRepeatableRoot(
const ConstraintSpace& constraint_space,
const BlockBreakToken* break_token) const { … }
void BlockNode::FinishRepeatableRoot() const { … }
void BlockNode::PrepareForLayout() const { … }
void BlockNode::FinishLayout(
LayoutBlockFlow* block_flow,
const ConstraintSpace& constraint_space,
const BlockBreakToken* break_token,
const LayoutResult* layout_result,
const std::optional<PhysicalSize>& old_box_size) const { … }
void BlockNode::StoreResultInLayoutBox(const LayoutResult* result,
const BlockBreakToken* break_token,
bool clear_trailing_results) const { … }
MinMaxSizesResult BlockNode::ComputeMinMaxSizes(
WritingMode container_writing_mode,
const SizeType type,
const ConstraintSpace& constraint_space,
const MinMaxSizesFloatInput float_input) const { … }
LayoutInputNode BlockNode::NextSibling() const { … }
LayoutInputNode BlockNode::FirstChild() const { … }
BlockNode BlockNode::GetRenderedLegend() const { … }
BlockNode BlockNode::GetFieldsetContent() const { … }
LayoutUnit BlockNode::EmptyLineBlockSize(
const BlockBreakToken* incoming_break_token) const { … }
String BlockNode::ToString() const { … }
void BlockNode::CopyFragmentDataToLayoutBox(
const ConstraintSpace& constraint_space,
const LayoutResult& layout_result,
const BlockBreakToken* previous_break_token) const { … }
void BlockNode::PlaceChildrenInLayoutBox(
const PhysicalBoxFragment& physical_fragment,
const BlockBreakToken* previous_break_token,
bool needs_invalidation_check) const { … }
void BlockNode::PlaceChildrenInFlowThread(
LayoutMultiColumnFlowThread* flow_thread,
const ConstraintSpace& space,
const PhysicalBoxFragment& physical_fragment,
const BlockBreakToken* previous_container_break_token) const { … }
void BlockNode::CopyChildFragmentPosition(
const PhysicalBoxFragment& child_fragment,
PhysicalOffset offset,
const PhysicalBoxFragment& container_fragment,
const BlockBreakToken* previous_container_break_token,
bool needs_invalidation_check) const { … }
void BlockNode::MakeRoomForExtraColumns(LayoutUnit block_size) const { … }
void BlockNode::FinishPageContainerLayout(const LayoutResult* result) const { … }
void BlockNode::CopyFragmentItemsToLayoutBox(
const PhysicalBoxFragment& container,
const FragmentItems& items,
const BlockBreakToken* previous_break_token) const { … }
bool BlockNode::IsInlineFormattingContextRoot(
InlineNode* first_child_out) const { … }
bool BlockNode::IsInlineLevel() const { … }
bool BlockNode::IsAtomicInlineLevel() const { … }
bool BlockNode::IsInTopOrViewTransitionLayer() const { … }
bool BlockNode::HasAspectRatio() const { … }
LogicalSize BlockNode::GetAspectRatio() const { … }
std::optional<gfx::Transform> BlockNode::GetTransformForChildFragment(
const PhysicalBoxFragment& child_fragment,
PhysicalSize size) const { … }
bool BlockNode::HasNonVisibleBlockOverflow() const { … }
bool BlockNode::IsCustomLayoutLoaded() const { … }
void BlockNode::HandleScrollMarkerGroup() const { … }
MathScriptType BlockNode::ScriptType() const { … }
bool BlockNode::HasIndex() const { … }
const LayoutResult* BlockNode::LayoutAtomicInline(
const ConstraintSpace& parent_constraint_space,
const ComputedStyle& parent_style,
bool use_first_line_style,
BaselineAlgorithmType baseline_algorithm_type) { … }
const LayoutResult* BlockNode::RunSimplifiedLayout(
const LayoutAlgorithmParams& params,
const LayoutResult& previous_result) const { … }
void BlockNode::UpdateMarginPaddingInfoIfNeeded(
const ConstraintSpace& space,
const PhysicalFragment& fragment) const { … }
void BlockNode::UpdateShapeOutsideInfoIfNeeded(
const LayoutResult& layout_result,
const ConstraintSpace& constraint_space) const { … }
void BlockNode::StoreColumnSizeAndCount(LayoutUnit inline_size, int count) { … }
static bool g_devtools_layout = …;
bool DevtoolsReadonlyLayoutScope::InDevtoolsLayout() { … }
DevtoolsReadonlyLayoutScope::DevtoolsReadonlyLayoutScope() { … }
DevtoolsReadonlyLayoutScope::~DevtoolsReadonlyLayoutScope() { … }
}