Bug 1908907 - Text Fragments: Set sequential focus to the text directive, but don't focus it. r=emilio
Differential Revision: https://phabricator.services.mozilla.com/D217100
This commit is contained in:
@@ -3218,7 +3218,7 @@ nsresult PresShell::GoToAnchor(const nsAString& aAnchorName,
|
|||||||
// TODO(emilio): Do we really want to clear the focus even if aScroll is
|
// TODO(emilio): Do we really want to clear the focus even if aScroll is
|
||||||
// false?
|
// false?
|
||||||
const bool shouldFocusTarget = [&] {
|
const bool shouldFocusTarget = [&] {
|
||||||
if (!aScroll) {
|
if (!aScroll || thereIsATextFragment) {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
nsIFrame* targetFrame = target->GetPrimaryFrame();
|
nsIFrame* targetFrame = target->GetPrimaryFrame();
|
||||||
|
|||||||
@@ -0,0 +1,45 @@
|
|||||||
|
<!DOCTYPE html>
|
||||||
|
<html lang="en">
|
||||||
|
<head>
|
||||||
|
<meta charset="UTF-8">
|
||||||
|
<title>Text Fragments Test</title>
|
||||||
|
<script src="/resources/testharness.js"></script>
|
||||||
|
<script src="/resources/testharnessreport.js"></script>
|
||||||
|
<script src="/resources/testdriver.js"></script>
|
||||||
|
<script src="/resources/testdriver-vendor.js"></script>
|
||||||
|
</head>
|
||||||
|
<body>
|
||||||
|
<!--
|
||||||
|
The document performs a same-document navigation, which contains the text fragment 'foo'.
|
||||||
|
'foo' is inside of a <a> element. If it were focused, hitting `Enter` would
|
||||||
|
directly navigate to its href, which is not intended.
|
||||||
|
Instead, it should only have the sequential focus, ie. pressing `Tab` would focus the next
|
||||||
|
focusable element.
|
||||||
|
-->
|
||||||
|
<a href="#" id="link">foo</a>
|
||||||
|
<button id="next-button">Next Focusable Element</button>
|
||||||
|
<script>
|
||||||
|
// Define the test for text fragment focus behavior
|
||||||
|
promise_test(async t => {
|
||||||
|
const link = document.getElementById('link');
|
||||||
|
const nextButton = document.getElementById('next-button');
|
||||||
|
|
||||||
|
window.addEventListener('hashchange', async () => {
|
||||||
|
// Assert that the link element does not have focus initially
|
||||||
|
assert_not_equals(document.activeElement, link, 'Link element should not have focus initially');
|
||||||
|
|
||||||
|
// Simulate pressing TAB to shift focus to the next element
|
||||||
|
await test_driver.send_keys(document.body, '\uE004'); // '\uE004' is the WebDriver key code for TAB
|
||||||
|
|
||||||
|
// Assert that the next focusable element (button) has focus
|
||||||
|
assert_equals(document.activeElement, nextButton, 'Next focusable element should have focus after pressing TAB');
|
||||||
|
|
||||||
|
t.done();
|
||||||
|
});
|
||||||
|
|
||||||
|
// Simulate a same-document load to the text fragment
|
||||||
|
location.hash = '#some-hash-to-trigger-hashchange:~:text=foo';
|
||||||
|
}, 'Text Fragment focus behavior');
|
||||||
|
</script>
|
||||||
|
</body>
|
||||||
|
</html>
|
||||||
Reference in New Issue
Block a user