Backed out 2 changesets (bug 1384606) for causing failures on test_atcaretoffset.html CLOSED TREE

Backed out changeset bfc8cf25efac (bug 1384606)
Backed out changeset b3c0fd32af16 (bug 1384606)
This commit is contained in:
Norisz Fay 2023-03-14 07:25:51 +02:00
Родитель e9c97c71d7
Коммит 5349e0db4d
5 изменённых файлов: 1 добавлений и 427 удалений

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

@ -140,8 +140,6 @@ support-files = bug1448730.html
[test_bug1550869_video.html]
[test_bug1714640.html]
[test_bug1756118.html]
[test_caret_browsing_around_form_controls.html]
skip-if = toolkit == 'android'
[test_dynamic_toolbar_max_height.html]
support-files = file_dynamic_toolbar_max_height.html
[test_emulateMedium.html]

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

@ -1,379 +0,0 @@
<!doctype html>
<html>
<head>
<meta charset="utf-8">
<script src="/tests/SimpleTest/SimpleTest.js"></script>
<script src="/tests/SimpleTest/EventUtils.js"></script>
<link rel="stylesheet" href="/tests/SimpleTest/test.css">
<script>
"use strict";
SimpleTest.waitForExplicitFinish();
SimpleTest.waitForFocus(async () => {
await SpecialPowers.pushPrefEnv({
set:[
["accessibility.browsewithcaret", true],
],
});
(function test_move_caret_from_before_input_text() {
info("Starting test_move_caret_from_before_input_text...");
document.body.innerHTML = '<div>abc<input value="def">ghi</div>';
const input = document.querySelector("input");
const textBefore = input.previousSibling;
getSelection().collapse(textBefore, textBefore.length);
synthesizeKey("KEY_ArrowRight");
ok(
getSelection().isCollapsed,
"test_move_caret_from_before_input_text: selection should be collapsed after moving caret"
);
is(
getSelection().focusNode,
input.nextSibling,
"test_move_caret_from_before_input_text: caret should be moved to text node after the <input>"
);
is(
getSelection().focusOffset,
0,
"test_move_caret_from_before_input_text: caret should be moved to start of the text node"
);
})();
(function test_move_caret_from_after_input_text() {
info("Starting test_move_caret_from_after_input_text...");
document.body.innerHTML = '<div>abc<input value="def">ghi</div>';
const input = document.querySelector("input");
getSelection().collapse(input.nextSibling, 0);
synthesizeKey("KEY_ArrowLeft");
ok(
getSelection().isCollapsed,
"test_move_caret_from_after_input_text: selection should be collapsed after moving caret"
);
is(
getSelection().focusNode,
input.previousSibling,
"test_move_caret_from_after_input_text: caret should be moved to text node before the <input>"
);
is(
getSelection().focusOffset,
input.previousSibling.length,
"test_move_caret_from_after_input_text: caret should be moved to end of the text node"
);
})();
(function test_move_caret_from_before_double_input_text() {
info("Starting test_move_caret_from_before_double_input_text...");
document.body.innerHTML = '<div>abc<input value="def"><input value="ghi">jkl</div>';
const firstInput = document.querySelector("input");
const secondInput = firstInput.nextSibling;
const textBefore = firstInput.previousSibling;
getSelection().collapse(textBefore, textBefore.length);
synthesizeKey("KEY_ArrowRight");
ok(
getSelection().isCollapsed,
"test_move_caret_from_before_double_input_text: selection should be collapsed after moving caret"
);
is(
getSelection().focusNode,
secondInput.nextSibling,
"test_move_caret_from_before_double_input_text: caret should be moved to text node after the second <input> (container)"
);
is(
getSelection().focusOffset,
0,
"test_move_caret_from_before_double_input_text: caret should be moved to text node after the second <input> (offset)"
);
})();
(function test_move_caret_from_after_double_input_text() {
info("Starting test_move_caret_from_after_double_input_text...");
document.body.innerHTML = '<div>abc<input value="def"><input value="ghi">jkl</div>';
const firstInput = document.querySelector("input");
const secondInput = firstInput.nextSibling;
getSelection().collapse(secondInput.nextSibling, 0);
synthesizeKey("KEY_ArrowLeft");
ok(
getSelection().isCollapsed,
"test_move_caret_from_after_double_input_text: selection should be collapsed after moving caret"
);
is(
getSelection().focusNode,
firstInput.previousSibling,
"test_move_caret_from_after_double_input_text: caret should be moved to text node before the first <input> (container)"
);
is(
getSelection().focusOffset,
firstInput.previousSibling.length,
"test_move_caret_from_after_double_input_text: caret should be moved to text node before the first <input> (offset)"
);
})();
(function test_move_caret_from_before_input_button() {
info("Starting test_move_caret_from_before_input_button...");
document.body.innerHTML = '<div>abc<input type="button" value="def">ghi</div>';
const input = document.querySelector("input");
const textBefore = input.previousSibling;
getSelection().collapse(textBefore, textBefore.length);
synthesizeKey("KEY_ArrowRight");
ok(
getSelection().isCollapsed,
"test_move_caret_from_before_input_button: selection should be collapsed after moving caret"
);
is(
getSelection().focusNode,
input.nextSibling,
"test_move_caret_from_before_input_button: caret should be moved to text node after the <input>"
);
is(
getSelection().focusOffset,
0,
"test_move_caret_from_before_input_button: caret should be moved to start of the text node"
);
})();
(function test_move_caret_from_after_input_button() {
info("Starting test_move_caret_from_after_input_button...");
document.body.innerHTML = '<div>abc<input type="button" value="def">ghi</div>';
const input = document.querySelector("input");
getSelection().collapse(input.nextSibling, 0);
synthesizeKey("KEY_ArrowLeft");
ok(
getSelection().isCollapsed,
"test_move_caret_from_after_input_button: selection should be collapsed after moving caret"
);
is(
getSelection().focusNode,
input.previousSibling,
"test_move_caret_from_after_input_button: caret should be moved to text node before the <input>"
);
is(
getSelection().focusOffset,
input.previousSibling.length,
"test_move_caret_from_after_input_button: caret should be moved to end of the text node"
);
})();
(function test_move_caret_from_before_double_input_button() {
info("Starting test_move_caret_from_before_double_input_button...");
document.body.innerHTML = '<div>abc<input type="button" value="def"><input type="button" value="ghi">jkl</div>';
const firstInput = document.querySelector("input");
const secondInput = firstInput.nextSibling;
const textBefore = firstInput.previousSibling;
getSelection().collapse(textBefore, textBefore.length);
synthesizeKey("KEY_ArrowRight");
ok(
getSelection().isCollapsed,
"test_move_caret_from_before_double_input_button: selection should be collapsed after moving caret"
);
is(
getSelection().focusNode,
secondInput.nextSibling,
"test_move_caret_from_before_double_input_button: caret should be moved to text node after the second <input> (container)"
);
is(
getSelection().focusOffset,
0,
"test_move_caret_from_before_double_input_button: caret should be moved to text node after the second <input> (offset)"
);
})();
(function test_move_caret_from_after_double_input_button() {
info("Starting test_move_caret_from_after_double_input_button...");
document.body.innerHTML = '<div>abc<input type="button" value="def"><input type="button" value="ghi">jkl</div>';
const firstInput = document.querySelector("input");
const secondInput = firstInput.nextSibling;
getSelection().collapse(secondInput.nextSibling, 0);
synthesizeKey("KEY_ArrowLeft");
ok(
getSelection().isCollapsed,
"test_move_caret_from_after_double_input_button: selection should be collapsed after moving caret"
);
is(
getSelection().focusNode,
firstInput.previousSibling,
"test_move_caret_from_after_double_input_button: caret should be moved to text node before the first <input> (container)"
);
is(
getSelection().focusOffset,
firstInput.previousSibling.length,
"test_move_caret_from_after_double_input_button: caret should be moved to text node before the first <input> (offset)"
);
})();
(function test_move_caret_from_before_button() {
info("Starting test_move_caret_from_before_button...");
document.body.innerHTML = '<div>abc<button>def</button>ghi</div>';
const button = document.querySelector("button");
const textBefore = button.previousSibling;
getSelection().collapse(textBefore, textBefore.length);
synthesizeKey("KEY_ArrowRight");
ok(
getSelection().isCollapsed,
"test_move_caret_from_before_button: selection should be collapsed after moving caret"
);
is(
getSelection().focusNode,
button.nextSibling,
"test_move_caret_from_before_button: caret should be moved to text node after the <button>"
);
is(
getSelection().focusOffset,
0,
"test_move_caret_from_before_button: caret should be moved to start of the text node"
);
})();
(function test_move_caret_from_after_button() {
info("Starting test_move_caret_from_after_button...");
document.body.innerHTML = '<div>abc<button>def</button>ghi</div>';
const button = document.querySelector("button");
getSelection().collapse(button.nextSibling, 0);
synthesizeKey("KEY_ArrowLeft");
ok(
getSelection().isCollapsed,
"test_move_caret_from_after_button: selection should be collapsed after moving caret"
);
is(
getSelection().focusNode,
button.previousSibling,
"test_move_caret_from_after_button: caret should be moved to text node before the <button>"
);
is(
getSelection().focusOffset,
button.previousSibling.length,
"test_move_caret_from_after_button: caret should be moved to end of the text node"
);
})();
(function test_move_caret_from_before_double_button() {
info("Starting test_move_caret_from_before_double_button...");
document.body.innerHTML = '<div>abc<button>def</button><button>ghi</button>jkl</div>';
const firstButton = document.querySelector("button");
const secondButton = firstButton.nextSibling;
const textBefore = firstButton.previousSibling;
getSelection().collapse(textBefore, textBefore.length);
synthesizeKey("KEY_ArrowRight");
ok(
getSelection().isCollapsed,
"test_move_caret_from_before_double_button: selection should be collapsed after moving caret"
);
is(
getSelection().focusNode,
secondButton.nextSibling,
"test_move_caret_from_before_double_button: caret should be moved to text node after the second <button> (container)"
);
is(
getSelection().focusOffset,
0,
"test_move_caret_from_before_double_button: caret should be moved to text node after the second <button> (offset)"
);
})();
(function test_move_caret_from_after_double_button() {
info("Starting test_move_caret_from_after_double_button...");
document.body.innerHTML = '<div>abc<button>def</button><button>ghi</button>jkl</div>';
const firstButton = document.querySelector("button");
const secondButton = firstButton.nextSibling;
getSelection().collapse(secondButton.nextSibling, 0);
synthesizeKey("KEY_ArrowLeft");
ok(
getSelection().isCollapsed,
"test_move_caret_from_after_double_button: selection should be collapsed after moving caret"
);
is(
getSelection().focusNode,
firstButton.previousSibling,
"test_move_caret_from_after_double_button: caret should be moved to text node before the first <button> (container)"
);
is(
getSelection().focusOffset,
firstButton.previousSibling.length,
"test_move_caret_from_after_double_button: caret should be moved to text node before the first <button> (offset)"
);
})();
(function test_move_caret_from_before_textarea() {
info("Starting test_move_caret_from_before_textarea...");
document.body.innerHTML = '<div>abc<textarea>def</textarea>ghi</div>';
const textarea = document.querySelector("textarea");
const textBefore = textarea.previousSibling;
getSelection().collapse(textBefore, textBefore.length);
synthesizeKey("KEY_ArrowRight");
ok(
getSelection().isCollapsed,
"test_move_caret_from_before_textarea: selection should be collapsed after moving caret"
);
is(
getSelection().focusNode,
textarea.nextSibling,
"test_move_caret_from_before_textarea: caret should be moved to text node after the <textarea>"
);
is(
getSelection().focusOffset,
0,
"test_move_caret_from_before_textarea: caret should be moved to start of the text node"
);
})();
(function test_move_caret_from_after_textarea() {
info("Starting test_move_caret_from_after_textarea...");
document.body.innerHTML = '<div>abc<textarea>def</textarea>ghi</div>';
const textarea = document.querySelector("textarea");
getSelection().collapse(textarea.nextSibling, 0);
synthesizeKey("KEY_ArrowLeft");
ok(
getSelection().isCollapsed,
"test_move_caret_from_after_textarea: selection should be collapsed after moving caret"
);
is(
getSelection().focusNode,
textarea.previousSibling,
"test_move_caret_from_after_textarea: caret should be moved to text node before the <textarea>"
);
is(
getSelection().focusOffset,
textarea.previousSibling.length,
"test_move_caret_from_after_textarea: caret should be moved to end of the text node"
);
})();
(function test_move_caret_from_before_double_textarea() {
info("Starting test_move_caret_from_before_double_textarea...");
document.body.innerHTML = '<div>abc<textarea>def</textarea><textarea>ghi</textarea>jkl</div>';
const firstTextarea = document.querySelector("textarea");
const secondTextarea = firstTextarea.nextSibling;
const textBefore = firstTextarea.previousSibling;
getSelection().collapse(textBefore, textBefore.length);
synthesizeKey("KEY_ArrowRight");
ok(
getSelection().isCollapsed,
"test_move_caret_from_before_double_textarea: selection should be collapsed after moving caret"
);
is(
getSelection().focusNode,
secondTextarea.nextSibling,
"test_move_caret_from_before_double_textarea: caret should be moved to text node after the second <textarea> (container)"
);
is(
getSelection().focusOffset,
0,
"test_move_caret_from_before_double_textarea: caret should be moved to text node after the second <textarea> (offset)"
);
})();
(function test_move_caret_from_after_double_textarea() {
info("Starting test_move_caret_from_after_double_textarea...");
document.body.innerHTML = '<div>abc<textarea>def</textarea><textarea>ghi</textarea>jkl</div>';
const firstTextarea = document.querySelector("textarea");
const secondTextarea = firstTextarea.nextSibling;
getSelection().collapse(secondTextarea.nextSibling, 0);
synthesizeKey("KEY_ArrowLeft");
ok(
getSelection().isCollapsed,
"test_move_caret_from_after_double_textarea: selection should be collapsed after moving caret"
);
is(
getSelection().focusNode,
firstTextarea.previousSibling,
"test_move_caret_from_after_double_textarea: caret should be moved to text node before the first <textarea> (container)"
);
is(
getSelection().focusOffset,
firstTextarea.previousSibling.length,
"test_move_caret_from_after_double_textarea: caret should be moved to text node before the first <textarea> (offset)"
);
})();
SimpleTest.finish();
});
</script>
</head>
<body></body>
</html>

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

