#include "third_party/blink/renderer/core/paint/pre_paint_tree_walk.h"
#include "base/types/optional_util.h"
#include "third_party/blink/renderer/core/dom/document_lifecycle.h"
#include "third_party/blink/renderer/core/editing/frame_selection.h"
#include "third_party/blink/renderer/core/frame/event_handler_registry.h"
#include "third_party/blink/renderer/core/frame/local_dom_window.h"
#include "third_party/blink/renderer/core/frame/local_frame.h"
#include "third_party/blink/renderer/core/frame/local_frame_view.h"
#include "third_party/blink/renderer/core/frame/pagination_state.h"
#include "third_party/blink/renderer/core/frame/visual_viewport.h"
#include "third_party/blink/renderer/core/intersection_observer/intersection_observer_controller.h"
#include "third_party/blink/renderer/core/layout/block_break_token.h"
#include "third_party/blink/renderer/core/layout/fragmentation_utils.h"
#include "third_party/blink/renderer/core/layout/inline/fragment_item.h"
#include "third_party/blink/renderer/core/layout/inline/inline_cursor.h"
#include "third_party/blink/renderer/core/layout/layout_box_model_object.h"
#include "third_party/blink/renderer/core/layout/layout_embedded_content.h"
#include "third_party/blink/renderer/core/layout/layout_multi_column_flow_thread.h"
#include "third_party/blink/renderer/core/layout/layout_shift_tracker.h"
#include "third_party/blink/renderer/core/layout/layout_view.h"
#include "third_party/blink/renderer/core/layout/pagination_utils.h"
#include "third_party/blink/renderer/core/layout/physical_box_fragment.h"
#include "third_party/blink/renderer/core/page/chrome_client.h"
#include "third_party/blink/renderer/core/page/link_highlight.h"
#include "third_party/blink/renderer/core/page/page.h"
#include "third_party/blink/renderer/core/paint/object_paint_invalidator.h"
#include "third_party/blink/renderer/core/paint/paint_layer.h"
#include "third_party/blink/renderer/core/paint/paint_property_tree_printer.h"
#include "third_party/blink/renderer/core/paint/pre_paint_disable_side_effects_scope.h"
#include "third_party/blink/renderer/platform/runtime_enabled_features.h"
namespace blink {
namespace {
bool IsLinkHighlighted(const LayoutObject& object) { … }
}
bool PrePaintTreeWalk::ContainingFragment::IsInFragmentationContext() const { … }
void PrePaintTreeWalk::WalkTree(LocalFrameView& root_frame_view) { … }
void PrePaintTreeWalk::Walk(LocalFrameView& frame_view,
const PrePaintTreeWalkContext& parent_context) { … }
namespace {
enum class BlockingEventHandlerType { … };
bool HasBlockingEventHandlerHelper(const LocalFrame& frame,
EventTarget& target,
BlockingEventHandlerType event_type) { … }
bool HasBlockingEventHandlerHelper(const LayoutObject& object,
BlockingEventHandlerType event_type) { … }
bool HasBlockingTouchEventHandler(const LayoutObject& object) { … }
bool HasBlockingWheelEventHandler(const LayoutObject& object) { … }
}
void PrePaintTreeWalk::UpdateEffectiveAllowedTouchAction(
const LayoutObject& object,
PrePaintTreeWalk::PrePaintTreeWalkContext& context) { … }
void PrePaintTreeWalk::UpdateBlockingWheelEventHandler(
const LayoutObject& object,
PrePaintTreeWalk::PrePaintTreeWalkContext& context) { … }
void PrePaintTreeWalk::InvalidatePaintForHitTesting(
const LayoutObject& object,
PrePaintTreeWalk::PrePaintTreeWalkContext& context) { … }
bool PrePaintTreeWalk::NeedsTreeBuilderContextUpdate(
const LocalFrameView& frame_view,
const PrePaintTreeWalkContext& context) { … }
bool PrePaintTreeWalk::NeedsTreeBuilderContextUpdate(
const LayoutObject& object,
const PrePaintTreeWalkContext& parent_context) { … }
bool PrePaintTreeWalk::ObjectRequiresPrePaint(const LayoutObject& object) { … }
bool PrePaintTreeWalk::ContextRequiresChildPrePaint(
const PrePaintTreeWalkContext& context) { … }
bool PrePaintTreeWalk::ObjectRequiresTreeBuilderContext(
const LayoutObject& object) { … }
bool PrePaintTreeWalk::ContextRequiresChildTreeBuilderContext(
const PrePaintTreeWalkContext& context) { … }
#if DCHECK_IS_ON()
void PrePaintTreeWalk::CheckTreeBuilderContextState(
const LayoutObject& object,
const PrePaintTreeWalkContext& parent_context) { … }
#endif
PrePaintInfo PrePaintTreeWalk::CreatePrePaintInfo(
const PhysicalFragmentLink& child,
const PrePaintTreeWalkContext& context) { … }
FragmentData* PrePaintTreeWalk::GetOrCreateFragmentData(
const LayoutObject& object,
const PrePaintTreeWalkContext& context,
const PrePaintInfo& pre_paint_info) { … }
void PrePaintTreeWalk::UpdateContextForOOFContainer(
const LayoutObject& object,
PrePaintTreeWalkContext& context,
const PhysicalBoxFragment* fragment) { … }
void PrePaintTreeWalk::WalkInternal(const LayoutObject& object,
PrePaintTreeWalkContext& context,
PrePaintInfo* pre_paint_info) { … }
bool PrePaintTreeWalk::CollectMissableChildren(
PrePaintTreeWalkContext& context,
const PhysicalBoxFragment& parent) { … }
const PhysicalBoxFragment* PrePaintTreeWalk::RebuildContextForMissedDescendant(
const PhysicalBoxFragment& ancestor,
const LayoutObject& object,
bool update_tree_builder_context,
PrePaintTreeWalkContext& context) { … }
void PrePaintTreeWalk::WalkMissedChildren(
const PhysicalBoxFragment& fragment,
bool is_in_fragment_traversal,
const PrePaintTreeWalkContext& context) { … }
LocalFrameView* FindWebViewPluginContentFrameView(
const LayoutEmbeddedContent& embedded_content) { … }
void PrePaintTreeWalk::WalkFragmentationContextRootChildren(
const LayoutObject& object,
const PhysicalBoxFragment& fragment,
const PrePaintTreeWalkContext& parent_context) { … }
void PrePaintTreeWalk::WalkPageContainer(
const PhysicalFragmentLink& page_container_link,
const LayoutObject& parent_object,
const PrePaintTreeWalkContext& parent_context,
wtf_size_t fragmentainer_idx) { … }
void PrePaintTreeWalk::WalkFragmentainer(
const LayoutObject& parent_object,
const PhysicalFragmentLink& child_link,
const PrePaintTreeWalkContext& parent_context,
wtf_size_t fragmentainer_idx) { … }
void PrePaintTreeWalk::WalkLayoutObjectChildren(
const LayoutObject& parent_object,
const PhysicalBoxFragment* parent_fragment,
const PrePaintTreeWalkContext& context) { … }
void PrePaintTreeWalk::WalkChildren(
const LayoutObject& object,
const PhysicalBoxFragment* traversable_fragment,
PrePaintTreeWalkContext& context,
bool is_inside_fragment_child) { … }
void PrePaintTreeWalk::Walk(const LayoutObject& object,
const PrePaintTreeWalkContext& parent_context,
PrePaintInfo* pre_paint_info) { … }
}