Bug 868906 - Make GetChildFrameContainingOffset() stable. r=roc

This commit is contained in:
Mats Palmgren 2013-05-07 20:48:59 +02:00
Родитель 92268718c4
Коммит 15eb2cc275
4 изменённых файлов: 63 добавлений и 0 удалений

Просмотреть файл

@ -797,6 +797,8 @@ nsDisplayListBuilder::EnterPresShell(nsIFrame* aReferenceFrame,
nsRefPtr<nsCaret> caret = state->mPresShell->GetCaret();
state->mCaretFrame = caret->GetCaretFrame();
NS_ASSERTION(state->mCaretFrame == caret->GetCaretFrame(),
"GetCaretFrame() is unstable");
if (state->mCaretFrame) {
// Check if the dirty rect intersects with the caret's dirty rect.

Просмотреть файл

@ -0,0 +1,54 @@
<!DOCTYPE html>
<html class="reftest-wait">
<head>
<meta charset="UTF-8">
<script>
function boom()
{
var root = document.documentElement;
while(root.firstChild) { root.removeChild(root.firstChild); }
root.appendChild(document.createElement("body"));
root.offsetHeight;
var bigText = document.createTextNode("");
bigText.data += "\u202D";
bigText.data += "A";
bigText.data += "\x1C";
bigText.data += "\u062A";
bigText.data += "E";
bigText.data += "\u062E";
bigText.data += " ";
bigText.data += "\u202D";
bigText.data += "X";
bigText.data += "\x1C";
bigText.data += "Y";
root.appendChild(bigText);
var smallText = document.createTextNode("Z");
root.appendChild(smallText);
root.focus();
function del()
{
var range = document.createRange();
range.setStart(root, 0);
range.setEnd(bigText, bigText.data.length);
range.deleteContents();
}
del();
function finish() {
document.documentElement.removeAttribute('class');
}
setTimeout(finish, 0);
}
</script>
</head>
<body onload="boom();"></body>
</html>

Просмотреть файл

@ -461,4 +461,5 @@ load 849603.html
test-pref(layout.css.flexbox.enabled,true) load 851396-1.html
test-pref(layout.css.flexbox.enabled,true) load 854263-1.html
test-pref(layout.css.flexbox.enabled,true) load 862947-1.html
needs-focus pref(accessibility.browsewithcaret,true) load 868906.html
test-pref(layout.css.flexbox.enabled,true) load 866547-1.html

Просмотреть файл

@ -6345,6 +6345,9 @@ nsTextFrame::GetChildFrameContainingOffset(int32_t aContentOffset,
if (aContentOffset == next->GetContentOffset()) {
if (aHint) {
f = next;
if (f->GetContentLength() == 0) {
continue; // use the last of the empty frames with this offset
}
}
break;
}
@ -6358,6 +6361,9 @@ nsTextFrame::GetChildFrameContainingOffset(int32_t aContentOffset,
if (aContentOffset == f->GetContentOffset()) {
if (!aHint) {
f = prev;
if (f->GetContentLength() == 0) {
continue; // use the first of the empty frames with this offset
}
}
break;
}