Skip to content

Focus correctness improvements#26902

Merged
bors-servo merged 2 commits intoservo:masterfrom
jdm:focus-fixes
Jun 15, 2020
Merged

Focus correctness improvements#26902
bors-servo merged 2 commits intoservo:masterfrom
jdm:focus-fixes

Conversation

@jdm
Copy link
Copy Markdown
Member

@jdm jdm commented Jun 12, 2020

These changes improve the behaviour of focus in Hubs rooms, and are expected to improve web compat around other dynamic pages that receive keyboard events as well.


@highfive
Copy link
Copy Markdown

Heads up! This PR modifies the following files:

  • @asajeffrey: components/script/dom/htmltextareaelement.rs, components/script/dom/document.rs, components/script/dom/htmlbuttonelement.rs, components/script/dom/element.rs, components/script/dom/htmlelement.rs and 3 more
  • @KiChjang: components/script/dom/htmltextareaelement.rs, components/script/dom/document.rs, components/script/dom/htmlbuttonelement.rs, components/script/dom/element.rs, components/script/dom/htmlelement.rs and 3 more

@highfive highfive added the S-awaiting-review There is new code that needs to be reviewed. label Jun 12, 2020
@jdm
Copy link
Copy Markdown
Member Author

jdm commented Jun 12, 2020

@bors-servo try=wpt

bors-servo added a commit that referenced this pull request Jun 12, 2020
Focus correctness improvements

These changes improve the behaviour of focus in Hubs rooms, and are expected to improve web compat around other dynamic pages that receive keyboard events as well.

---
- [x] `./mach build -d` does not report any errors
- [x] `./mach test-tidy` does not report any errors
- [x] These changes fix #26901 and fix #26900.
- [x] There are tests for these changes
@bors-servo
Copy link
Copy Markdown
Contributor

⌛ Trying commit d5b5ad3 with merge 257c1fc...

@bors-servo
Copy link
Copy Markdown
Contributor

💔 Test failed - status-taskcluster

@highfive highfive added the S-tests-failed The changes caused existing tests to fail. label Jun 13, 2020
@CYBAI
Copy link
Copy Markdown
Member

CYBAI commented Jun 13, 2020

tidy is complaining about the spec urls 👀

