Open Bug 848346 Opened 12 years ago Updated 3 years ago

"ASSERTION: Shouldn't be trying to restyle non-elements directly" in Thunderbird MIME message display

Categories

(MailNews Core :: MIME, defect)

x86_64
macOS
defect

Tracking

(Not tracked)

People

(Reporter: Irving, Unassigned)

References

Details

(Keywords: assertion)

+++ This bug was initially created as a clone of Bug #761848 +++ I'm seeing an assertion in Thunderbird debug builds: ###!!! ASSERTION: Shouldn't be trying to restyle non-elements directly: '!aContent || aContent->IsElement()', file /Users/ireid/tbird/comm-central/mozilla/layout/base/nsStyleChangeList.cpp, line 65 The stack is quite deep but the nsIContent* it's complaining about is an nsTextNode that appears to be empty (nsTextFragment nsTextNode.mText contains all 0 values). The content in question is the HTML representation of a mail message being assembled by our MIME processor. #0 0x000000010198e529 in nsStyleChangeList::AppendChange at /Users/ireid/tbird/comm-central/mozilla/layout/base/nsStyleChangeList.cpp:64 #1 0x0000000101921cab in CaptureChange at /Users/ireid/tbird/comm-central/mozilla/layout/base/nsFrameManager.cpp:1002 #2 0x0000000101920523 in nsFrameManager::ReResolveStyleContext at /Users/ireid/tbird/comm-central/mozilla/layout/base/nsFrameManager.cpp:1300 #3 0x0000000101921739 in nsFrameManager::ReResolveStyleContext(nsPresContext*, nsIFrame*, nsIContent*, nsStyleChangeList*, nsChangeHint, nsChangeHint, nsRestyleHint, mozilla::css::RestyleTracker&, nsFrameManager::DesiredA11yNotifications, nsTArray<nsIContent*>&, TreeMatchContext&) () #4 0x0000000101921739 in nsFrameManager::ReResolveStyleContext(nsPresContext*, nsIFrame*, nsIContent*, nsStyleChangeList*, nsChangeHint, nsChangeHint, nsRestyleHint, mozilla::css::RestyleTracker&, nsFrameManager::DesiredA11yNotifications, nsTArray<nsIContent*>&, TreeMatchContext&) () #5 0x0000000101921739 in nsFrameManager::ReResolveStyleContext(nsPresContext*, nsIFrame*, nsIContent*, nsStyleChangeList*, nsChangeHint, nsChangeHint, nsRestyleHint, mozilla::css::RestyleTracker&, nsFrameManager::DesiredA11yNotifications, nsTArray<nsIContent*>&, TreeMatchContext&) () #6 0x0000000101921739 in nsFrameManager::ReResolveStyleContext(nsPresContext*, nsIFrame*, nsIContent*, nsStyleChangeList*, nsChangeHint, nsChangeHint, nsRestyleHint, mozilla::css::RestyleTracker&, nsFrameManager::DesiredA11yNotifications, nsTArray<nsIContent*>&, TreeMatchContext&) () #7 0x0000000101921739 in nsFrameManager::ReResolveStyleContext(nsPresContext*, nsIFrame*, nsIContent*, nsStyleChangeList*, nsChangeHint, nsChangeHint, nsRestyleHint, mozilla::css::RestyleTracker&, nsFrameManager::DesiredA11yNotifications, nsTArray<nsIContent*>&, TreeMatchContext&) () #8 0x0000000101921739 in nsFrameManager::ReResolveStyleContext(nsPresContext*, nsIFrame*, nsIContent*, nsStyleChangeList*, nsChangeHint, nsChangeHint, nsRestyleHint, mozilla::css::RestyleTracker&, nsFrameManager::DesiredA11yNotifications, nsTArray<nsIContent*>&, TreeMatchContext&) () #9 0x0000000101921739 in nsFrameManager::ReResolveStyleContext(nsPresContext*, nsIFrame*, nsIContent*, nsStyleChangeList*, nsChangeHint, nsChangeHint, nsRestyleHint, mozilla::css::RestyleTracker&, nsFrameManager::DesiredA11yNotifications, nsTArray<nsIContent*>&, TreeMatchContext&) () #10 0x00000001019215fe in nsFrameManager::ReResolveStyleContext(nsPresContext*, nsIFrame*, nsIContent*, nsStyleChangeList*, nsChangeHint, nsChangeHint, nsRestyleHint, mozilla::css::RestyleTracker&, nsFrameManager::DesiredA11yNotifications, nsTArray<nsIContent*>&, TreeMatchContext&) () #11 0x0000000101921739 in nsFrameManager::ReResolveStyleContext(nsPresContext*, nsIFrame*, nsIContent*, nsStyleChangeList*, nsChangeHint, nsChangeHint, nsRestyleHint, mozilla::css::RestyleTracker&, nsFrameManager::DesiredA11yNotifications, nsTArray<nsIContent*>&, TreeMatchContext&) () #12 0x0000000101921739 in nsFrameManager::ReResolveStyleContext(nsPresContext*, nsIFrame*, nsIContent*, nsStyleChangeList*, nsChangeHint, nsChangeHint, nsRestyleHint, mozilla::css::RestyleTracker&, nsFrameManager::DesiredA11yNotifications, nsTArray<nsIContent*>&, TreeMatchContext&) () #13 0x0000000101921739 in nsFrameManager::ReResolveStyleContext(nsPresContext*, nsIFrame*, nsIContent*, nsStyleChangeList*, nsChangeHint, nsChangeHint, nsRestyleHint, mozilla::css::RestyleTracker&, nsFrameManager::DesiredA11yNotifications, nsTArray<nsIContent*>&, TreeMatchContext&) () #14 0x0000000101921739 in nsFrameManager::ReResolveStyleContext(nsPresContext*, nsIFrame*, nsIContent*, nsStyleChangeList*, nsChangeHint, nsChangeHint, nsRestyleHint, mozilla::css::RestyleTracker&, nsFrameManager::DesiredA11yNotifications, nsTArray<nsIContent*>&, TreeMatchContext&) () #15 0x0000000101921fb0 in nsFrameManager::ComputeStyleChangeFor(nsIFrame*, nsStyleChangeList*, nsChangeHint, mozilla::css::RestyleTracker&, bool) () #16 0x0000000101893552 in nsCSSFrameConstructor::RestyleElement(mozilla::dom::Element*, nsIFrame*, nsChangeHint, mozilla::css::RestyleTracker&, bool) () #17 0x0000000101875162 in mozilla::css::RestyleTracker::ProcessOneRestyle(mozilla::dom::Element*, nsRestyleHint, nsChangeHint) () #18 0x0000000101874188 in mozilla::css::RestyleTracker::DoProcessRestyles() () #19 0x00000001018a0879 in mozilla::css::RestyleTracker::ProcessRestyles() () #20 0x0000000101899fca in nsCSSFrameConstructor::ProcessPendingRestyles() () #21 0x0000000101964081 in PresShell::FlushPendingNotifications(mozilla::ChangesToFlush) () #22 0x0000000101963b3b in PresShell::FlushPendingNotifications(mozFlushType) () #23 0x0000000101df8dbf in nsDocument::FlushPendingNotifications(mozFlushType) () #24 0x0000000101e4fcf7 in mozilla::dom::Element::GetPrimaryFrame(mozFlushType) () #25 0x0000000101e4fc5a in mozilla::dom::Element::GetStyledFrame() () #26 0x0000000101e4fe9c in mozilla::dom::Element::GetScrollFrame(nsIFrame**) () #27 0x0000000101e5044a in mozilla::dom::Element::GetClientAreaRect() () #28 0x0000000101e68fcc in mozilla::dom::Element::ClientWidth() () #29 0x00000001042fac21 in mozilla::dom::ElementBinding::get_clientWidth(JSContext*, JS::Handle<JSObject*>, mozilla::dom::Element*, JS::Value*) () #30 0x00000001042f2dc1 in mozilla::dom::ElementBinding::genericGetter(JSContext*, unsigned int, JS::Value*) () #31 0x0000000105754602 in _ZN2js12CallJSNativeEP9JSContextPFiS1_jPN2JS5ValueEERKNS2_8CallArgsE [inlined] () #32 0x0000000105754602 in js::InvokeKernel(JSContext*, JS::CallArgs, js::MaybeConstruct) () #33 0x0000000105642983 in js::Invoke(JSContext*, js::InvokeArgsGuard&, js::MaybeConstruct) () #34 0x0000000105755809 in js::Invoke(JSContext*, JS::Value const&, JS::Value const&, unsigned int, JS::Value*, JS::Value*) () #35 0x0000000105756e56 in js::InvokeGetterOrSetter(JSContext*, JSObject*, JS::Value const&, unsigned int, JS::Value*, JS::Value*) () #36 0x00000001058040e5 in js::Shape::get(JSContext*, JS::Handle<JSObject*>, JSObject*, JSObject*, JS::MutableHandle<JS::Value>) () #37 0x00000001057e0fc0 in _ZL15NativeGetInlineILN2js7AllowGCE1EEiP9JSContextNS0_11MaybeRootedIP8JSObjectXT_EE10HandleTypeES8_S8_NS4_IPNS0_5ShapeEXT_EE10HandleTypeEjNS4_IN2JS5ValueEXT_EE17MutableHandleTypeE [inlined] () #38 0x00000001057e0fc0 in _ZL23GetPropertyHelperInlineILN2js7AllowGCE1EEiP9JSContextNS0_11MaybeRootedIP8JSObjectXT_EE10HandleTypeES8_NS4_I4jsidXT_EE10HandleTypeEjNS4_IN2JS5ValueEXT_EE17MutableHandleTypeE [inlined] () #39 0x00000001057e0fc0 in js::GetPropertyHelper(JSContext*, JS::Handle<JSObject*>, JS::Handle<jsid>, unsigned int, JS::MutableHandle<JS::Value>) () #40 0x0000000105771687 in js::GetPropertyOperation(JSContext*, JSScript*, unsigned char*, JS::MutableHandle<JS::Value>, JS::MutableHandle<JS::Value>) () #41 0x0000000105d60cf9 in js::mjit::ic::GetProp(js::VMFrame&, js::mjit::ic::PICInfo*) () #42 0x0000000118dd35c1 in <????> () #43 0x0000000105c2674a in js::mjit::EnterMethodJIT(JSContext*, js::StackFrame*, void*, JS::Value*, bool) () #44 0x0000000105c26cad in CheckStackAndEnterMethodJIT(JSContext*, js::StackFrame*, void*, bool) () #45 0x0000000105c26d04 in js::mjit::JaegerShotAtSafePoint(JSContext*, void*, bool) () #46 0x000000010572ab4b in js::Interpret(JSContext*, js::StackFrame*, js::InterpMode) () #47 0x0000000105729048 in js::RunScript(JSContext*, js::StackFrame*) () #48 0x000000010575481f in js::InvokeKernel(JSContext*, JS::CallArgs, js::MaybeConstruct) () #49 0x0000000105642983 in js::Invoke(JSContext*, js::InvokeArgsGuard&, js::MaybeConstruct) () #50 0x0000000105755809 in js::Invoke(JSContext*, JS::Value const&, JS::Value const&, unsigned int, JS::Value*, JS::Value*) () #51 0x000000010556bc9d in JS_CallFunctionValue(JSContext*, JSObject*, JS::Value, unsigned int, JS::Value*, JS::Value*) () #52 0x0000000102ef9cb5 in nsXPCWrappedJSClass::CallMethod(nsXPCWrappedJS*, unsigned short, XPTMethodDescriptor const*, nsXPTCMiniVariant*) () #53 0x0000000102ee8074 in nsXPCWrappedJS::CallMethod(unsigned short, XPTMethodDescriptor const*, nsXPTCMiniVariant*) () #54 0x0000000104aac989 in PrepareAndDispatch () #55 0x0000000104aab3eb in SharedStub () #56 0x0000000103d2062d in nsMimeHtmlDisplayEmitter::BroadcastHeaders(nsIMsgHeaderSink*, int, bool) () #57 0x0000000103d20922 in nsMimeHtmlDisplayEmitter::WriteHTMLHeaders(nsACString_internal const&) () #58 0x0000000103d20bc8 in nsMimeHtmlDisplayEmitter::EndHeader(nsACString_internal const&) () #59 0x0000000103cfa870 in mimeEmitterEndHeader () #60 0x0000000103ce1da5 in MimeMessage_write_headers_html(MimeObject*) () #61 0x0000000103ce12ce in MimeMessage_close_headers(MimeObject*) () #62 0x0000000103ce059f in MimeMessage_parse_line(char const*, int, MimeObject*) () #63 0x0000000103cf393a in convert_and_send_buffer(char*, int, bool, int (*)(char*, unsigned int, void*), void*) () #64 0x0000000103cf36e1 in mime_LineBuffer () #65 0x0000000103ce74e5 in MimeObject_parse_buffer(char const*, int, MimeObject*) () #66 0x0000000103cf7734 in mime_display_stream_write () #67 0x0000000103d08ac3 in nsStreamConverter::OnDataAvailable(nsIRequest*, nsISupports*, nsIInputStream*, unsigned long long, unsigned int) () #68 0x0000000103095207 in nsDocumentOpenInfo::OnDataAvailable(nsIRequest*, nsISupports*, nsIInputStream*, unsigned long long, unsigned int) () #69 0x0000000103b5c839 in nsImapCacheStreamListener::OnDataAvailable(nsIRequest*, nsISupports*, nsIInputStream*, unsigned long long, unsigned int) () #70 0x0000000101477123 in nsInputStreamPump::OnStateTransfer() () #71 0x0000000101476a36 in nsInputStreamPump::OnInputStreamReady(nsIAsyncInputStream*) () #72 0x000000010147765f in non-virtual thunk to nsInputStreamPump::OnInputStreamReady(nsIAsyncInputStream*) () #73 0x0000000104a3bad0 in nsInputStreamReadyEvent::Run() () #74 0x0000000104a6ea65 in nsThread::ProcessNextEvent(bool, bool*) () #75 0x00000001049caf3c in NS_ProcessPendingEvents_P(nsIThread*, unsigned int) () #76 0x00000001035fd5cf in nsBaseAppShell::NativeEventCallback() () #77 0x00000001035898dc in nsAppShell::ProcessGeckoEvents(void*) ()
What are the various change hint values involved when this happens? Specifically, in CaptureChange what are aChangeToAssume and ourChange?
aChangeToAssume = (nsChangeHint)0 ourChange = (nsChangeHint)63
(gdb) p *(aContent->GetParent()) $2 = { <nsINode> = { <mozilla::dom::EventTarget> = { <nsIDOMEventTarget> = { <nsISupports> = { _vptr$nsISupports = 0x1074d95d0 }, <No data fields>}, <nsWrapperCache> = { _vptr$nsWrapperCache = 0x1074da048, mWrapperPtrBits = 2 }, <No data fields>}, members of nsINode: mNodeInfo = { mRawPtr = 0x1171efa38 }, mParent = 0x116796b80, mFlags = 28, mBoolFlags = 131086, mNextSibling = 0x0, mPreviousSibling = 0x0, mFirstChild = 0x10c988400, { mPrimaryFrame = 0x11ebc9740, mSubtreeRoot = 0x11ebc9740 }, mSlots = 0x10c988200 }, <No data fields>} (gdb) p *aContent $3 = { <nsINode> = { <mozilla::dom::EventTarget> = { <nsIDOMEventTarget> = { <nsISupports> = { _vptr$nsISupports = 0x107474b90 }, <No data fields>}, <nsWrapperCache> = { _vptr$nsWrapperCache = 0x107475448, mWrapperPtrBits = 2 }, <No data fields>}, members of nsINode: mNodeInfo = { mRawPtr = 0x114aa1918 }, mParent = 0x10c988180, mFlags = 8, mBoolFlags = 131078, mNextSibling = 0x0, mPreviousSibling = 0x0, mFirstChild = 0x0, { mPrimaryFrame = 0x117b804b0, mSubtreeRoot = 0x117b804b0 }, mSlots = 0x10c969800 }, <No data fields>} (gdb)
(gdb) p *(nsTextNode *)aContent $4 = { <mozilla::dom::Text> = { <nsGenericDOMDataNode> = { <nsIContent> = { <nsINode> = { <mozilla::dom::EventTarget> = { <nsIDOMEventTarget> = { <nsISupports> = { _vptr$nsISupports = 0x107474b90 }, <No data fields>}, <nsWrapperCache> = { _vptr$nsWrapperCache = 0x107475448, mWrapperPtrBits = 2 }, <No data fields>}, members of nsINode: mNodeInfo = { mRawPtr = 0x114aa1918 }, mParent = 0x10c988180, mFlags = 8, mBoolFlags = 131078, mNextSibling = 0x0, mPreviousSibling = 0x0, mFirstChild = 0x0, { mPrimaryFrame = 0x117b804b0, mSubtreeRoot = 0x117b804b0 }, mSlots = 0x10c969800 }, <No data fields>}, members of nsGenericDOMDataNode: mRefCnt = { mTagged = 0x10cc25880 }, _mOwningThread = { mThread = 0x100470660 }, mText = { { m2b = 0x0, m1b = 0x0 }, { mAllBits = 0, mState = { mInHeap = 0, mIs2b = 0, mIsBidi = 0, mLength = 0 } } } }, <No data fields>}, <nsIDOMText> = { <nsIDOMCharacterData> = { <nsIDOMNode> = { <nsISupports> = { _vptr$nsISupports = 0x107475460 }, <No data fields>}, <No data fields>}, <No data fields>}, <No data fields>}
> ourChange = (nsChangeHint)63 That's NS_STYLE_HINT_REFLOW....
I added a content-dumper I could call from the debugger (just a static wrapper around nsIContent::List()), and here's what I see in the last couple of layers of the stack: *** This is the node we're getting the exception for (gdb) call ListContent(content) Text@0x110589900 flags=[00000008] primaryframe=0x1177924b0 refcount=2<> (gdb) up #4 0x0000000101921869 in nsFrameManager::ReResolveStyleContext (this=0x113eb8400, aPresContext=0x113eb5000, aFrame=0x117792378, aParentContent=0x110589600, aChangeList=0x7fff5fbeba90, aMinChange=33, aParentFrameHintsNotHandledForDescendants=0, aRestyleHint=0, aRestyleTracker=@0x113eb8500, aDesiredA11yNotifications=nsFrameManager::eSendAllNotifications, aVisibleKidsOfHiddenElement=@0x7fff5fbeb7e0, aTreeMatchContext=@0x7fff5fbeb7f8) at /Users/ireid/tbird/comm-central/mozilla/layout/base/nsFrameManager.cpp:1609 1609 ReResolveStyleContext(aPresContext, child, content, *** This is the parent element of the text (gdb) call ListContent(content) _moz_generated_content_before@0x110589600 state=[10000] flags=[0000001c] primaryframe=0x10ff912c8 refcount=4< Text@0x110589900 flags=[00000008] primaryframe=0x1177924b0 refcount=2<> > (gdb) up #5 0x0000000101921869 in nsFrameManager::ReResolveStyleContext (this=0x113eb8400, aPresContext=0x113eb5000, aFrame=0x10ff912c8, aParentContent=0x116526af0, aChangeList=0x7fff5fbeba90, aMinChange=33, aParentFrameHintsNotHandledForDescendants=0, aRestyleHint=0, aRestyleTracker=@0x113eb8500, aDesiredA11yNotifications=nsFrameManager::eSendAllNotifications, aVisibleKidsOfHiddenElement=@0x7fff5fbeb7e0, aTreeMatchContext=@0x7fff5fbeb7f8) at /Users/ireid/tbird/comm-central/mozilla/layout/base/nsFrameManager.cpp:1609 1609 ReResolveStyleContext(aPresContext, child, content, *** Up another frame, we see the same content (gdb) call ListContent(content) _moz_generated_content_before@0x110589600 state=[10000] flags=[0000001c] primaryframe=0x10ff912c8 refcount=4< Text@0x110589900 flags=[00000008] primaryframe=0x1177924b0 refcount=2<> > (gdb) up #6 0x0000000101921869 in nsFrameManager::ReResolveStyleContext (this=0x113eb8400, aPresContext=0x113eb5000, aFrame=0x11f4b7c28, aParentContent=0x114ca0ca0, aChangeList=0x7fff5fbeba90, aMinChange=33, aParentFrameHintsNotHandledForDescendants=0, aRestyleHint=0, aRestyleTracker=@0x113eb8500, aDesiredA11yNotifications=nsFrameManager::eSendAllNotifications, aVisibleKidsOfHiddenElement=@0x7fff5fbeb7e0, aTreeMatchContext=@0x7fff5fbeb7f8) at /Users/ireid/tbird/comm-central/mozilla/layout/base/nsFrameManager.cpp:1609 1609 ReResolveStyleContext(aPresContext, child, content, *** Up another frame, our content doesn't contain the _moz_generated_content_before element... (gdb) call ListContent(content) XUL* xul:dropmarker@0x116526af0 type="menu-button" class="toolbarbutton-menubutton-dropmarker" xbl:inherits="align,dir,pack,orient,disabled,label,open" label="Followup" state=[10000] flags=[00080144] primaryframe=0x11f4b7c28 refcount=7<> anonymous-children< XUL xul:image@0x116526ee0 class="dropmarker-icon" state=[10000] flags=[00000144] primaryframe=0x11f4bce60 refcount=7<> > I have a file that contains the complete nsIContent::List output for the entire structure that we called ComputeStyleChangeFor() on; it's a few hundred lines, let me know if you want it attached.
What would really be useful here is what styles actually changed to give a reflow hint...
Severity: normal → S3
You need to log in before you can comment on or make changes to this bug.