@ -9536,8 +9536,6 @@ nsIFrame::SelectablePeekReport nsIFrame::GetFrameFromDirection(
bool selectable = false;
nsIFrame* traversedFrame = this;
AutoAssertNoDomMutations guard;
const nsIContent* const nativeAnonymousSubtreeContent =
GetClosestNativeAnonymousSubtreeRoot();
while (!selectable) {
auto [blockFrame, lineFrame] =
traversedFrame->GetContainingBlockForLine(aScrollViewStop);
@ -9575,17 +9573,10 @@ nsIFrame::SelectablePeekReport nsIFrame::GetFrameFromDirection(
return result;
}
auto IsSelectable = [aForceEditableRegion, nativeAnonymousSubtreeContent](
const nsIFrame* aFrame) {
auto IsSelectable = [aForceEditableRegion](const nsIFrame* aFrame) {
if (!aFrame->IsSelectable(nullptr)) {
return false;
}
// If the new frame is in a native anonymous subtree, we should treat it
// as not selectable unless the frame and found frame are in same subtree.
if (aFrame->GetClosestNativeAnonymousSubtreeRoot() !=
nativeAnonymousSubtreeContent) {
return false;
}
return !aForceEditableRegion || aFrame->GetContent()->IsEditable();
};

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

@ -747,18 +747,6 @@ class nsIFrame : public nsQueryFrame {
*/
nsIContent* GetContent() const { return mContent; }
/**
* @brief Get the closest native anonymous subtree root if the content is in a
* native anonymous subtree.
*
* @return The root of native anonymous subtree which the content belongs to.
* Otherwise, nullptr.
*/
nsIContent* GetClosestNativeAnonymousSubtreeRoot() const {
return mContent ? mContent->GetClosestNativeAnonymousSubtreeRoot()
: nullptr;
}
/**
* Get the frame that should be the parent for the frames of child elements
* May return nullptr during reflow

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

@ -1,24 +0,0 @@
<!doctype html>
<html>
<head>
<meta charset="utf-8">
<style>
div {
border: medium solid red;
border-width: 32em;
}
</style>
<script>
document.addEventListener("DOMContentLoaded", () => {
document.execCommand("selectAll");
getSelection().modify("move", "backward", "character");
getSelection().collapseToStart();
}, {once: true});
</script>
</head>
<body>
<button contenteditable></button>
<input value="a">
<div></div>
</body>
</html>