Import Cobalt 19.master.0.203780
Includes the following patches:
https://cobalt-review.googlesource.com/c/cobalt/+/5210
by errong.leng@samsung.com
https://cobalt-review.googlesource.com/c/cobalt/+/5270
by linus.wang@samsung.com
diff --git a/src/third_party/web_platform_tests/selection/dir-manual.html b/src/third_party/web_platform_tests/selection/dir-manual.html
new file mode 100644
index 0000000..39cf655
--- /dev/null
+++ b/src/third_party/web_platform_tests/selection/dir-manual.html
@@ -0,0 +1,106 @@
+<!doctype html>
+<title>Selection direction tests</title>
+<meta charset=utf-8>
+<div id=test>
+ <p>This is a manual test, since there's no way to synthesize keyboard or
+ mouse input. Click after the letter "c" in the following paragraph and
+ drag backwards so that both the "b" and the "c" are highlighted, then click
+ the "Test" button:
+
+ <p>abcd <button onclick=testDirection()>Test</button>
+
+ <p>efghi
+</div>
+<div id=log></div>
+<script src=/resources/testharness.js></script>
+<script src=/resources/testharnessreport.js></script>
+<script>
+setup({explicit_done: true});
+
+function testDirection() {
+ var testDiv = document.getElementById("test");
+ var p = testDiv.getElementsByTagName("p")[1].firstChild;
+ var selection = getSelection();
+ var range = selection.getRangeAt(0);
+ test(function() {
+ assert_equals(range.toString(), "bc");
+ }, "The expected range is selected");
+ test(function() {
+ assert_equals(selection.anchorNode, p);
+ assert_equals(selection.focusNode, p);
+ }, "Expected node is initially selected");
+ test(function() {
+ assert_array_equals([selection.anchorOffset, selection.focusOffset].sort(), [1, 3]);
+ }, "Expected offsets are initially selected (maybe not in order)");
+ test(function() {
+ assert_equals(selection.anchorOffset, 3);
+ assert_equals(selection.focusOffset, 1);
+ }, "Offsets are backwards for initial selection"),
+ test(function() {
+ assert_equals(selection.anchorNode, range.endContainer);
+ assert_equals(selection.anchorOffset, range.endOffset);
+ assert_equals(selection.focusNode, range.startContainer);
+ assert_equals(selection.focusOffset, range.startOffset);
+ }, "Offsets match the range for initial selection");
+
+ // Per spec, the direction of the selection remains even if you zap a range
+ // and add a new one.
+ test(function() {
+ selection.removeRange(range);
+ range = document.createRange();
+ p = testDiv.getElementsByTagName("p")[0].firstChild;
+ range.setStart(p, 0);
+ range.setEnd(p, 4);
+ assert_equals(range.toString(), "This");
+ selection.addRange(range);
+ }, "removeRange()/addRange() successful");
+ test(function() {
+ assert_equals(selection.anchorNode, p);
+ assert_equals(selection.focusNode, p);
+ }, "Expected node is selected after remove/addRange()");
+ test(function() {
+ assert_array_equals([selection.anchorOffset, selection.focusOffset].sort(), [0, 4]);
+ }, "Expected offsets are selected after remove/addRange() (maybe not in order)");
+ test(function() {
+ assert_equals(selection.anchorOffset, 4);
+ assert_equals(selection.focusOffset, 0);
+ }, "Offsets are backwards after remove/addRange()"),
+ test(function() {
+ assert_equals(selection.anchorNode, range.endContainer);
+ assert_equals(selection.anchorOffset, range.endOffset);
+ assert_equals(selection.focusNode, range.startContainer);
+ assert_equals(selection.focusOffset, range.startOffset);
+ }, "Offsets match the range after remove/addRange()");
+
+ // But if you call removeAllRanges(), the direction should reset to
+ // forwards.
+ test(function() {
+ selection.removeAllRanges();
+ range = document.createRange();
+ p = testDiv.getElementsByTagName("p")[2].firstChild;
+ range.setStart(p, 2);
+ range.setEnd(p, 5);
+ assert_equals(range.toString(), "ghi");
+ selection.addRange(range);
+ }, "removeAllRanges() successful");
+ test(function() {
+ assert_equals(selection.anchorNode, p);
+ assert_equals(selection.focusNode, p);
+ }, "Expected node is selected after removeAllRanges()");
+ test(function() {
+ assert_array_equals([selection.anchorOffset, selection.focusOffset].sort(), [2, 5]);
+ }, "Expected offsets are selected after removeAllRanges() (maybe not in order)");
+ test(function() {
+ assert_equals(selection.anchorOffset, 2);
+ assert_equals(selection.focusOffset, 5);
+ }, "Offsets are forwards after removeAllRanges()");
+ test(function() {
+ assert_equals(selection.anchorNode, range.startContainer);
+ assert_equals(selection.anchorOffset, range.startOffset);
+ assert_equals(selection.focusNode, range.endContainer);
+ assert_equals(selection.focusOffset, range.endOffset);
+ }, "Offsets match the range after removeAllRanges()");
+
+ done();
+}
+</script>