Closed
Bug 300538
Opened 19 years ago
Closed 19 years ago
[FIXr]Asserts on subframe navigation with bfcache
Categories
(Core :: DOM: Navigation, defect, P1)
Tracking
()
RESOLVED
FIXED
mozilla1.8beta4
People
(Reporter: bzbarsky, Assigned: bzbarsky)
References
()
Details
Attachments
(1 file, 1 obsolete file)
1.68 KB,
patch
|
bryner
:
review+
roc
:
superreview+
asa
:
approval1.8b4+
|
Details | Diff | Splinter Review |
STEPS TO REPRODUCE: Load testcase in URL bar and follow directions ACTUAL RESULTS: ###!!! ASSERTION: error in InsertChild: 'newRootView->GetNextSibling() == rootViewSibling', file ../../../mozilla/docshell/base/nsDocShell.cpp, line 5255 EXPECTED RESULTS: no asserts I suspect the problem here is that we're passing PR_TRUE for the aAfter parameter to InsertChild, but since the sibling we're passing is the old nextSibling, we want to pass PR_FALSE...
![]() |
Assignee | |
Updated•19 years ago
|
Blocks: blazinglyfastback
![]() |
Assignee | |
Comment 1•19 years ago
|
||
Attachment #189121 -
Flags: superreview?(bryner)
Attachment #189121 -
Flags: review?(bryner)
Comment 2•19 years ago
|
||
Comment on attachment 189121 [details] [diff] [review] This does seem to fix it... I don't think this is right. rootViewSibling is what we want the _next_ sibling of newRootView to be. The aAfter parameter of InsertChild refers to the document order, so passing true means that the view will be inserted _before_ rootViewSibling, which is what we want. The naming gets a little confusing, so please double-check me on that. At this point, though, I'm guessing the assertion is caused by something else...
Attachment #189121 -
Flags: superreview?(bryner)
Attachment #189121 -
Flags: superreview-
Attachment #189121 -
Flags: review?(bryner)
Attachment #189121 -
Flags: review-
![]() |
Assignee | |
Comment 3•19 years ago
|
||
Hmm... roc, are views stored in document order, or reversed? The comment on nsIView::GetFirstChild indicates the former, while the comments in nsViewManager::InsertChild indicate the latter. In any case, the case we're looking at here (in that testcase) is that rootViewSibling is null. So we'll hit the following code in nsViewManager: 2649 if (nsnull == aSibling) { 2650 if (aAfter) { 2651 // insert at end of document order, i.e., before first view 2652 // this is the common case, by far 2653 parent->InsertChild(child, nsnull); This inserts |child| as the mFirstChild of |parent|; if |parent| had any children, then child->GetNextSibling() will be non-null after this call, which is what triggers our assert. Perhaps the assert itself is what's wrong? If views are stored in reverse order, then I'd expect that rootViewSibling->GetNextSibling() would be the new root view...
(In reply to comment #3) > Hmm... roc, are views stored in document order, or reversed? Reversed. > The comment on > nsIView::GetFirstChild indicates the former, while the comments in > nsViewManager::InsertChild indicate the latter. In any case, the case we're > looking at here (in that testcase) is that rootViewSibling is null. So we'll > hit the following code in nsViewManager: > > 2649 if (nsnull == aSibling) { > 2650 if (aAfter) { > 2651 // insert at end of document order, i.e., before first view > 2652 // this is the common case, by far > 2653 parent->InsertChild(child, nsnull); > > This inserts |child| as the mFirstChild of |parent|; if |parent| had any > children, then child->GetNextSibling() will be non-null after this call, which > is what triggers our assert. InsertChild(.., child, sib, PR_TRUE) inserts the child after sib in content order, which is before sib in view order. BUT when sib is null it inserts at the end of the the document order, i.e., first in view order. So I think when oldRootSibling is null, the old root as at the end of the view list --- last in content order --- and you want to call InsertChild(.., child, nsnull, PR_FALSE) in that case. Sorry that this API is a broken. > Perhaps the assert itself is what's wrong? If views are stored in reverse > order, then I'd expect that rootViewSibling->GetNextSibling() would be the new > root view...
![]() |
Assignee | |
Comment 5•19 years ago
|
||
![]() |
Assignee | |
Updated•19 years ago
|
Attachment #189121 -
Attachment is obsolete: true
![]() |
Assignee | |
Updated•19 years ago
|
Attachment #189143 -
Flags: superreview?(roc)
Attachment #189143 -
Flags: review?(bryner)
Attachment #189143 -
Flags: superreview?(roc) → superreview+
Updated•19 years ago
|
Attachment #189143 -
Flags: review?(bryner) → review+
![]() |
Assignee | |
Comment 6•19 years ago
|
||
Comment on attachment 189143 [details] [diff] [review] Patch per roc's explanation Requesting approval for 1.8b4.
Attachment #189143 -
Flags: approval1.8b4?
![]() |
Assignee | |
Updated•19 years ago
|
Assignee: bryner → bzbarsky
Priority: -- → P1
Summary: Asserts on subframe navigation with bfcache → [FIXr]Asserts on subframe navigation with bfcache
Target Milestone: --- → mozilla1.8beta4
Updated•19 years ago
|
Attachment #189143 -
Flags: approval1.8b4? → approval1.8b4+
![]() |
Assignee | |
Comment 7•19 years ago
|
||
Fixed.
Status: NEW → RESOLVED
Closed: 19 years ago
Resolution: --- → FIXED
You need to log in
before you can comment on or make changes to this bug.
Description
•