Skip to content

Commit

Permalink
Make HTMLEditUtils::GetPreviousEditablePoint and `HTMLEditUtils::Ge…
Browse files Browse the repository at this point in the history
…tNextEditablePoint` check ancestor limiter before getting a sibling of ancestor

They check ancestor limiter when they are climbing up the DOM tree if and only
if the ancestor does not have a sibling.  However, this causes moving into
a sibling of the ancestor limiter.

Differential Revision: https://phabricator.services.mozilla.com/D192528

bugzilla-url: https://bugzilla.mozilla.org/show_bug.cgi?id=1860210
gecko-commit: 08912004c5957a0f988b54b079ef49760d3a02e3
gecko-reviewers: m_kato
  • Loading branch information
masayuki-nakano authored and moz-wptsync-bot committed Nov 10, 2023
1 parent 8eb35f3 commit 053846d
Showing 1 changed file with 66 additions and 0 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -2062,4 +2062,70 @@
checkGetTargetRangesOfInputOnDeleteSomething();
}, 'Meta + Backspace at "<p> abc[] def</p>"');

// If editing host is nested, editing in the nested one shouldn't cause
// target ranges extended to outside of it.
promise_test(async t => {
const innerHTML = "<div contenteditable=\"false\"><div contenteditable=\"\"><p><br></p></div></div>";
initializeTest(innerHTML);
const p = gEditor.querySelector("p");
const innerEditingHost = p.parentNode;
document.activeElement?.blur();
p.parentNode.focus();
gSelection.collapse(p, 0);
await sendBackspaceKey();
if (gEditor.innerHTML == innerHTML) {
checkGetTargetRangesOfBeforeinputOnDeleteSomething({
startContainer: p,
startOffset: 0,
endContainer: p,
endOffset: 0,
});
checkGetTargetRangesOfInputOnDoNothing();
} else {
checkEditorContentResultAsSubTest(
"<div contenteditable=\"false\"><div contenteditable=\"\"><br></div></div>",
t.name
);
checkGetTargetRangesOfBeforeinputOnDeleteSomething({
startContainer: innerEditingHost,
startOffset: 0,
endContainer: p,
endOffset: 1,
});
checkGetTargetRangesOfInputOnDeleteSomething();
}
}, 'Backspace at "<div contenteditable="false"><div contenteditable=""><p>{}<br></p></div></div>');

promise_test(async t => {
const innerHTML = "<div contenteditable=\"false\">\n <div contenteditable=\"\"><p><br></p></div></div>";
initializeTest(innerHTML);
const p = gEditor.querySelector("p");
const innerEditingHost = p.parentNode;
document.activeElement?.blur();
p.parentNode.focus();
gSelection.collapse(p, 0);
await sendBackspaceKey();
if (gEditor.innerHTML == innerHTML) {
checkGetTargetRangesOfBeforeinputOnDeleteSomething({
startContainer: p,
startOffset: 0,
endContainer: p,
endOffset: 0,
});
checkGetTargetRangesOfInputOnDoNothing();
} else {
checkEditorContentResultAsSubTest(
"<div contenteditable=\"false\">\n <div contenteditable=\"\"><br></div></div>",
t.name
);
checkGetTargetRangesOfBeforeinputOnDeleteSomething({
startContainer: innerEditingHost,
startOffset: 0,
endContainer: p,
endOffset: 1,
});
checkGetTargetRangesOfInputOnDeleteSomething();
}
}, 'Backspace at "<div contenteditable="false">\n <div contenteditable=""><p>{}<br></p></div></div>');

</script>

0 comments on commit 053846d

Please sign in to comment.