Closed
Bug 3835
Opened 26 years ago
Closed 26 years ago
incrementally adding a caption crashes
Categories
(Core :: Layout: Tables, defect, P1)
Tracking
()
VERIFIED
FIXED
People
(Reporter: buster, Assigned: karnaze)
References
()
Details
the inner table frame is being set as the target for the caption frame
insertion. This is wrong, it should be the outer table frame. I believe this
is a case of bit-rot. This worked a few months ago. Since then, I know frame
construction code has changed, I wonder if that's the culprit?
Assignee | ||
Updated•26 years ago
|
Status: NEW → ASSIGNED
Assignee | ||
Comment 1•26 years ago
|
||
Frame construction is probably the culprit and there used to be a comment in the
code flagging this condition. Will look at after M3.
Assignee | ||
Updated•26 years ago
|
Status: ASSIGNED → RESOLVED
Closed: 26 years ago
Resolution: --- → FIXED
Assignee | ||
Comment 2•26 years ago
|
||
Tested on WinNT debug.
Updated•26 years ago
|
Whiteboard: Pending test case for verification
Comment 3•26 years ago
|
||
Test case is on a local drive. Could you please forward to me so I can verify?
Assignee | ||
Comment 4•26 years ago
|
||
The test case is located in
mozilla/layout/html/tests/TableIncrementalReflow.html
Assignee | ||
Comment 5•26 years ago
|
||
Here is the test case
<HTML>
<HEAD>
<SCRIPT>
var count = 1;
function genName(prefix) {
return "X" + count++ + "\n";
}
function insertCaption() {
var table = document.getElementsByTagName("TABLE")[0];
var caption = document.createElement("CAPTION", null);
var text = document.createTextNode("here is the new caption text\n");
caption.appendChild(text);
table.appendChild(caption);
}
function deleteCaption() {
var table = document.getElementsByTagName("TABLE")[0];
var caption = document.getElementsByTagName("CAPTION")[0];
table.removeChild(caption);
}
function changeCaptionStyle() {
var caption = document.getElementsByTagName("CAPTION")[0];
caption.align="bottom";
dump("SCRIPT: changed caption align to bottom\n");
}
function changeTableStyle() {
var table = document.getElementsByTagName("TABLE")[0];
table.width="600";
dump("SCRIPT: changed table width to 600\n");
}
function insertColGroup() {
var table = document.getElementsByTagName("TABLE")[0];
var refColGroup = document.getElementsByTagName("COLGROUP")[0];
var colGroup = document.createElement("COLGROUP", null);
colGroup.width=100;
colGroup.span=1;
table.insertBefore(colGroup, refColGroup);
dump("SCRIPT: inserted COLGROUP with span=1 width=200 as first colgroup in
table\n");
}
function appendColGroup() {
var table = document.getElementsByTagName("TABLE")[0];
var colGroup = document.createElement("COLGROUP", null);
colGroup.width=300;
colGroup.span=1;
table.appendChild(colGroup);
dump("SCRIPT: appended COLGROUP with span=1 width=300\n");
}
function deleteColGroup() {
var table = document.getElementsByTagName("TABLE")[0];
var colGroup = document.getElementsByTagName("COLGROUP")[0];
table.removeChild(colGroup);
dump("SCRIPT: deleted first COLGROUP\n");
}
function changeColGroupStyle() {
var colGroup = document.getElementsByTagName("COLGROUP")[0];
colGroup.width="200";
dump("SCRIPT: changed default width for first COLGROUP to 200\n");
}
function insertCol() {
var table = document.getElementsByTagName("TABLE")[0];
var refCol = table.getElementsByTagName("COL")[0];
var col = document.createElement("COL", null);
col.width=200;
col.span=1;
table.insertBefore(col, refCol);
dump("SCRIPT: inserted COL with span=1 width=200 as first col in first col
group\n");
}
function appendCol() {
var table = document.getElementsByTagName("TABLE")[0];
var col = document.createElement("COL", null);
table.appendChild(col);
dump("SCRIPT: appended COL with span=1 width=300\n");
}
function deleteCol() {
var table = document.getElementsByTagName("TABLE")[0];
var col = document.getElementsByTagName("COL")[0];
table.removeChild(col);
dump("SCRIPT: deleted first COL in first COLGROUP\n");
}
function changeColStyle() {
var col = document.getElementsByTagName("COL")[0];
col.width="200";
dump("SCRIPT: changed default width for first COL to 200\n");
}
function insertRowGroup() {
var table = document.getElementsByTagName("TABLE")[0];
var refRowGroup = document.getElementsByTagName("TBODY")[0];
var rowGroup = document.createElement("TBODY", null);
table.insertBefore(rowGroup, refRowGroup);
dump("SCRIPT: inserted empty ROWGROUP as first rowgroup in table\n");
}
function appendRowGroup() {
var table = document.getElementsByTagName("TABLE")[0];
var rowGroup = document.createElement("TBODY", null);
table.appendChild(rowGroup);
dump("SCRIPT: appended empty ROWGROUP\n");
}
function appendRowGroupWithContent() {
dump("\nSCRIPT: starting appendRowGroupWithContent\n");
var table = document.getElementsByTagName("TABLE")[0];
var rowGroup = document.createElement("TBODY", null);
var row = document.createElement("TR", null);
var cell = document.createElement("TD", null);
var text = document.createTextNode("here is content in the cell from the
script appendRowGroupWithContent\n");
cell.appendChild(text);
row.appendChild(cell);
rowGroup.appendChild(row);
table.appendChild(rowGroup);
dump("SCRIPT: appended ROWGROUP with 1 row and 1 cell\n");
}
function deleteRowGroup() {
var table = document.getElementsByTagName("TABLE")[0];
var rowGroup = document.getElementsByTagName("TBODY")[0];
table.removeChild(rowGroup);
dump("SCRIPT: deleted first ROWGROUP\n");
}
function changeRowGroupStyle() {
var rowGroup = document.getElementsByTagName("TBODY")[0];
rowGroup.align="right";
dump("SCRIPT: changed default align for first ROWGROUP to right\n");
}
function insertRow() {
var rg = document.getElementsByTagName("TBODY")[0];
var refRow = document.getElementsByTagName("TR")[0];
var row = document.createElement("TR", null);
rg.insertBefore(row, refRow);
dump("SCRIPT: inserted empty ROW as first row in first rowgroup in table\n");
}
function appendRow() {
var rg = document.getElementsByTagName("TBODY")[0];
var row = document.createElement("TR", null);
rg.appendChild(row);
dump("SCRIPT: appended empty ROW in first ROWGROUP\n");
}
function appendRowWithContent() {
dump("\nSCRIPT: starting appendRowWithContent\n");
var rg = document.getElementsByTagName("TBODY")[0];
var row = document.createElement("TR", null);
var cell = document.createElement("TD", null);
var text = document.createTextNode(genName());
cell.appendChild(text);
row.appendChild(cell);
rg.appendChild(row);
dump("SCRIPT: appended ROW with 1 cell in first ROWGROUP\n");
}
function insertRowWithContent() {
dump("\nSCRIPT: starting appendRowWithContent\n");
var rg = document.getElementsByTagName("TBODY")[0];
var cell = document.createElement("TD", null);
var text = document.createTextNode(genName());
cell.appendChild(text);
row = rg.insertRow(0);
row.appendChild(cell);
dump("SCRIPT: inserted ROW with 1 cell in first ROWGROUP\n");
}
function setRowIndex() {
dump("\nSCRIPT: starting setRowIndex\n");
var row = document.getElementsByTagName("TR")[0];
row.rowIndex = 99;
dump("SCRIPT: ending setRowindex - placed 1st row at end\n");
}
function setSectionRowIndex() {
dump("\nSCRIPT: starting setSectionRowIndex\n");
var row = document.getElementsByTagName("TR")[0];
row.sectionRowIndex = 99;
dump("SCRIPT: ending setSectionRowindex - placed 1st row at end\n");
}
function deleteRow() {
var rg = document.getElementsByTagName("TBODY")[0];
//var row = document.getElementsByTagName("TR")[0];
rg.deleteRow(0);
dump("SCRIPT: deleted first ROW in first ROWGROUP\n");
}
function changeRowStyle() {
var row = document.getElementsByTagName("TR")[0];
row.vAlign="top";
dump("SCRIPT: changed default align for first ROW to right\n");
}
// why doesn't this cell show up
function insertCellNew() {
var row = document.getElementsByTagName("TR")[0];
var cell = row.insertCell(0);
var text = document.createTextNode(genName());
cell.appendChild(text);
dump("SCRIPT: inserted CELL as first cell in first row\n");
}
function insertCell() {
var row = document.getElementsByTagName("TR")[0];
var refCell = document.getElementsByTagName("TD")[0];
var cell = document.createElement("TD", null);
var text = document.createTextNode(genName());
cell.colSpan=2;
cell.appendChild(text);
row.insertBefore(cell, refCell);
dump("SCRIPT: inserted CELL as first cell in first row\n");
}
function appendCell() {
var row = document.getElementsByTagName("TR")[0];
var cell = document.createElement("TD", null);
var text = document.createTextNode(genName());
cell.appendChild(text);
row.appendChild(cell);
dump("SCRIPT: appended CELL in first ROW\n");
}
function deleteCell() {
var row = document.getElementsByTagName("TR")[0];
row.deleteCell(0);
dump("SCRIPT: deleted first CELL in first ROW\n");
}
function deleteCellBack() {
var row = document.getElementsByTagName("TR")[0];
var cell = document.getElementsByTagName("TD")[0];
row.removeChild(cell);
dump("SCRIPT: deleted first CELL in first ROW\n");
}
function changeCellStyle() {
var cell = document.getElementsByTagName("TD")[0];
cell.width=400;
dump("SCRIPT: changed width for first CELL to 400\n");
}
function setCellIndex() {
dump("\nSCRIPT: starting setCellIndex\n");
var cell = document.getElementsByTagName("TD")[0];
cell.cellIndex = 99;
dump("SCRIPT: ending setCellIndex - placed 1st cell at end\n");
}
function AddALot() {
dump("\nSCRIPT: starting AddALot\n");
var table = document.getElementsByTagName("TABLE")[0];
var rowGroup = document.createElement("TBODY", null);
var row = document.createElement("TR", null);
var row1 = document.createElement("TR", null);
var cell1 = document.createElement("TD", null);
var cell2 = document.createElement("TD", null);
var cell3 = document.createElement("TD", null);
var cell4 = document.createElement("TD", null);
var text1 = document.createTextNode("cell1\n");
var text2 = document.createTextNode("cell2\n");
var text3 = document.createTextNode("cell3 has the most content, and will be
the tallest cell in the row\n");
var text4 = document.createTextNode("cell4\n");
cell1.appendChild(text1); cell2.appendChild(text2);
cell3.appendChild(text3); cell4.appendChild(text4);
row.appendChild(cell3); row.appendChild(cell4);
row.insertBefore(cell2, cell3); row.insertBefore(cell1, cell2);
row1.appendChild(cell2); row1.appendChild(cell1);
row1.insertBefore(cell3, cell2); row1.insertBefore(cell4, cell3);
rowGroup.appendChild(row);
rowGroup.appendChild(row);
rowGroup.appendChild(row1);
rowGroup.appendChild(row1);
table.appendChild(rowGroup);
dump("SCRIPT: finished adding\n");
}
</SCRIPT>
</HEAD>
<BODY>
delete removes the first object of [type].
<table width=150 border>
<tbody>
<tr>
<td>existing cell</td>
</tr>
</tbody>
</table>
<p>
<form>
<INPUT TYPE="button" NAME="Ins Caption" VALUE="InsertCaption"
onClick="insertCaption()" width=100>
<INPUT TYPE="button" NAME="Del Caption" VALUE="DeleteCaption"
onClick="deleteCaption()" width=100>
<br>
<INPUT TYPE="button" NAME="Ins ColGroup" VALUE="InsertCG"
onClick="insertColGroup()" width=100>
<INPUT TYPE="button" NAME="App ColGroup" VALUE="AppendCG"
onClick="appendColGroup()" width=100>
<INPUT TYPE="button" NAME="Del ColGroup" VALUE="DeleteCG"
onClick="deleteColGroup()" width=100>
<br>
<INPUT TYPE="button" NAME="Ins Col" VALUE="InsertCol" onClick="insertCol()"
width=100>
<INPUT TYPE="button" NAME="App Col" VALUE="AppendCol" onClick="appendCol()"
width=100>
<INPUT TYPE="button" NAME="Del Col" VALUE="DeleteCol" onClick="deleteCol()"
width=100>
<br>
<INPUT TYPE="button" NAME="Ins RowGroup" VALUE="InsertRG"
onClick="insertRowGroup()" width=100>
<INPUT TYPE="button" NAME="App RowGroup" VALUE="AppendRG"
onClick="appendRowGroup()" width=100>
<INPUT TYPE="button" NAME="Del RowGroup" VALUE="DeleteRG"
onClick="deleteRowGroup()" width=100>
<INPUT TYPE="button" NAME="App RowGroup with content" VALUE="AppendRG with
content" onClick="appendRowGroupWithContent()" width=100>
<br>
<INPUT TYPE="button" NAME="Ins Row" VALUE="InsertRow" onClick="insertRow()"
width=100>
<INPUT TYPE="button" NAME="App Row" VALUE="AppendRow" onClick="appendRow()"
width=100>
<INPUT TYPE="button" NAME="Del Row" VALUE="DeleteRow" onClick="deleteRow()"
width=100>
<INPUT TYPE="button" NAME="App Row with content" VALUE="AppendRow with content"
onClick="appendRowWithContent()" width=100>
<INPUT TYPE="button" NAME="App Row with content" VALUE="InsertRow with content"
onClick="insertRowWithContent()" width=100>
<INPUT TYPE="button" NAME="Set Row Index" VALUE="Set Row Index"
onClick="setRowIndex()">
<INPUT TYPE="button" NAME="Set Section Row Index" VALUE="Set Section Row Index"
onClick="setSectionRowIndex()">
<br>
<INPUT TYPE="button" NAME="Ins Cell" VALUE="InsertCell" onClick="insertCell()"
width=100>
<INPUT TYPE="button" NAME="App Cell" VALUE="AppendCell" onClick="appendCell()"
width=100>
<INPUT TYPE="button" NAME="Del Cell" VALUE="DeleteCell" onClick="deleteCell()"
width=100>
<INPUT TYPE="button" NAME="Set Cell Index" VALUE="Set Cell Index"
onClick="setCellIndex()" width=100>
<br>
<INPUT TYPE="button" NAME="Add a lot" VALUE="AddALot" onClick="AddALot()"
width=100>
<br>
<INPUT TYPE="button" NAME="Change Table Style" VALUE="ChangeTableStyle"
onClick="changeTableStyle()" width=100>
<INPUT TYPE="button" NAME="Change Caption Style" VALUE="ChangeCaptionStyle"
onClick="changeCaptionStyle()" width=100>
<INPUT TYPE="button" NAME="Change ColGroup Style" VALUE="ChangeColGroupStyle"
onClick="changeColGroupStyle()" width=100>
<INPUT TYPE="button" NAME="Change Col Style" VALUE="ChangeColStyle"
onClick="changeColStyle()" width=100>
<INPUT TYPE="button" NAME="Change RowGroup Style" VALUE="ChangeRowGroupStyle"
onClick="changeRowGroupStyle()" width=100>
<INPUT TYPE="button" NAME="Change Row Style" VALUE="ChangeRowStyle"
onClick="changeRowStyle()" width=100>
<INPUT TYPE="button" NAME="Change Cell Style" VALUE="ChangeCellStyle"
onClick="changeCellStyle()" width=100>
</form>
</BODY></HTML>
Updated•26 years ago
|
Whiteboard: Pending test case for verification → 3/29: Pending test case for verification
Updated•26 years ago
|
Status: RESOLVED → VERIFIED
Whiteboard: 3/29: Pending test case for verification
Comment 6•26 years ago
|
||
Using 3/26 build, verifying bug fixed. No crashes.
You need to log in
before you can comment on or make changes to this bug.
Description
•