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)
Tracking
(Not tracked)
NEW
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*) ()
![]() |
||
Comment 1•12 years ago
|
||
What are the various change hint values involved when this happens? Specifically, in CaptureChange what are aChangeToAssume and ourChange?
Reporter | ||
Comment 2•12 years ago
|
||
aChangeToAssume = (nsChangeHint)0
ourChange = (nsChangeHint)63
Reporter | ||
Comment 3•12 years ago
|
||
(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)
Reporter | ||
Comment 4•12 years ago
|
||
(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>}
![]() |
||
Comment 5•12 years ago
|
||
> ourChange = (nsChangeHint)63
That's NS_STYLE_HINT_REFLOW....
Reporter | ||
Comment 6•12 years ago
|
||
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.
![]() |
||
Comment 7•12 years ago
|
||
What would really be useful here is what styles actually changed to give a reflow hint...
Updated•3 years ago
|
Severity: normal → S3
You need to log in
before you can comment on or make changes to this bug.
Description
•