Checking files for tidiness...
./components/script/dom/element.rs:1871: link to WHATWG may break in the future, use this format instead: https://html.spec.whatwg.org/multipage/#focus-fixup-rule
./components/script/dom/document.rs:1028: link to WHATWG may break in the future, use this format instead: https://html.spec.whatwg.org/multipage/#focus-fixup-rule
Open to see WPT failures
  ▶ Unexpected subtest result in /html/interaction/focus/the-autofocus-attribute/focusable-area-in-top-document.html:
  │ FAIL [expected PASS] If topDocument's focused area is not topDocument, autofocus is not processed.
  │   → assert_equals: Prereq: IFRAME should be focused expected Element node <iframe srcdoc="<input><script>document.querySelector('in... but got Element node <body><iframe srcdoc="<input><script>document.querySelect...
  │ 
  │ @http://web-platform.test:8000/html/interaction/focus/the-autofocus-attribute/focusable-area-in-top-document.html:14:16
  │ async*Test.prototype.step@http://web-platform.test:8000/resources/testharness.js:1977:25
  │ promise_test/tests.promise_tests</<@http://web-platform.test:8000/resources/testharness.js:592:36
  └ promise_test/tests.promise_tests<@http://web-platform.test:8000/resources/testharness.js:591:20
  ▶ TIMEOUT [expected OK] /html/browsers/the-window-object/focus.window.html
  │ 
  │ error: XDG_RUNTIME_DIR not set in the environment.
  └ libEGL warning: No hardware driver found, falling back to software rendering
  ▶ Unexpected subtest result in /html/browsers/the-window-object/focus.window.html:
  │ TIMEOUT [expected FAIL] focus
  └   → Test timed out
  ▶ Unexpected subtest result in /html/interaction/focus/focus-file-input.html:
  │ FAIL [expected PASS] HTML Test: file input can be programatically focused before layout
  │   → assert_equals: expected Element node <input type="file"></input> but got Element node <body><input type="file">
  │   → <script>
  │   → test(function() {
  │   →   le...
  │ 
  │ @http://web-platform.test:8000/html/interaction/focus/focus-file-input.html:16:16
  │ Test.prototype.step@http://web-platform.test:8000/resources/testharness.js:1977:25
  │ test@http://web-platform.test:8000/resources/testharness.js:535:30
  └ @http://web-platform.test:8000/html/interaction/focus/focus-file-input.html:12:5
  ▶ Unexpected subtest result in /html/interaction/focus/focus-management/focus-event-targets-simple.html:
  │ FAIL [expected PASS] Focus events fire at correct targets in correct order in simple case
  │   → assert_array_equals: Exactly 1 focus event should fire and its target should be the input lengths differ, expected array [Element node <input type="text" id="a"></input>] length 1, got [] length 0
  │ 
  │ @http://web-platform.test:8000/html/interaction/focus/focus-management/focus-event-targets-simple.html:29:22
  │ Test.prototype.step@http://web-platform.test:8000/resources/testharness.js:1977:25
  │ test@http://web-platform.test:8000/resources/testharness.js:535:30
  └ @http://web-platform.test:8000/html/interaction/focus/focus-management/focus-event-targets-simple.html:28:5
  ▶ TIMEOUT [expected OK] /html/interaction/focus/focus-management/focus-events.html
  │ 
  │ error: XDG_RUNTIME_DIR not set in the environment.
  └ libEGL warning: No hardware driver found, falling back to software rendering
  ▶ Unexpected subtest result in /html/interaction/focus/focus-management/focus-events.html:
  └ NOTRUN [expected PASS] focusing on a focusable element fires a focus event at the element
  ▶ Unexpected subtest result in /html/interaction/focus/focus-management/focus-events.html:
  └ NOTRUN [expected PASS] focusing on a focusable element fires a blur event at the previous focussed element
  ▶ TIMEOUT [expected OK] /html/interaction/focus/composed.window.html
  │ 
  │ error: XDG_RUNTIME_DIR not set in the environment.
  └ libEGL warning: No hardware driver found, falling back to software rendering
  ▶ Unexpected subtest result in /html/interaction/focus/composed.window.html:
  │ TIMEOUT [expected FAIL] Focus events are composed
  └   → Test timed out
  ▶ Unexpected subtest result in /html/interaction/focus/tabindex-focus-flag.html:
  └ PASS [expected FAIL] a should not be focusable by default.
  ▶ Unexpected subtest result in /html/interaction/focus/tabindex-focus-flag.html:
  └ PASS [expected FAIL] input[type="hidden"] should not be focusable by default.
  ▶ Unexpected subtest result in /html/interaction/focus/tabindex-focus-flag.html:
  │ FAIL [expected PASS] input[type="button"] should be focusable by default.
  │   → assert_equals: expected Element node <input type="button"></input> but got Element node <body>
  │   → <div id="default-samples">
  │   → <a></a>
  │   → <a href=""></a>...
  │ 
  │ runTests/<@http://web-platform.test:8000/html/interaction/focus/tabindex-focus-flag.html:49:22
  │ Test.prototype.step@http://web-platform.test:8000/resources/testharness.js:1977:25
  │ test@http://web-platform.test:8000/resources/testharness.js:535:30
  └ runTests@http://web-platform.test:8000/html/interaction/focus/tabindex-focus-flag.html:45:9
  ▶ Unexpected subtest result in /html/semantics/scripting-1/the-script-element/execution-timing/031.html:
  │ FAIL [expected PASS]  scheduler: focus and blur events
  │   → assert_array_equals: lengths differ, expected array ["inline script #1", "focus event", "blur event", "focus el 2 event", "end script #1", "inline script #2"] length 6, got ["inline script #1", "end script #1", "inline script #2"] length 3
  │ 
  │ test@http://web-platform.test:8000/html/semantics/scripting-1/the-script-element/execution-timing/031.html:24:32
  │ Test.prototype.step@http://web-platform.test:8000/resources/testharness.js:1977:25
  └ Test.prototype.step_func/<@http://web-platform.test:8000/resources/testharness.js:2002:35
  ▶ Unexpected subtest result in /html/semantics/forms/the-input-element/time-focus-dynamic-value-change.html:
  │ FAIL [expected PASS] Time input handles focus correctly when value changes
  │   → assert_true: expected true got false
  │ 
  │ window.onload<@http://web-platform.test:8000/html/semantics/forms/the-input-element/time-focus-dynamic-value-change.html:18:14
  │ Test.prototype.step@http://web-platform.test:8000/resources/testharness.js:1977:25
  └ Test.prototype.step_func_done/<@http://web-platform.test:8000/resources/testharness.js:2018:32
  ▶ Unexpected subtest result in /html/semantics/selectors/pseudo-classes/focus.html:
  │ FAIL [expected PASS] input1 has the focus
  │   → assert_array_equals: lengths differ, expected array [Element node <input id="input1"></input>] length 1, got [] length 0
  │ 
  │ testSelectorIdsMatch/<@http://web-platform.test:8000/html/semantics/selectors/pseudo-classes/utils.js:12:24
  │ Test.prototype.step@http://web-platform.test:8000/resources/testharness.js:1977:25
  │ test@http://web-platform.test:8000/resources/testharness.js:535:30
  │ testSelectorIdsMatch@http://web-platform.test:8000/html/semantics/selectors/pseudo-classes/utils.js:10:7
  │ run_test@http://web-platform.test:8000/html/semantics/selectors/pseudo-classes/focus.html:34:27
  └ onload@http://web-platform.test:8000/html/semantics/selectors/pseudo-classes/focus.html:26:9
  ▶ FAIL [expected PASS] /_mozilla/css/input_insertion_point_empty_a.html
  │   → /_mozilla/css/input_insertion_point_empty_a.html ['c341dbce9b98cfd7b7194034e55fcc6838cd55d3']
  └   → /_mozilla/css/input_insertion_point_empty_ref.html ['c341dbce9b98cfd7b7194034e55fcc6838cd55d3']
  ▶ FAIL [expected PASS] /_mozilla/css/input_selection_a.html
  │   → /_mozilla/css/input_selection_a.html ['54a9df64f1476dd12020019d7cf22ac34d727bc0']
  │   → /_mozilla/css/input_selection_ref.html ['caba1bd18437689eecf901bb4f9a0a9fdb4b8ae6']
  └   → Screenshot is solid color 0xFFFFFF for /_mozilla/css/input_selection_a.html
  ▶ FAIL [expected PASS] /_mozilla/css/input_selection_incremental_a.html
  │   → /_mozilla/css/input_selection_incremental_a.html ['54a9df64f1476dd12020019d7cf22ac34d727bc0']
  │   → /_mozilla/css/input_selection_incremental_ref.html ['e5c995e16a7c3c067520757b978ca12e5f181dca']
  └   → Screenshot is solid color 0xFFFFFF for /_mozilla/css/input_selection_incremental_a.html
  ▶ FAIL [expected PASS] /_mozilla/css/submit_focus_a.html
  │   → /_mozilla/css/submit_focus_a.html ['a1d3a41917e1205b302b8eeb08b6958b79ee9365']
  └   → /_mozilla/css/submit_focus_b.html ['17d293fd5157a401f99ec2bbd5c81224dc3c8c0c']
  ▶ Unexpected subtest result in /html/interaction/focus/document-level-focus-apis/document-level-apis.html:
  │ FAIL [expected PASS] The element must be the active element if it is focused
  │   → assert_equals: The active element should be the input element. expected Element node <input id="test"></input> but got Element node <body><div id="log"></div>
  │   → <input id="test">
  │   → <script>
  │   → 
  │   → te...
  │ 
  │ @http://web-platform.test:8000/html/interaction/focus/document-level-focus-apis/document-level-apis.html:18:16
  │ Test.prototype.step@http://web-platform.test:8000/resources/testharness.js:1977:25
  │ test@http://web-platform.test:8000/resources/testharness.js:535:30
  └ @http://web-platform.test:8000/html/interaction/focus/document-level-focus-apis/document-level-apis.html:16:5
  ▶ Unexpected subtest result in /html/interaction/focus/processing-model/focus-fixup-rule-one-no-dialogs.html:
  └ PASS [expected FAIL] Disabling <fieldset> affects its descendants
  ▶ Unexpected subtest result in /html/interaction/focus/processing-model/focus-fixup-rule-one-no-dialogs.html:
  │ FAIL [expected PASS] Changing the first legend element in disabled <fieldset>
  │   → assert_not_equals: After changing a legend element, the button must no longer be focused got disallowed value Element node <button id="button5">Button 5</button>
  │ 
  │ @http://web-platform.test:8000/html/interaction/focus/processing-model/focus-fixup-rule-one-no-dialogs.html:82:20
  │ Test.prototype.step@http://web-platform.test:8000/resources/testharness.js:1977:25
  │ test@http://web-platform.test:8000/resources/testharness.js:535:30
  └ @http://web-platform.test:8000/html/interaction/focus/processing-model/focus-fixup-rule-one-no-dialogs.html:74:5
  ▶ TIMEOUT [expected OK] /_mozilla/mozilla/FocusEvent.html
  │ 
  │ error: XDG_RUNTIME_DIR not set in the environment.
  └ libEGL warning: No hardware driver found, falling back to software rendering
  ▶ Unexpected subtest result in /_mozilla/mozilla/FocusEvent.html:
  │ TIMEOUT [expected PASS] FocusEvent
  └   → Test timed out
  ▶ TIMEOUT [expected OK] /_mozilla/mozilla/double_focus.html
  │ 
  │ error: XDG_RUNTIME_DIR not set in the environment.
  └ libEGL warning: No hardware driver found, falling back to software rendering
  ▶ Unexpected subtest result in /_mozilla/mozilla/double_focus.html:
  │ TIMEOUT [expected PASS] Double focus/blur events
  └   → Test timed out
  ▶ Unexpected subtest result in /_mozilla/mozilla/document_activeElement.html:
  │ FAIL [expected PASS] document_activeElement
  │   → assert_equals: test_2.2, document.activeElement expected Element node <input id="foo" type="text"></input> but got Element node <body>
  │   →         <input id="foo" type="text">
  │   →         <scri...
  │ 
  │ @http://web-platform.test:8000/_mozilla/mozilla/document_activeElement.html:17:26
  │ Test.prototype.step@http://web-platform.test:8000/resources/testharness.js:1977:25
  │ test@http://web-platform.test:8000/resources/testharness.js:535:30
  └ @http://web-platform.test:8000/_mozilla/mozilla/document_activeElement.html:11:15
  ▶ Unexpected subtest result in /html/interaction/focus/processing-model/preventScroll-textarea.html:
  │ FAIL [expected PASS] preventScroll: true on a textarea element
  │   → assert_equals: INPUT: Should have been focused expected Element node <input value="EFGH"></input> but got Element node <body><div style="height: 200vh"></div>
  │   → <textarea>ABCD</t...
  │ 
  │ @http://web-platform.test:8000/html/interaction/focus/processing-model/preventScroll-textarea.html:23:18
  │ async*Test.prototype.step@http://web-platform.test:8000/resources/testharness.js:1977:25
  │ promise_test/tests.promise_tests</<@http://web-platform.test:8000/resources/testharness.js:592:36
  └ promise_test/tests.promise_tests<@http://web-platform.test:8000/resources/testharness.js:591:20
  ▶ Unexpected subtest result in /_mozilla/mozilla/focus_blur.html:
  │ FAIL [expected PASS] focus_blur
  │   → assert_equals: expected Element node <input id="a"></input> but got Element node <body>
  │   →   <input id="a">
  │   →   <input id="b">
  │   →   <script>
  │   →   tes...
  │ 
  │ @http://web-platform.test:8000/_mozilla/mozilla/focus_blur.html:18:18
  │ Test.prototype.step@http://web-platform.test:8000/resources/testharness.js:1977:25
  │ test@http://web-platform.test:8000/resources/testharness.js:535:30
  └ @http://web-platform.test:8000/_mozilla/mozilla/focus_blur.html:12:7

@highfive highfive removed the S-tests-failed The changes caused existing tests to fail. label Jun 13, 2020
@jdm
Copy link
Copy Markdown
Member Author

jdm commented Jun 13, 2020

@bors-servo try=wpt

@bors-servo
Copy link
Copy Markdown
Contributor

⌛ Trying commit 8a1d73e with merge 6a96804...

bors-servo added a commit that referenced this pull request Jun 13, 2020
Focus correctness improvements

These changes improve the behaviour of focus in Hubs rooms, and are expected to improve web compat around other dynamic pages that receive keyboard events as well.

---
- [x] `./mach build -d` does not report any errors
- [x] `./mach test-tidy` does not report any errors
- [x] These changes fix #26901 and fix #26900.
- [x] There are tests for these changes
@bors-servo
Copy link
Copy Markdown
Contributor

💔 Test failed - status-taskcluster

@highfive highfive added the S-tests-failed The changes caused existing tests to fail. label Jun 13, 2020
@CYBAI
Copy link
Copy Markdown
Member

CYBAI commented Jun 13, 2020

the failure is #25476

)) |
NodeTypeId::Element(ElementTypeId::HTMLElement(
HTMLElementTypeId::HTMLTextAreaElement,
)) => true,
Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Just a random thought: would be nice to generate associated constants on NodeTypeId to do stuff such as NodeTypeID::TEXT_AREA.

