| <!DOCTYPE html> |
| <meta charset="utf-8"> |
| <title>user-select: auto allows text selection originating from outside of button elements.</title> |
| <link rel="author" title="David Shin" href="mailto:dshin@mozilla.com"> |
| <link rel="author" title="Mozilla" href="https://www.mozilla.org/"> |
| <link rel="help" href="https://drafts.csswg.org/css-ui/#propdef-user-select"> |
| <link rel="help" href="https://bugzilla.mozilla.org/show_bug.cgi?id=2039690"> |
| |
| <script src="/resources/testharness.js"></script> |
| <script src="/resources/testharnessreport.js"></script> |
| <script src="/resources/testdriver.js"></script> |
| <script src="/resources/testdriver-actions.js"></script> |
| <script src='/resources/testdriver-vendor.js'></script> |
| |
| <style> |
| .usa { |
| user-select: auto; |
| } |
| |
| .ust { |
| user-select: text; |
| } |
| |
| .usn { |
| user-select: none; |
| } |
| |
| #empty { |
| width: 50px; |
| height: 50px; |
| } |
| </style> |
| <div id=empty></div> |
| <div id=button-auto>A<button class=usa>button</button></div> |
| <div id=outer-text class=ust>A<button class=usa>button</button></div> |
| <div id=outer-none class=usn>A<button class=usa>button</button></div> |
| <script> |
| async function drag_across(element) { |
| const rect = element.getBoundingClientRect(); |
| const middle = rect.top + rect.height / 2; |
| |
| const actions = new test_driver.Actions(); |
| return actions.pointerMove(rect.left + 2, middle) |
| .pointerDown() |
| .pointerMove(rect.right - 2, middle) |
| .pointerUp() |
| .send(); |
| } |
| |
| async function test(t, element, expected) { |
| t.add_cleanup(() => window.getSelection().removeAllRanges()); |
| await drag_across(element); |
| assert_equals(window.getSelection().toString(), expected); |
| } |
| |
| promise_test(async t => test( |
| t, |
| document.getElementById("button-auto").querySelector("button"), |
| "" |
| ), "the button text should not be selectable from inside."); |
| |
| promise_test(async t => test( |
| t, |
| document.getElementById("button-auto"), |
| "Abutton" |
| ), "the button text should be selectable from outside."); |
| |
| promise_test(async t => test( |
| t, |
| document.getElementById("outer-text").querySelector("button"), |
| "" |
| ), "the button text should not be selectable from inside when the parent is user-select: text."); |
| |
| promise_test(async t => test( |
| t, |
| document.getElementById("outer-text"), |
| "Abutton" |
| ), "the button text should be selectable from outside when the parent is user-select: text."); |
| |
| promise_test(async t => test( |
| t, |
| document.getElementById("outer-none").querySelector("button"), |
| "" |
| ), "the button text should not be selectable from inside when the parent is user-select: none."); |
| |
| promise_test(async t => test( |
| t, |
| document.getElementById("outer-none"), |
| "" |
| ), "the button text should not be selectable from outside when the parent is user-select: none."); |
| </script> |