[LayoutNG] Crash during prepaint walk (for selection?) in gmail. |
|||
Issue descriptionSee stack trace, if you need more information, let me know. But reproduces reliably when selecting over (some?) links. Received signal 11 SEGV_MAPERR 000000000078 0 libbase.dylib 0x00000001042ddda3 base::debug::StackTrace::StackTrace(unsigned long) + 83 1 libbase.dylib 0x00000001042dde5d base::debug::StackTrace::StackTrace(unsigned long) + 29 2 libbase.dylib 0x0000000103fcbc0a base::debug::StackTrace::StackTrace() + 26 3 libbase.dylib 0x00000001042ddbf1 base::debug::(anonymous namespace)::StackDumpSignalHandler(int, __siginfo*, void*) + 1393 4 libsystem_platform.dylib 0x00007fff65c13f5a _sigtramp + 26 5 libblink_core.dylib 0x0000000143d8f835 WTF::Vector<blink::NGInlineItem, 0u, WTF::PartitionAllocator>::data() const + 21 6 libblink_core.dylib 0x0000000142ff0a43 blink::IsBeforeSoftLineBreak(blink::NGPaintFragment const&) + 563 7 libblink_core.dylib 0x0000000142ff05a3 blink::LayoutSelection::ComputeSelectionStatus(blink::NGPaintFragment const&) const + 1139 8 libblink_core.dylib 0x0000000142fb20ea blink::FrameSelection::ComputeLayoutSelectionStatus(blink::NGPaintFragment const&) const + 58 9 libblink_core.dylib 0x000000014416a4d8 blink::ComputeFragmentLocalSelectionRect(blink::NGPaintFragment const&) + 136 10 libblink_core.dylib 0x000000014416947d blink::PaintInvalidator::UpdateVisualRect(blink::LayoutObject const&, blink::FragmentData&, blink::PaintInvalidatorContext&) + 877 11 libblink_core.dylib 0x00000001441684f1 blink::PaintInvalidator::InvalidatePaint(blink::LayoutObject const&, blink::PaintPropertyTreeBuilderContext const*, blink::PaintInvalidatorContext&) + 1313 12 libblink_core.dylib 0x00000001441e255d blink::PrePaintTreeWalk::WalkInternal(blink::LayoutObject const&, blink::PrePaintTreeWalk::PrePaintTreeWalkContext&) + 285 13 libblink_core.dylib 0x00000001441e15fa blink::PrePaintTreeWalk::Walk(blink::LayoutObject const&) + 618 14 libblink_core.dylib 0x00000001441e1665 blink::PrePaintTreeWalk::Walk(blink::LayoutObject const&) + 725 15 libblink_core.dylib 0x00000001441e1665 blink::PrePaintTreeWalk::Walk(blink::LayoutObject const&) + 725 16 libblink_core.dylib 0x00000001441e1665 blink::PrePaintTreeWalk::Walk(blink::LayoutObject const&) + 725 17 libblink_core.dylib 0x00000001441e1665 blink::PrePaintTreeWalk::Walk(blink::LayoutObject const&) + 725 18 libblink_core.dylib 0x00000001441e1665 blink::PrePaintTreeWalk::Walk(blink::LayoutObject const&) + 725 19 libblink_core.dylib 0x00000001441e1665 blink::PrePaintTreeWalk::Walk(blink::LayoutObject const&) + 725 20 libblink_core.dylib 0x00000001441e1665 blink::PrePaintTreeWalk::Walk(blink::LayoutObject const&) + 725 21 libblink_core.dylib 0x00000001441e1665 blink::PrePaintTreeWalk::Walk(blink::LayoutObject const&) + 725 22 libblink_core.dylib 0x00000001441e1665 blink::PrePaintTreeWalk::Walk(blink::LayoutObject const&) + 725 23 libblink_core.dylib 0x00000001441e1665 blink::PrePaintTreeWalk::Walk(blink::LayoutObject const&) + 725 24 libblink_core.dylib 0x00000001441e1665 blink::PrePaintTreeWalk::Walk(blink::LayoutObject const&) + 725 25 libblink_core.dylib 0x00000001441e1665 blink::PrePaintTreeWalk::Walk(blink::LayoutObject const&) + 725 26 libblink_core.dylib 0x00000001441e1665 blink::PrePaintTreeWalk::Walk(blink::LayoutObject const&) + 725 27 libblink_core.dylib 0x00000001441e1665 blink::PrePaintTreeWalk::Walk(blink::LayoutObject const&) + 725 28 libblink_core.dylib 0x00000001441e1665 blink::PrePaintTreeWalk::Walk(blink::LayoutObject const&) + 725 29 libblink_core.dylib 0x00000001441e1665 blink::PrePaintTreeWalk::Walk(blink::LayoutObject const&) + 725 30 libblink_core.dylib 0x00000001441e1665 blink::PrePaintTreeWalk::Walk(blink::LayoutObject const&) + 725 31 libblink_core.dylib 0x00000001441e1665 blink::PrePaintTreeWalk::Walk(blink::LayoutObject const&) + 725 32 libblink_core.dylib 0x00000001441e1665 blink::PrePaintTreeWalk::Walk(blink::LayoutObject const&) + 725 33 libblink_core.dylib 0x00000001441e1665 blink::PrePaintTreeWalk::Walk(blink::LayoutObject const&) + 725 34 libblink_core.dylib 0x00000001441e1665 blink::PrePaintTreeWalk::Walk(blink::LayoutObject const&) + 725 35 libblink_core.dylib 0x00000001441e1665 blink::PrePaintTreeWalk::Walk(blink::LayoutObject const&) + 725 36 libblink_core.dylib 0x00000001441e1665 blink::PrePaintTreeWalk::Walk(blink::LayoutObject const&) + 725 37 libblink_core.dylib 0x00000001441e1665 blink::PrePaintTreeWalk::Walk(blink::LayoutObject const&) + 725 38 libblink_core.dylib 0x00000001441e1665 blink::PrePaintTreeWalk::Walk(blink::LayoutObject const&) + 725 39 libblink_core.dylib 0x00000001441e1665 blink::PrePaintTreeWalk::Walk(blink::LayoutObject const&) + 725 40 libblink_core.dylib 0x00000001441e1665 blink::PrePaintTreeWalk::Walk(blink::LayoutObject const&) + 725 41 libblink_core.dylib 0x00000001441e1665 blink::PrePaintTreeWalk::Walk(blink::LayoutObject const&) + 725 42 libblink_core.dylib 0x00000001441e1665 blink::PrePaintTreeWalk::Walk(blink::LayoutObject const&) + 725 43 libblink_core.dylib 0x00000001441e1665 blink::PrePaintTreeWalk::Walk(blink::LayoutObject const&) + 725 44 libblink_core.dylib 0x00000001441e1665 blink::PrePaintTreeWalk::Walk(blink::LayoutObject const&) + 725 45 libblink_core.dylib 0x00000001441e1665 blink::PrePaintTreeWalk::Walk(blink::LayoutObject const&) + 725 46 libblink_core.dylib 0x00000001441e1665 blink::PrePaintTreeWalk::Walk(blink::LayoutObject const&) + 725 47 libblink_core.dylib 0x00000001441e1665 blink::PrePaintTreeWalk::Walk(blink::LayoutObject const&) + 725 48 libblink_core.dylib 0x00000001441e1665 blink::PrePaintTreeWalk::Walk(blink::LayoutObject const&) + 725 49 libblink_core.dylib 0x00000001441e1665 blink::PrePaintTreeWalk::Walk(blink::LayoutObject const&) + 725 50 libblink_core.dylib 0x00000001441e1665 blink::PrePaintTreeWalk::Walk(blink::LayoutObject const&) + 725 51 libblink_core.dylib 0x00000001441e1665 blink::PrePaintTreeWalk::Walk(blink::LayoutObject const&) + 725 52 libblink_core.dylib 0x00000001441e1665 blink::PrePaintTreeWalk::Walk(blink::LayoutObject const&) + 725 53 libblink_core.dylib 0x00000001441e1665 blink::PrePaintTreeWalk::Walk(blink::LayoutObject const&) + 725 54 libblink_core.dylib 0x00000001441e1665 blink::PrePaintTreeWalk::Walk(blink::LayoutObject const&) + 725 55 libblink_core.dylib 0x00000001441e1665 blink::PrePaintTreeWalk::Walk(blink::LayoutObject const&) + 725 56 libblink_core.dylib 0x00000001441e1665 blink::PrePaintTreeWalk::Walk(blink::LayoutObject const&) + 725 57 libblink_core.dylib 0x00000001441e1665 blink::PrePaintTreeWalk::Walk(blink::LayoutObject const&) + 725 58 libblink_core.dylib 0x00000001441e1665 blink::PrePaintTreeWalk::Walk(blink::LayoutObject const&) + 725 59 libblink_core.dylib 0x00000001441e0c86 blink::PrePaintTreeWalk::Walk(blink::LocalFrameView&) + 902 60 libblink_core.dylib 0x00000001441e0352 blink::PrePaintTreeWalk::WalkTree(blink::LocalFrameView&) + 642 61 libblink_core.dylib 0x000000014336b5d6 blink::LocalFrameView::RunPrePaintLifecyclePhase(blink::DocumentLifecycle::LifecycleState) + 390 62 libblink_core.dylib 0x000000014336a873 blink::LocalFrameView::UpdateLifecyclePhasesInternal(blink::DocumentLifecycle::LifecycleState) + 835 63 libblink_core.dylib 0x000000014336944c blink::LocalFrameView::UpdateLifecyclePhases(blink::DocumentLifecycle::LifecycleState) + 972 64 libblink_core.dylib 0x00000001433696f2 blink::LocalFrameView::UpdateAllLifecyclePhasesExceptPaint() + 50 65 libblink_core.dylib 0x0000000143cdaa6a blink::LayoutView::HitTest(blink::HitTestLocation const&, blink::HitTestResult&) + 58 66 libblink_core.dylib 0x0000000143045973 blink::SelectionController::UpdateSelectionForMouseDrag(blink::LayoutPoint const&, blink::LayoutPoint const&) + 259 67 libblink_core.dylib 0x00000001437d3ae9 blink::MouseEventManager::UpdateSelectionForMouseDrag() + 121 68 libblink_core.dylib 0x00000001437b8a44 blink::EventHandler::UpdateSelectionForMouseDrag() + 36 69 libblink_core.dylib 0x0000000143ffd15d blink::AutoscrollController::Animate() + 541 70 libblink_core.dylib 0x00000001440527df blink::PageWidgetDelegate::Animate(blink::Page&, base::TimeTicks) + 47 71 libblink_core.dylib 0x00000001431a5f63 blink::WebViewImpl::BeginFrame(base::TimeTicks) + 547 72 libblink_core.dylib 0x000000014345aff2 blink::WebViewFrameWidget::BeginFrame(base::TimeTicks) + 66 73 libcontent.dylib 0x00000001154aaea8 content::RenderWidget::BeginMainFrame(base::TimeTicks) + 168 74 libcontent.dylib 0x0000000114f90bc8 content::LayerTreeView::BeginMainFrame(viz::BeginFrameArgs const&) + 104 75 libcc.dylib 0x000000012c01d79d cc::LayerTreeHost::BeginMainFrame(viz::BeginFrameArgs const&) + 45 76 libcc.dylib 0x000000012c13b7fb cc::ProxyMain::BeginMainFrame(std::__1::unique_ptr<cc::BeginMainFrameAndCommitState, std::__1::default_delete<cc::BeginMainFrameAndCommitState> >) + 1755 77 libcc.dylib 0x000000012c137f52 void base::internal::FunctorTraits<void (cc::ProxyMain::*)(std::__1::unique_ptr<cc::BeginMainFrameAndCommitState, std::__1::default_delete<cc::BeginMainFrameAndCommitState> >), void>::Invoke<void (cc::ProxyMain::*)(std::__1::unique_ptr<cc::BeginMainFrameAndCommitState, std::__1::default_delete<cc::BeginMainFrameAndCommitState> >), base::WeakPtr<cc::ProxyMain>, std::__1::unique_ptr<cc::BeginMainFrameAndCommitState, std::__1::default_delete<cc::BeginMainFrameAndCommitState> > >(void (cc::ProxyMain::*)(std::__1::unique_ptr<cc::BeginMainFrameAndCommitState, std::__1::default_delete<cc::BeginMainFrameAndCommitState> >), base::WeakPtr<cc::ProxyMain>&&, std::__1::unique_ptr<cc::BeginMainFrameAndCommitState, std::__1::default_delete<cc::BeginMainFrameAndCommitState> >&&) + 178 78 libcc.dylib 0x000000012c137dff void base::internal::InvokeHelper<true, void>::MakeItSo<void (cc::ProxyMain::*)(std::__1::unique_ptr<cc::BeginMainFrameAndCommitState, std::__1::default_delete<cc::BeginMainFrameAndCommitState> >), base::WeakPtr<cc::ProxyMain>, std::__1::unique_ptr<cc::BeginMainFrameAndCommitState, std::__1::default_delete<cc::BeginMainFrameAndCommitState> > >(void (cc::ProxyMain::*&&)(std::__1::unique_ptr<cc::BeginMainFrameAndCommitState, std::__1::default_delete<cc::BeginMainFrameAndCommitState> >), base::WeakPtr<cc::ProxyMain>&&, std::__1::unique_ptr<cc::BeginMainFrameAndCommitState, std::__1::default_delete<cc::BeginMainFrameAndCommitState> >&&) + 127 79 libcc.dylib 0x000000012c137d26 void base::internal::Invoker<base::internal::BindState<void (cc::ProxyMain::*)(std::__1::unique_ptr<cc::BeginMainFrameAndCommitState, std::__1::default_delete<cc::BeginMainFrameAndCommitState> >), base::WeakPtr<cc::ProxyMain>, base::internal::PassedWrapper<std::__1::unique_ptr<cc::BeginMainFrameAndCommitState, std::__1::default_delete<cc::BeginMainFrameAndCommitState> > > >, void ()>::RunImpl<void (cc::ProxyMain::*)(std::__1::unique_ptr<cc::BeginMainFrameAndCommitState, std::__1::default_delete<cc::BeginMainFrameAndCommitState> >), std::__1::tuple<base::WeakPtr<cc::ProxyMain>, base::internal::PassedWrapper<std::__1::unique_ptr<cc::BeginMainFrameAndCommitState, std::__1::default_delete<cc::BeginMainFrameAndCommitState> > > >, 0ul, 1ul>(void (cc::ProxyMain::*&&)(std::__1::unique_ptr<cc::BeginMainFrameAndCommitState, std::__1::default_delete<cc::BeginMainFrameAndCommitState> >), std::__1::tuple<base::WeakPtr<cc::ProxyMain>, base::internal::PassedWrapper<std::__1::unique_ptr<cc::BeginMainFrameAndCommitState, std::__1::default_delete<cc::BeginMainFrameAndCommitState> > > >&&, std::__1::integer_sequence<unsigned long, 0ul, 1ul>) + 118 80 libcc.dylib 0x000000012c137bfe base::internal::Invoker<base::internal::BindState<void (cc::ProxyMain::*)(std::__1::unique_ptr<cc::BeginMainFrameAndCommitState, std::__1::default_delete<cc::BeginMainFrameAndCommitState> >), base::WeakPtr<cc::ProxyMain>, base::internal::PassedWrapper<std::__1::unique_ptr<cc::BeginMainFrameAndCommitState, std::__1::default_delete<cc::BeginMainFrameAndCommitState> > > >, void ()>::RunOnce(base::internal::BindStateBase*) + 62 81 libbase.dylib 0x0000000103f8dafc base::OnceCallback<void ()>::Run() && + 92 82 libbase.dylib 0x0000000103fcd229 base::debug::TaskAnnotator::RunTask(char const*, base::PendingTask*) + 729 83 libbase.dylib 0x00000001041b81a1 base::sequence_manager::internal::ThreadControllerImpl::DoWork(base::sequence_manager::internal::ThreadControllerImpl::WorkType) + 1409 84 libbase.dylib 0x00000001041bb3a6 void base::internal::FunctorTraits<void (base::sequence_manager::internal::ThreadControllerImpl::*)(base::sequence_manager::internal::ThreadControllerImpl::WorkType), void>::Invoke<void (base::sequence_manager::internal::ThreadControllerImpl::*)(base::sequence_manager::internal::ThreadControllerImpl::WorkType), base::WeakPtr<base::sequence_manager::internal::ThreadControllerImpl> const&, base::sequence_manager::internal::ThreadControllerImpl::WorkType const&>(void (base::sequence_manager::internal::ThreadControllerImpl::*)(base::sequence_manager::internal::ThreadControllerImpl::WorkType), base::WeakPtr<base::sequence_manager::internal::ThreadControllerImpl> const&&&, base::sequence_manager::internal::ThreadControllerImpl::WorkType const&&&) + 150 85 libbase.dylib 0x00000001041bb23f void base::internal::InvokeHelper<true, void>::MakeItSo<void (base::sequence_manager::internal::ThreadControllerImpl::* const&)(base::sequence_manager::internal::ThreadControllerImpl::WorkType), base::WeakPtr<base::sequence_manager::internal::ThreadControllerImpl> const&, base::sequence_manager::internal::ThreadControllerImpl::WorkType const&>(void (base::sequence_manager::internal::ThreadControllerImpl::* const&&&)(base::sequence_manager::internal::ThreadControllerImpl::WorkType), base::WeakPtr<base::sequence_manager::internal::ThreadControllerImpl> const&&&, base::sequence_manager::internal::ThreadControllerImpl::WorkType const&&&) + 127 86 libbase.dylib 0x00000001041bb1b3 void base::internal::Invoker<base::internal::BindState<void (base::sequence_manager::internal::ThreadControllerImpl::*)(base::sequence_manager::internal::ThreadControllerImpl::WorkType), base::WeakPtr<base::sequence_manager::internal::ThreadControllerImpl>, base::sequence_manager::internal::ThreadControllerImpl::WorkType>, void ()>::RunImpl<void (base::sequence_manager::internal::ThreadControllerImpl::* const&)(base::sequence_manager::internal::ThreadControllerImpl::WorkType), std::__1::tuple<base::WeakPtr<base::sequence_manager::internal::ThreadControllerImpl>, base::sequence_manager::internal::ThreadControllerImpl::WorkType> const&, 0ul, 1ul>(void (base::sequence_manager::internal::ThreadControllerImpl::* const&&&)(base::sequence_manager::internal::ThreadControllerImpl::WorkType), std::__1::tuple<base::WeakPtr<base::sequence_manager::internal::ThreadControllerImpl>, base::sequence_manager::internal::ThreadControllerImpl::WorkType> const&&&, std::__1::integer_sequence<unsigned long, 0ul, 1ul>) + 99 87 libbase.dylib 0x00000001041bb08c base::internal::Invoker<base::internal::BindState<void (base::sequence_manager::internal::ThreadControllerImpl::*)(base::sequence_manager::internal::ThreadControllerImpl::WorkType), base::WeakPtr<base::sequence_manager::internal::ThreadControllerImpl>, base::sequence_manager::internal::ThreadControllerImpl::WorkType>, void ()>::Run(base::internal::BindStateBase*) + 44 88 libbase.dylib 0x0000000103f8dafc base::OnceCallback<void ()>::Run() && + 92 89 libbase.dylib 0x0000000103fcd229 base::debug::TaskAnnotator::RunTask(char const*, base::PendingTask*) + 729 90 libbase.dylib 0x0000000104057bfc base::MessageLoopImpl::RunTask(base::PendingTask*) + 796 91 libbase.dylib 0x0000000104057fe9 base::MessageLoopImpl::DeferOrRunPendingTask(base::PendingTask) + 89 92 libbase.dylib 0x0000000104058a97 base::MessageLoopImpl::DoWork() + 455 93 libbase.dylib 0x0000000104063852 base::MessagePumpCFRunLoopBase::RunWork() + 98 94 libbase.dylib 0x00000001040637dc ___ZN4base24MessagePumpCFRunLoopBase13RunWorkSourceEPv_block_invoke + 28 95 libbase.dylib 0x00000001040180fa base::mac::CallWithEHFrame(void () block_pointer) + 10 96 libbase.dylib 0x0000000104062be5 base::MessagePumpCFRunLoopBase::RunWorkSource(void*) + 101 97 CoreFoundation 0x00007fff3da008f1 __CFRUNLOOP_IS_CALLING_OUT_TO_A_SOURCE0_PERFORM_FUNCTION__ + 17 98 CoreFoundation 0x00007fff3daba30c __CFRunLoopDoSource0 + 108 99 CoreFoundation 0x00007fff3d9e3350 __CFRunLoopDoSources0 + 208 100 CoreFoundation 0x00007fff3d9e27cd __CFRunLoopRun + 1293 101 CoreFoundation 0x00007fff3d9e2033 CFRunLoopRunSpecific + 483 102 Foundation 0x00007fff3fadfe76 -[NSRunLoop(NSRunLoop) runMode:beforeDate:] + 277 103 libbase.dylib 0x0000000104064349 base::MessagePumpNSRunLoop::DoRun(base::MessagePump::Delegate*) + 185 104 libbase.dylib 0x00000001040623b5 base::MessagePumpCFRunLoopBase::Run(base::MessagePump::Delegate*) + 101 105 libbase.dylib 0x0000000104057460 base::MessageLoopImpl::Run(bool) + 512 106 libbase.dylib 0x00000001041068fd base::RunLoop::Run() + 525 107 libcontent.dylib 0x00000001154ebdeb content::RendererMain(content::MainFunctionParams const&) + 1659 108 libcontent.dylib 0x00000001157cfd81 content::RunOtherNamedProcessTypeMain(std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&, content::MainFunctionParams const&, content::ContentMainDelegate*) + 177 109 libcontent.dylib 0x00000001157d0fb5 content::ContentMainRunnerImpl::Run(bool) + 1285 110 libcontent.dylib 0x00000001157cd729 content::ContentServiceManagerMainDelegate::RunEmbedderProcess() + 57 111 libembedder.dylib 0x00000001795e9917 service_manager::Main(service_manager::MainParams const&) + 1607 112 libcontent.dylib 0x00000001157cfbc9 content::ContentMain(content::ContentMainParams const&) + 89 113 Content Shell Framework 0x0000000109b012ae ContentMain + 286 114 Content Shell Helper 0x00000001039d6b60 main + 848 115 libdyld.dylib 0x00007fff65905015 start + 1
,
Nov 21
I'll take a look.
,
Nov 21
The long links that we see in Gmail contains <wbr>: <a href="..."> https://groups.google.com/a/<wbr>chromium.org/d/msgid/blink- <wbr> dev/CAM1-CVkcq81FPTJJ% <wbr> 3DA9e1Kun0aYmYeXgJjaYjC2nAxgcB <wbr> MHTgQ%40mail.gmail.com </a> When the link is wrapped into lines, selecting cross line boundary results in a selection highlight that ends at a WBR, which doesn't have TextShapeResult. Accessing that results in a null deref.
,
Nov 21
minimal repro: <div style="width:0">foo<wbr>bar</div> Selecting across line wrap crashes.
,
Nov 24
The following revision refers to this bug: https://chromium.googlesource.com/chromium/src.git/+/886c74e309489c7019e2a10a2fc27d26792af689 commit 886c74e309489c7019e2a10a2fc27d26792af689 Author: Xiaocheng Hu <xiaochengh@chromium.org> Date: Sat Nov 24 00:34:06 2018 [LayoutNG] Use the correct function to check fragment direction in selection painting LayoutSelection's IsBeforeSoftLineBreak() checks a text fragment's TextShapeResult for the resolved direction, which results in a null deref if the text fragment is a control fragment (e.g., <wbr>). This patch changes it to call NGPhysicalFragment::ResolvedDirection() to fix the issue. Bug: 907186 Change-Id: Ifcb6c25eccd96850d9e7df6c5e9631fa4b3b2fb1 Reviewed-on: https://chromium-review.googlesource.com/c/1347616 Reviewed-by: Yoichi Osato <yoichio@chromium.org> Commit-Queue: Xiaocheng Hu <xiaochengh@chromium.org> Cr-Commit-Position: refs/heads/master@{#610691} [modify] https://crrev.com/886c74e309489c7019e2a10a2fc27d26792af689/third_party/blink/renderer/core/editing/layout_selection.cc [modify] https://crrev.com/886c74e309489c7019e2a10a2fc27d26792af689/third_party/blink/renderer/core/editing/layout_selection_test.cc
,
Nov 26
|
|||
►
Sign in to add a comment |
|||
Comment 1 by ikilpatrick@chromium.org
, Nov 20shape_result appears to be null for some reason? (lldb) bt 10 * thread #27, name = 'Chrome_InProcRendererThread', stop reason = EXC_BAD_ACCESS (code=1, address=0x78) * frame #0: 0x0000000141388c5c libblink_core.dylib`blink::ShapeResultView::Direction(this=0x0000000000000000) const at shape_result_view.h:99 frame #1: 0x0000000141385a43 libblink_core.dylib`blink::IsBeforeSoftLineBreak(fragment=0x0000002df87619f0) at layout_selection.cc:591 frame #2: 0x00000001413855a3 libblink_core.dylib`blink::LayoutSelection::ComputeSelectionStatus(this=0x0000004fd0ba1ba8, fragment=0x0000002df87619f0) const at layout_selection.cc:724 frame #3: 0x00000001413470ea libblink_core.dylib`blink::FrameSelection::ComputeLayoutSelectionStatus(this=0x0000004e5b161b48, text_fragment=0x0000002df87619f0) const at frame_selection.cc:1234 frame #4: 0x00000001424ff4d8 libblink_core.dylib`blink::ComputeFragmentLocalSelectionRect(fragment=0x0000002df87619f0) at paint_invalidator.cc:170 frame #5: 0x00000001424fe47d libblink_core.dylib`blink::PaintInvalidator::UpdateVisualRect(this=0x000070000d2a6470, object=0x0000001ca2449530, fragment_data=0x0000001ca2449588, context=0x0000002c7580e720) at paint_invalidator.cc:336 frame #6: 0x00000001424fd4f1 libblink_core.dylib`blink::PaintInvalidator::InvalidatePaint(this=0x000070000d2a6470, object=0x0000001ca2449530, tree_builder_context=0x0000002c7580e5f0, context=0x0000002c7580e720) at paint_invalidator.cc:482 frame #7: 0x000000014257755d libblink_core.dylib`blink::PrePaintTreeWalk::WalkInternal(this=0x000070000d2a6470, object=0x0000001ca2449530, context=0x0000002c7580e5e8) at pre_paint_tree_walk.cc:342 frame #8: 0x00000001425765fa libblink_core.dylib`blink::PrePaintTreeWalk::Walk(this=0x000070000d2a6470, object=0x0000001ca2449530) at pre_paint_tree_walk.cc:430 frame #9: 0x0000000142576665 libblink_core.dylib`blink::PrePaintTreeWalk::Walk(this=0x000070000d2a6470, object=0x0000001ca2646a50) at pre_paint_tree_walk.cc:438 (lldb) f 1 frame #1: 0x0000000141385a43 libblink_core.dylib`blink::IsBeforeSoftLineBreak(fragment=0x0000002df87619f0) at layout_selection.cc:591 588 // paint/selection/text-selection-newline-mixed-ltr-rtl.html. 589 const ShapeResultView* shape_result = 590 ToNGPhysicalTextFragment(fragment.PhysicalFragment()).TextShapeResult(); -> 591 return physical_line_box.BaseDirection() == shape_result->Direction(); 592 } 593 594 static Text* AssociatedTextNode(const LayoutText& text) { (lldb) p shape_result