| <!doctype html> | |
| <html> | |
| <head> | |
| <meta charset="utf-8"> | |
| <meta name="variant" content="?textControl=text"> | |
| <meta name="variant" content="?textControl=password"> | |
| <meta name="variant" content="?textControl=number"> | |
| <meta name="variant" content="?textControl=textarea"> | |
| <title>Selection range after text control is removed</title> | |
| <script src=/resources/testharness.js></script> | |
| <script src=/resources/testharnessreport.js></script> | |
| <script> | |
| "use strict"; | |
| /** | |
| * Browsers may use internal Selection and/or Range to implement the selection | |
| * in text controls. They should not be appear outside the host text control | |
| * after the host is removed. | |
| */ | |
| addEventListener("load", () => { | |
| const textControlType = (new URLSearchParams(document.location.search)).get("mode"); | |
| function createTextControlElement() { | |
| const textControl = | |
| document.createElement(textControlType == "textarea" ? "textarea" : "input"); | |
| if (textControlType != "textarea") { | |
| textControl.type = textControlType; | |
| } | |
| return textControl; | |
| } | |
| test(() => { | |
| const textControl = createTextControlElement(); | |
| document.body.appendChild(textControl); | |
| textControl.select(); | |
| getSelection().removeAllRanges(); | |
| textControl.blur(); | |
| textControl.remove(); | |
| assert_equals(getSelection().rangeCount, 0); | |
| }, "Removing the text control should not add selection range"); | |
| test(() => { | |
| const wrapper = document.createElement("div"); | |
| wrapper.id = "wrapper"; | |
| const textControl = createTextControlElement(); | |
| wrapper.appendChild(textControl); | |
| document.body.appendChild(wrapper); | |
| textControl.select(); | |
| getSelection().removeAllRanges(); | |
| textControl.blur(); | |
| wrapper.remove(); | |
| assert_equals(getSelection().rangeCount, 0); | |
| }, "Removing the text control parent should not add selection range"); | |
| }, {once: true}); | |
| </script> | |
| </head> | |
| <body></body> | |
| </html> |