Closed Bug 1579953 Opened 7 months ago Closed 7 months ago

Assertion failure: !aFrame->IsDetailsFrame() (Inserting elements into <details> should have been reframed!), at src/layout/base/nsCSSFrameConstructor.cpp:11642

Categories

(Core :: Layout, defect, P3)

defect

Tracking

()

RESOLVED FIXED
mozilla71
Tracking Status
firefox-esr60 --- unaffected
firefox-esr68 --- unaffected
firefox69 --- unaffected
firefox70 --- disabled
firefox71 --- fixed

People

(Reporter: tsmith, Assigned: TYLin)

References

(Blocks 2 open bugs, Regression)

Details

(Keywords: assertion, testcase)

Attachments

(2 files)

Attached file testcase.html

Reduced with m-c:
BuildID=20190909153652
SourceStamp=6f423e980a92fd8961aad1f85f80e80d72437b0e

Assertion failure: !aFrame->IsDetailsFrame() (Inserting elements into <details> should have been reframed!), at src/layout/base/nsCSSFrameConstructor.cpp:11642

#0 nsCSSFrameConstructor::WipeContainingBlock(nsFrameConstructorState&, nsIFrame*, nsIFrame*, nsCSSFrameConstructor::FrameConstructionItemList&, bool, nsIFrame*) src/layout/base/nsCSSFrameConstructor.cpp:11581:50
#1 nsCSSFrameConstructor::ContentRangeInserted(nsIContent*, nsIContent*, nsILayoutHistoryState*, nsCSSFrameConstructor::InsertionKind) src/layout/base/nsCSSFrameConstructor.cpp:7314:7
#2 nsCSSFrameConstructor::RecreateFramesForContent(nsIContent*, nsCSSFrameConstructor::InsertionKind) src/layout/base/nsCSSFrameConstructor.cpp:8751:7
#3 mozilla::RestyleManager::ProcessRestyledFrames(nsStyleChangeList&) src/layout/base/RestyleManager.cpp:1566:25
#4 mozilla::RestyleManager::DoProcessPendingRestyles(mozilla::ServoTraversalFlags) src/layout/base/RestyleManager.cpp:3113:9
#5 mozilla::PresShell::DoFlushPendingNotifications(mozilla::ChangesToFlush) src/layout/base/PresShell.cpp:4126:39
#6 nsRefreshDriver::Tick(mozilla::layers::BaseTransactionId<mozilla::VsyncIdType>, mozilla::TimeStamp) src/layout/base/nsRefreshDriver.cpp:1980:22
#7 mozilla::RefreshDriverTimer::TickRefreshDrivers(mozilla::layers::BaseTransactionId<mozilla::VsyncIdType>, mozilla::TimeStamp, nsTArray<RefPtr<nsRefreshDriver> >&) src/layout/base/nsRefreshDriver.cpp:350:7
#8 mozilla::RefreshDriverTimer::Tick(mozilla::layers::BaseTransactionId<mozilla::VsyncIdType>, mozilla::TimeStamp) src/layout/base/nsRefreshDriver.cpp:367:5
#9 mozilla::VsyncRefreshDriverTimer::RefreshDriverVsyncObserver::TickRefreshDriver(mozilla::layers::BaseTransactionId<mozilla::VsyncIdType>, mozilla::TimeStamp) src/layout/base/nsRefreshDriver.cpp:727:16
#10 mozilla::VsyncRefreshDriverTimer::RefreshDriverVsyncObserver::NotifyVsync(mozilla::VsyncEvent const&) src/layout/base/nsRefreshDriver.cpp:622:9
#11 mozilla::layout::VsyncChild::RecvNotify(mozilla::VsyncEvent const&) src/layout/ipc/VsyncChild.cpp:65:16
#12 mozilla::layout::PVsyncChild::OnMessageReceived(IPC::Message const&) src/obj-firefox/ipc/ipdl/PVsyncChild.cpp:187:54
#13 mozilla::ipc::PBackgroundChild::OnMessageReceived(IPC::Message const&) src/obj-firefox/ipc/ipdl/PBackgroundChild.cpp:5759:32
#14 mozilla::ipc::MessageChannel::DispatchAsyncMessage(mozilla::ipc::ActorLifecycleProxy*, IPC::Message const&) src/ipc/glue/MessageChannel.cpp:2185:25
#15 mozilla::ipc::MessageChannel::DispatchMessage(IPC::Message&&) src/ipc/glue/MessageChannel.cpp:2109:9
#16 mozilla::ipc::MessageChannel::RunMessage(mozilla::ipc::MessageChannel::MessageTask&) src/ipc/glue/MessageChannel.cpp:1954:3
#17 mozilla::ipc::MessageChannel::MessageTask::Run() src/ipc/glue/MessageChannel.cpp:1985:13
#18 nsThread::ProcessNextEvent(bool, bool*) src/xpcom/threads/nsThread.cpp:1225:14
#19 NS_ProcessNextEvent(nsIThread*, bool) src/xpcom/threads/nsThreadUtils.cpp:486:10
#20 mozilla::ipc::MessagePump::Run(base::MessagePump::Delegate*) src/ipc/glue/MessagePump.cpp:88:21
#21 MessageLoop::RunInternal() src/ipc/chromium/src/base/message_loop.cc:315:10
#22 MessageLoop::Run() src/ipc/chromium/src/base/message_loop.cc:290:3
#23 nsBaseAppShell::Run() src/widget/nsBaseAppShell.cpp:137:27
#24 XRE_RunAppShell() src/toolkit/xre/nsEmbedFunctions.cpp:934:20
#25 mozilla::ipc::MessagePumpForChildProcess::Run(base::MessagePump::Delegate*) src/ipc/glue/MessagePump.cpp:238:9
#26 MessageLoop::RunInternal() src/ipc/chromium/src/base/message_loop.cc:315:10
#27 MessageLoop::Run() src/ipc/chromium/src/base/message_loop.cc:290:3
#28 XRE_InitChildProcess(int, char**, XREChildData const*) src/toolkit/xre/nsEmbedFunctions.cpp:769:34
#29 content_process_main(mozilla::Bootstrap*, int, char**) src/browser/app/../../ipc/contentproc/plugin-container.cpp:56:28
#30 main src/browser/app/nsBrowserApp.cpp:272:18
Flags: in-testsuite?

