Closed Bug 1483972 Opened 7 years ago Closed 7 years ago

Assertion failure: false (MOZ_ASSERT_UNREACHABLE: Extra child frame found in nsVideoFrame. Possibly from stray whitespace around the videocontrols container element.), at src/layout/generic/nsVideoFrame.cpp:403

Categories

(Core :: Layout, defect, P3)

defect

Tracking

()

RESOLVED FIXED
mozilla63
Tracking Status
firefox-esr52 --- unaffected
firefox-esr60 --- unaffected
firefox61 --- unaffected
firefox62 --- unaffected
firefox63 --- fixed

People

(Reporter: tsmith, Assigned: timdream)

References

(Blocks 1 open bug)

Details

(Keywords: assertion, regression, testcase)

Attachments

(2 files)

Attached file testcase.html
Reduced with m-c: BuildID=20180816145106 SourceStamp=4248cea4f9a1e5cb64c0d121ff248e11e003e9e2 Assertion failure: false (MOZ_ASSERT_UNREACHABLE: Extra child frame found in nsVideoFrame. Possibly from stray whitespace around the videocontrols container element.), at src/layout/generic/nsVideoFrame.cpp:403 #0 nsVideoFrame::Reflow(nsPresContext*, mozilla::ReflowOutput&, mozilla::ReflowInput const&, nsReflowStatus&) src/layout/generic/nsVideoFrame.cpp:397:61 #1 nsLineLayout::ReflowFrame(nsIFrame*, nsReflowStatus&, mozilla::ReflowOutput*, bool&) src/layout/generic/nsLineLayout.cpp:932:13 #2 nsInlineFrame::ReflowInlineFrame(nsPresContext*, mozilla::ReflowInput const&, nsInlineFrame::InlineReflowInput&, nsIFrame*, nsReflowStatus&) src/layout/generic/nsInlineFrame.cpp:729:15 #3 nsInlineFrame::ReflowFrames(nsPresContext*, mozilla::ReflowInput const&, nsInlineFrame::InlineReflowInput&, mozilla::ReflowOutput&, nsReflowStatus&) src/layout/generic/nsInlineFrame.cpp:598:7 #4 nsInlineFrame::Reflow(nsPresContext*, mozilla::ReflowOutput&, mozilla::ReflowInput const&, nsReflowStatus&) src/layout/generic/nsInlineFrame.cpp:400:3 #5 nsLineLayout::ReflowFrame(nsIFrame*, nsReflowStatus&, mozilla::ReflowOutput*, bool&) src/layout/generic/nsLineLayout.cpp:932:13 #6 nsBlockFrame::ReflowInlineFrame(mozilla::BlockReflowInput&, nsLineLayout&, nsLineList_iterator, nsIFrame*, LineReflowStatus*) src/layout/generic/nsBlockFrame.cpp:4277:15 #7 nsBlockFrame::DoReflowInlineFrames(mozilla::BlockReflowInput&, nsLineLayout&, nsLineList_iterator, nsFlowAreaRect&, int&, nsFloatManager::SavedState*, bool*, LineReflowStatus*, bool) src/layout/generic/nsBlockFrame.cpp:4077:5 #8 nsBlockFrame::ReflowInlineFrames(mozilla::BlockReflowInput&, nsLineList_iterator, bool*) src/layout/generic/nsBlockFrame.cpp:3951:9 #9 nsBlockFrame::ReflowLine(mozilla::BlockReflowInput&, nsLineList_iterator, bool*) src/layout/generic/nsBlockFrame.cpp:2933:5 #10 nsBlockFrame::ReflowDirtyLines(mozilla::BlockReflowInput&) src/layout/generic/nsBlockFrame.cpp:2467:7 #11 nsBlockFrame::Reflow(nsPresContext*, mozilla::ReflowOutput&, mozilla::ReflowInput const&, nsReflowStatus&) src/layout/generic/nsBlockFrame.cpp:1292:3 #12 nsBlockReflowContext::ReflowBlock(mozilla::LogicalRect const&, bool, nsCollapsingMargin&, int, bool, nsLineBox*, mozilla::ReflowInput&, nsReflowStatus&, mozilla::BlockReflowInput&) src/layout/generic/nsBlockReflowContext.cpp:309:11 #13 nsBlockFrame::ReflowBlockFrame(mozilla::BlockReflowInput&, nsLineList_iterator, bool*) src/layout/generic/nsBlockFrame.cpp:3580:11 #14 nsBlockFrame::ReflowLine(mozilla::BlockReflowInput&, nsLineList_iterator, bool*) src/layout/generic/nsBlockFrame.cpp:2930:5 #15 nsBlockFrame::ReflowDirtyLines(mozilla::BlockReflowInput&) src/layout/generic/nsBlockFrame.cpp:2467:7 #16 nsBlockFrame::Reflow(nsPresContext*, mozilla::ReflowOutput&, mozilla::ReflowInput const&, nsReflowStatus&) src/layout/generic/nsBlockFrame.cpp:1292:3 #17 nsContainerFrame::ReflowChild(nsIFrame*, nsPresContext*, mozilla::ReflowOutput&, mozilla::ReflowInput const&, mozilla::WritingMode const&, mozilla::LogicalPoint const&, nsSize const&, unsigned int, nsReflowStatus&, nsOverflowContinuationTracker*) src/layout/generic/nsContainerFrame.cpp:951:14 #18 nsCanvasFrame::Reflow(nsPresContext*, mozilla::ReflowOutput&, mozilla::ReflowInput const&, nsReflowStatus&) src/layout/generic/nsCanvasFrame.cpp:803:5 #19 nsContainerFrame::ReflowChild(nsIFrame*, nsPresContext*, mozilla::ReflowOutput&, mozilla::ReflowInput const&, mozilla::WritingMode const&, mozilla::LogicalPoint const&, nsSize const&, unsigned int, nsReflowStatus&, nsOverflowContinuationTracker*) src/layout/generic/nsContainerFrame.cpp:951:14 #20 nsHTMLScrollFrame::ReflowScrolledFrame(mozilla::ScrollReflowInput*, bool, bool, mozilla::ReflowOutput*, bool) src/layout/generic/nsGfxScrollFrame.cpp:580:3 #21 nsHTMLScrollFrame::ReflowContents(mozilla::ScrollReflowInput*, mozilla::ReflowOutput const&) src/layout/generic/nsGfxScrollFrame.cpp:703:3 #22 nsHTMLScrollFrame::Reflow(nsPresContext*, mozilla::ReflowOutput&, mozilla::ReflowInput const&, nsReflowStatus&) src/layout/generic/nsGfxScrollFrame.cpp:1080:3 #23 nsContainerFrame::ReflowChild(nsIFrame*, nsPresContext*, mozilla::ReflowOutput&, mozilla::ReflowInput const&, int, int, unsigned int, nsReflowStatus&, nsOverflowContinuationTracker*) src/layout/generic/nsContainerFrame.cpp:995:14 #24 mozilla::ViewportFrame::Reflow(nsPresContext*, mozilla::ReflowOutput&, mozilla::ReflowInput const&, nsReflowStatus&) src/layout/generic/ViewportFrame.cpp:338:7 #25 mozilla::PresShell::DoReflow(nsIFrame*, bool) src/layout/base/PresShell.cpp:9022:11 #26 mozilla::PresShell::ProcessReflowCommands(bool) src/layout/base/PresShell.cpp:9195:24 #27 mozilla::PresShell::DoFlushPendingNotifications(mozilla::ChangesToFlush) src/layout/base/PresShell.cpp:4347:11 #28 nsIDocument::FlushPendingNotifications(mozilla::ChangesToFlush) src/dom/base/nsDocument.cpp:7443:12 #29 nsIDocument::FlushPendingNotifications(mozilla::ChangesToFlush) src/dom/base/nsDocument.cpp:7439:22 #30 nsIDocument::FlushPendingNotifications(mozilla::FlushType) src/dom/base/nsDocument.cpp:7382:3 #31 nsComputedDOMStyle::UpdateCurrentStyleSources(bool) src/layout/style/nsComputedDOMStyle.cpp:892:15 #32 nsComputedDOMStyle::GetPropertyValue(nsTSubstring<char16_t> const&, nsTSubstring<char16_t>&) src/layout/style/nsComputedDOMStyle.cpp:452:3 #33 nsICSSDeclaration::GetPropertyValue(nsTSubstring<char16_t> const&, nsTString<char16_t>&, mozilla::ErrorResult&) src/layout/style/nsICSSDeclaration.h:91:10 #34 mozilla::dom::CSSStyleDeclaration_Binding::getPropertyValue(JSContext*, JS::Handle<JSObject*>, nsICSSDeclaration*, JSJitMethodCallArgs const&) src/obj-firefox/dom/bindings/CSSStyleDeclarationBinding.cpp:262:9 #35 bool mozilla::dom::binding_detail::GenericMethod<mozilla::dom::binding_detail::NormalThisPolicy, mozilla::dom::binding_detail::ThrowExceptions>(JSContext*, unsigned int, JS::Value*) src/dom/bindings/BindingUtils.cpp:3311:13 #36 0x2d03c54055fa (<unknown module>)
Flags: in-testsuite?
Blocks: 1431255
Flags: needinfo?(timdream)
Assignee: nobody → timdream
Status: NEW → ASSIGNED
Flags: needinfo?(timdream)
(In reply to Tim Guan-tin Chien [:timdream] (please needinfo) from comment #1) > Should be fixed once > https://hg.mozilla.org/integration/mozilla-inbound/rev/fd0d6079d0d2 reaches > m-c. Sorry, not "fixed", disabled.
This crash happens because nsVideoFrame didn't know what to do with two children in the UA Widget Shadow Root. The two children are both videocontrols, with the first one being the lingering DOM inserted by first constructor call that throws. The subsequent appendChild of the same element caused the videocontrols to be initialized again, since the previous run didn't return a widget instance to UAWidgetsChild. The fix here removes the throw statement added in https://hg.mozilla.org/mozilla-central/rev/dca187f7c72c#l3.15 , allowing the constructor to complete. Without this statement, we will rely on assertion in the test here https://hg.mozilla.org/mozilla-central/rev/4ddca5eb06c2#l2.18 to fail on slower platforms to ensure the stylesheet is loaded synchronously. An alternative fix would be to wrap up the contructor in a try catch block from UAWidgetsChild and make sure the DOM is cleaned up when the constructor throw. That however will hide the error thrown so I decided to remove the throw statement instead.
Attachment #9001784 - Flags: review?(jaws)
Attachment #9001784 - Flags: review?(dholbert)
Comment on attachment 9001784 [details] Bug 1483972 - Allow videocontrols to initialize without style r=dholbert!,jaws! (away 8/20-8/27) Jared Wein [:jaws] (please needinfo? me) has approved the revision.
Attachment #9001784 - Flags: review+
Priority: -- → P3
Comment on attachment 9001784 [details] Bug 1483972 - Allow videocontrols to initialize without style r=dholbert!,jaws! Daniel Holbert [:dholbert] has approved the revision.
Attachment #9001784 - Flags: review+
Pushed by tchien@mozilla.com: https://hg.mozilla.org/integration/autoland/rev/c80952ce66dc Allow videocontrols to initialize without style r=jaws,dholbert!,jaws!
See Also: → 1484357
Status: ASSIGNED → RESOLVED
Closed: 7 years ago
Resolution: --- → FIXED
Target Milestone: --- → mozilla63
Comment on attachment 9001784 [details] Bug 1483972 - Allow videocontrols to initialize without style r=dholbert!,jaws! [canceling redundant review? flag]
Attachment #9001784 - Flags: review?(dholbert)
You need to log in before you can comment on or make changes to this bug.

Attachment

General

Created:
Updated:
Size: