diff --git a/Libraries/LibWeb/HTML/Focus.cpp b/Libraries/LibWeb/HTML/Focus.cpp
index 0fbc17e696..d55645a217 100644
--- a/Libraries/LibWeb/HTML/Focus.cpp
+++ b/Libraries/LibWeb/HTML/Focus.cpp
@@ -44,7 +44,7 @@ static void run_focus_update_steps(Vector> old_chain, Vector
// pop the last entry from old chain and the last entry from new chain and redo this step.
while (!old_chain.is_empty()
&& !new_chain.is_empty()
- && &old_chain.last() == &new_chain.last()) {
+ && old_chain.last() == new_chain.last()) {
(void)old_chain.take_last();
(void)new_chain.take_last();
}
diff --git a/Tests/LibWeb/Text/expected/focus-chain.txt b/Tests/LibWeb/Text/expected/focus-chain.txt
new file mode 100644
index 0000000000..d8b0cedbf0
--- /dev/null
+++ b/Tests/LibWeb/Text/expected/focus-chain.txt
@@ -0,0 +1,30 @@
+== div3 focus
+DIV#3 received focus event, target: DIV#3, currentTarget: DIV#3
+DIV#3 received focusin event, target: DIV#3, currentTarget: DIV#3
+DIV#2 received focusin event, target: DIV#3, currentTarget: DIV#2
+DIV#1 received focusin event, target: DIV#3, currentTarget: DIV#1
+window received focusin event, target: DIV#3, currentTarget: window
+== div5 focus
+DIV#3 received blur event, target: DIV#3, currentTarget: DIV#3
+DIV#3 received focusout event, target: DIV#3, currentTarget: DIV#3
+DIV#2 received focusout event, target: DIV#3, currentTarget: DIV#2
+DIV#1 received focusout event, target: DIV#3, currentTarget: DIV#1
+window received focusout event, target: DIV#3, currentTarget: window
+DIV#5 received focus event, target: DIV#5, currentTarget: DIV#5
+DIV#5 received focusin event, target: DIV#5, currentTarget: DIV#5
+DIV#4 received focusin event, target: DIV#5, currentTarget: DIV#4
+DIV#1 received focusin event, target: DIV#5, currentTarget: DIV#1
+window received focusin event, target: DIV#5, currentTarget: window
+== div1 focus
+DIV#5 received blur event, target: DIV#5, currentTarget: DIV#5
+DIV#5 received focusout event, target: DIV#5, currentTarget: DIV#5
+DIV#4 received focusout event, target: DIV#5, currentTarget: DIV#4
+DIV#1 received focusout event, target: DIV#5, currentTarget: DIV#1
+window received focusout event, target: DIV#5, currentTarget: window
+DIV#1 received focus event, target: DIV#1, currentTarget: DIV#1
+DIV#1 received focusin event, target: DIV#1, currentTarget: DIV#1
+window received focusin event, target: DIV#1, currentTarget: window
+== window focus
+DIV#1 received blur event, target: DIV#1, currentTarget: DIV#1
+DIV#1 received focusout event, target: DIV#1, currentTarget: DIV#1
+window received focusout event, target: DIV#1, currentTarget: window
diff --git a/Tests/LibWeb/Text/expected/wpt-import/dom/events/shadow-relatedTarget.txt b/Tests/LibWeb/Text/expected/wpt-import/dom/events/shadow-relatedTarget.txt
index 40cea574ad..bb871948af 100644
--- a/Tests/LibWeb/Text/expected/wpt-import/dom/events/shadow-relatedTarget.txt
+++ b/Tests/LibWeb/Text/expected/wpt-import/dom/events/shadow-relatedTarget.txt
@@ -2,6 +2,6 @@ Harness status: OK
Found 2 tests
-2 Fail
-Fail relatedTarget should not leak at capturing phase, at window object.
-Fail relatedTarget should not leak at target.
\ No newline at end of file
+2 Pass
+Pass relatedTarget should not leak at capturing phase, at window object.
+Pass relatedTarget should not leak at target.
\ No newline at end of file
diff --git a/Tests/LibWeb/Text/input/focus-chain.html b/Tests/LibWeb/Text/input/focus-chain.html
new file mode 100644
index 0000000000..8120aff51c
--- /dev/null
+++ b/Tests/LibWeb/Text/input/focus-chain.html
@@ -0,0 +1,55 @@
+
+
+
+