Copy link
Copy Markdown
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Filed #26925.

if implicit_transaction {
self.begin_focus_transaction();
}
if elem.map_or(true, |e| e.is_focusable_area()) {
Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I'm not sure I understand what it means to focus a None element.

Copy link
Copy Markdown
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

De-focus the currently focused element.

@nox
Copy link
Copy Markdown
Contributor

nox commented Jun 15, 2020

LGTM but there was a try failure.

@highfive highfive removed the S-tests-failed The changes caused existing tests to fail. label Jun 15, 2020
@jdm
Copy link
Copy Markdown
Member Author

jdm commented Jun 15, 2020

@bors-servo r=nox

@bors-servo
Copy link
Copy Markdown
Contributor

📌 Commit d55424e has been approved by nox

@highfive highfive added S-awaiting-merge The PR is in the process of compiling and running tests on the automated CI. and removed S-awaiting-review There is new code that needs to be reviewed. labels Jun 15, 2020
@bors-servo
Copy link
Copy Markdown
Contributor

⌛ Testing commit d55424e with merge f31d345...

@bors-servo
Copy link
Copy Markdown
Contributor

☀️ Test successful - status-taskcluster
Approved by: nox
Pushing f31d345 to master...

@bors-servo bors-servo merged commit f31d345 into servo:master Jun 15, 2020
@highfive highfive removed the S-awaiting-merge The PR is in the process of compiling and running tests on the automated CI. label Jun 15, 2020
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Removing a focused element from the tree doesn't reset focus

6 participants