The testcase contains a multicol <details> with details::first-letter style. When trying to insert elements into the multicol <details>, we suppose to reframe the <details> upon reaching WipeInsertionParent. However, early in ContentRangeInserted, GetInsertionPrevSibling alters insertion.mParentFrame, which becomes a Letter frame inside the DetailsFrame. As a result, WipeInsertionParent fails to reframe the <details>. Later on, some logic handling first letter removes letter frame and calls GetInsertionPrevSibling, tweaking insertion.mParentFrame back to the DetailsFrame. Hence, it triggers the assertion in WipeContainingBlock that asserts DetailsFrame should have been reframed.

Assignee: nobody → aethanyc
Status: NEW → ASSIGNED
Priority: -- → P3

If the <details> has ::first-letter, insertion.mParentFrame may be
modified by GetInsertionPrevSibling(), and points to nsFirstLetterFrame.

Fortunately, nsFirstLetterFrame's content is the details element. We can
check the content to determine if reframing the <details> is needed.

Also, add a reftest to test that an appended text should apply styles in
details::first-line.

Pushed by aethanyc@gmail.com:
https://hg.mozilla.org/integration/autoland/rev/7dbc28404c41
Check details element to determine whether to reframe. r=emilio
Status: ASSIGNED → RESOLVED
Closed: 7 months ago
Resolution: --- → FIXED
Target Milestone: --- → mozilla71
Flags: in-testsuite? → in-testsuite+
Regressed by: 1562701
Regressed by: 1580576
No longer regressed by: 1580576
Regressions: 1580576
You need to log in before you can comment on or make changes to this bug.