Looks like that this bug and bug 1545222 are caused by same bug. Both of them occur only on opt and especially on shippable build. So, I guess that it's caused by some race condition. I got log of `mousemove` for this bug ``` [task 2020-03-01T04:12:26.883Z] 04:12:26 INFO - TEST-START | dom/events/test/test_bug656379-2.html [task 2020-03-01T04:12:26.941Z] 04:12:26 INFO - TEST-INFO | started process screentopng [task 2020-03-01T04:12:27.269Z] 04:12:27 INFO - TEST-INFO | screentopng: exit 0 [task 2020-03-01T04:12:27.269Z] 04:12:27 INFO - Buffered messages logged at 04:12:26 [task 2020-03-01T04:12:27.269Z] 04:12:27 INFO - must wait for load [task 2020-03-01T04:12:27.269Z] 04:12:27 INFO - mousemove on P#display > LABEL#label1 [task 2020-03-01T04:12:27.269Z] 04:12:27 INFO - TEST-PASS | dom/events/test/test_bug656379-2.html | Button 1 should be hovered after mousemove over label1 [task 2020-03-01T04:12:27.269Z] 04:12:27 INFO - TEST-PASS | dom/events/test/test_bug656379-2.html | Label 1 should be hovered after mousemove over label1 [task 2020-03-01T04:12:27.269Z] 04:12:27 INFO - TEST-PASS | dom/events/test/test_bug656379-2.html | Button 2 should not be hovered after mousemove over label1 [task 2020-03-01T04:12:27.269Z] 04:12:27 INFO - TEST-PASS | dom/events/test/test_bug656379-2.html | Label 2 should not be hovered after mousemove over label1 [task 2020-03-01T04:12:27.269Z] 04:12:27 INFO - mousemove on P#display > LABEL > INPUT#button2 [task 2020-03-01T04:12:27.269Z] 04:12:27 INFO - TEST-PASS | dom/events/test/test_bug656379-2.html | Button 1 should not be hovered after mousemove over button2 [task 2020-03-01T04:12:27.270Z] 04:12:27 INFO - TEST-PASS | dom/events/test/test_bug656379-2.html | Label 1 should not be hovered after mousemove over button2 [task 2020-03-01T04:12:27.271Z] 04:12:27 INFO - Buffered messages finished [task 2020-03-01T04:12:27.272Z] 04:12:27 INFO - TEST-UNEXPECTED-FAIL | dom/events/test/test_bug656379-2.html | Button 2 should be hovered after mousemove over button2 - got false, expected true [task 2020-03-01T04:12:27.273Z] 04:12:27 INFO - SimpleTest.is@SimpleTest/SimpleTest.js:383:14 [task 2020-03-01T04:12:27.273Z] 04:12:27 INFO - tests@dom/events/test/test_bug656379-2.html:72:5 [task 2020-03-01T04:12:27.273Z] 04:12:27 INFO - execNext@dom/events/test/test_bug656379-2.html:92:30 [task 2020-03-01T04:12:27.273Z] 04:12:27 INFO - TEST-PASS | dom/events/test/test_bug656379-2.html | Label 2 should not be hovered after mousemove over label2 [task 2020-03-01T04:12:27.273Z] 04:12:27 INFO - mousemove on P#display > LABEL > SPAN#label2 [task 2020-03-01T04:12:27.275Z] 04:12:27 INFO - TEST-PASS | dom/events/test/test_bug656379-2.html | Button 1 should not be hovered after mousemove over label2 [task 2020-03-01T04:12:27.275Z] 04:12:27 INFO - TEST-PASS | dom/events/test/test_bug656379-2.html | Label 1 should not be hovered after mousemove over label2 [task 2020-03-01T04:12:27.275Z] 04:12:27 INFO - TEST-PASS | dom/events/test/test_bug656379-2.html | Button 2 should be hovered after mousemove over label2 [task 2020-03-01T04:12:27.277Z] 04:12:27 INFO - TEST-PASS | dom/events/test/test_bug656379-2.html | Label 2 should be hovered after mousemove over label2 ``` And same for bug 1545222: ``` [task 2020-03-01T04:57:03.470Z] 04:57:03 INFO - TEST-START | dom/events/test/test_bug656379-2.html [task 2020-03-01T04:57:03.526Z] 04:57:03 INFO - TEST-INFO | started process screentopng [task 2020-03-01T04:57:03.853Z] 04:57:03 INFO - TEST-INFO | screentopng: exit 0 [task 2020-03-01T04:57:03.853Z] 04:57:03 INFO - Buffered messages logged at 04:57:03 [task 2020-03-01T04:57:03.853Z] 04:57:03 INFO - must wait for load [task 2020-03-01T04:57:03.854Z] 04:57:03 INFO - mousemove on P#display > LABEL#label1 [task 2020-03-01T04:57:03.854Z] 04:57:03 INFO - Buffered messages finished [task 2020-03-01T04:57:03.858Z] 04:57:03 INFO - TEST-UNEXPECTED-FAIL | dom/events/test/test_bug656379-2.html | Button 1 should be hovered after mousemove over label1 - got false, expected true [task 2020-03-01T04:57:03.858Z] 04:57:03 INFO - SimpleTest.is@SimpleTest/SimpleTest.js:383:14 [task 2020-03-01T04:57:03.858Z] 04:57:03 INFO - tests@dom/events/test/test_bug656379-2.html:58:5 [task 2020-03-01T04:57:03.858Z] 04:57:03 INFO - execNext@dom/events/test/test_bug656379-2.html:92:30 [task 2020-03-01T04:57:03.858Z] 04:57:03 INFO - Not taking screenshot here: see the one that was previously logged [task 2020-03-01T04:57:03.858Z] 04:57:03 INFO - TEST-UNEXPECTED-FAIL | dom/events/test/test_bug656379-2.html | Label 1 should be hovered after mousemove over label1 - got false, expected true [task 2020-03-01T04:57:03.858Z] 04:57:03 INFO - SimpleTest.is@SimpleTest/SimpleTest.js:383:14 [task 2020-03-01T04:57:03.858Z] 04:57:03 INFO - tests@dom/events/test/test_bug656379-2.html:60:5 [task 2020-03-01T04:57:03.858Z] 04:57:03 INFO - execNext@dom/events/test/test_bug656379-2.html:92:30 [task 2020-03-01T04:57:03.858Z] 04:57:03 INFO - TEST-PASS | dom/events/test/test_bug656379-2.html | Button 2 should not be hovered after mousemove over label1 [task 2020-03-01T04:57:03.859Z] 04:57:03 INFO - TEST-PASS | dom/events/test/test_bug656379-2.html | Label 2 should not be hovered after mousemove over label1 [task 2020-03-01T04:57:03.859Z] 04:57:03 INFO - mousemove on P#display > LABEL > INPUT#button2 [task 2020-03-01T04:57:03.859Z] 04:57:03 INFO - TEST-PASS | dom/events/test/test_bug656379-2.html | Button 1 should not be hovered after mousemove over button2 [task 2020-03-01T04:57:03.860Z] 04:57:03 INFO - TEST-PASS | dom/events/test/test_bug656379-2.html | Label 1 should not be hovered after mousemove over button2 [task 2020-03-01T04:57:03.861Z] 04:57:03 INFO - TEST-PASS | dom/events/test/test_bug656379-2.html | Button 2 should be hovered after mousemove over button2 [task 2020-03-01T04:57:03.861Z] 04:57:03 INFO - TEST-PASS | dom/events/test/test_bug656379-2.html | Label 2 should not be hovered after mousemove over label2 [task 2020-03-01T04:57:03.862Z] 04:57:03 INFO - mousemove on P#display > LABEL > SPAN#label2 [task 2020-03-01T04:57:03.863Z] 04:57:03 INFO - TEST-PASS | dom/events/test/test_bug656379-2.html | Button 1 should not be hovered after mousemove over label2 [task 2020-03-01T04:57:03.865Z] 04:57:03 INFO - TEST-PASS | dom/events/test/test_bug656379-2.html | Label 1 should not be hovered after mousemove over label2 [task 2020-03-01T04:57:03.865Z] 04:57:03 INFO - TEST-PASS | dom/events/test/test_bug656379-2.html | Button 2 should be hovered after mousemove over label2 [task 2020-03-01T04:57:03.867Z] 04:57:03 INFO - TEST-PASS | dom/events/test/test_bug656379-2.html | Label 2 should be hovered after mousemove over label2 [task 2020-03-01T04:57:03.867Z] 04:57:03 INFO - GECKO(2405) | MEMORY STAT | vsize 2617MB | residentFast 189MB | heapAllocated 34MB [task 2020-03-01T04:57:03.868Z] 04:57:03 INFO - TEST-OK | dom/events/test/test_bug656379-2.html | took 65ms ``` In those cases, `mousemove` events are fired as expected. [The `:hover` state is set by `EventStateManager::PreHandleEvent()`](https://searchfox.org/mozilla-central/rev/2c16c5c5ea7e5a105f2ae56e03a6cbf0021d002d/dom/events/EventStateManager.cpp#658,666,685) -> [`EventStateManager::GenerateMouseEnterExit()`](https://searchfox.org/mozilla-central/rev/2c16c5c5ea7e5a105f2ae56e03a6cbf0021d002d/dom/events/EventStateManager.cpp#4571,4579,4592) -> [`EventStateManager::NotifyMouseOver(()`](https://searchfox.org/mozilla-central/rev/2c16c5c5ea7e5a105f2ae56e03a6cbf0021d002d/dom/events/EventStateManager.cpp#4400,4441). I.e., the state is updated synchronously before dispathcing `mousemove` event at least in DOM code. On the other hand, [`Element::Matches()` goes into Stylo](https://searchfox.org/mozilla-central/rev/2c16c5c5ea7e5a105f2ae56e03a6cbf0021d002d/dom/base/Element.cpp#3034,3039). Emilio, is all resoucre about `:hover` state in stylo updated synchronously when `EventStateManager` updeates it?
Bug 1569512 Comment 28 Edit History
Note: The actual edited comment in the bug view page will always show the original commenter’s name and original timestamp.
Looks like that this bug and bug 1545222 are caused by same bug. Both of them occur only on opt and especially on shippable build. So, I guess that it's caused by some race condition. I got log of `mousemove` for this bug ``` [task 2020-03-01T12:04:39.717Z] 12:04:39 INFO - TEST-START | dom/events/test/test_bug656379-2.html [task 2020-03-01T12:04:39.793Z] 12:04:39 INFO - TEST-INFO | started process screentopng [task 2020-03-01T12:04:40.114Z] 12:04:40 INFO - TEST-INFO | screentopng: exit 0 [task 2020-03-01T12:04:40.115Z] 12:04:40 INFO - Buffered messages logged at 12:04:39 [task 2020-03-01T12:04:40.115Z] 12:04:40 INFO - must wait for load [task 2020-03-01T12:04:40.115Z] 12:04:40 INFO - mouseover on P#display > LABEL#label1 [task 2020-03-01T12:04:40.115Z] 12:04:40 INFO - mouseenter on HTML [task 2020-03-01T12:04:40.115Z] 12:04:40 INFO - mouseenter on HTML > BODY [task 2020-03-01T12:04:40.115Z] 12:04:40 INFO - mouseenter on P#display [task 2020-03-01T12:04:40.115Z] 12:04:40 INFO - mouseenter on P#display > LABEL#label1 [task 2020-03-01T12:04:40.115Z] 12:04:40 INFO - Synthesizing mousemove on label1... [task 2020-03-01T12:04:40.115Z] 12:04:40 INFO - mousemove on P#display > LABEL#label1 [task 2020-03-01T12:04:40.116Z] 12:04:40 INFO - TEST-PASS | dom/events/test/test_bug656379-2.html | Button 1 should be hovered after mousemove over label1 [task 2020-03-01T12:04:40.116Z] 12:04:40 INFO - TEST-PASS | dom/events/test/test_bug656379-2.html | Label 1 should be hovered after mousemove over label1 [task 2020-03-01T12:04:40.116Z] 12:04:40 INFO - TEST-PASS | dom/events/test/test_bug656379-2.html | Button 2 should not be hovered after mousemove over label1 [task 2020-03-01T12:04:40.116Z] 12:04:40 INFO - TEST-PASS | dom/events/test/test_bug656379-2.html | Label 2 should not be hovered after mousemove over label1 [task 2020-03-01T12:04:40.117Z] 12:04:40 INFO - Synthesizing mousemove on button2... [task 2020-03-01T12:04:40.117Z] 12:04:40 INFO - mouseout on P#display > LABEL#label1 [task 2020-03-01T12:04:40.117Z] 12:04:40 INFO - mouseleave on P#display > LABEL#label1 [task 2020-03-01T12:04:40.117Z] 12:04:40 INFO - mouseover on P#display > LABEL > INPUT#button2 [task 2020-03-01T12:04:40.118Z] 12:04:40 INFO - mouseenter on P#display > LABEL [task 2020-03-01T12:04:40.119Z] 12:04:40 INFO - mouseenter on P#display > LABEL > INPUT#button2 [task 2020-03-01T12:04:40.119Z] 12:04:40 INFO - mousemove on P#display > LABEL > INPUT#button2 [task 2020-03-01T12:04:40.120Z] 12:04:40 INFO - mouseout on P#display > LABEL > INPUT#button2 [task 2020-03-01T12:04:40.120Z] 12:04:40 INFO - mouseleave on P#display > LABEL > INPUT#button2 [task 2020-03-01T12:04:40.120Z] 12:04:40 INFO - mouseleave on P#display > LABEL [task 2020-03-01T12:04:40.122Z] 12:04:40 INFO - mouseleave on P#display [task 2020-03-01T12:04:40.123Z] 12:04:40 INFO - mouseover on HTML > BODY [task 2020-03-01T12:04:40.123Z] 12:04:40 INFO - TEST-PASS | dom/events/test/test_bug656379-2.html | Button 1 should not be hovered after mousemove over button2 [task 2020-03-01T12:04:40.124Z] 12:04:40 INFO - TEST-PASS | dom/events/test/test_bug656379-2.html | Label 1 should not be hovered after mousemove over button2 [task 2020-03-01T12:04:40.125Z] 12:04:40 INFO - Buffered messages finished [task 2020-03-01T12:04:40.126Z] 12:04:40 INFO - TEST-UNEXPECTED-FAIL | dom/events/test/test_bug656379-2.html | Button 2 should be hovered after mousemove over button2 - got false, expected true [task 2020-03-01T12:04:40.126Z] 12:04:40 INFO - SimpleTest.is@SimpleTest/SimpleTest.js:383:14 [task 2020-03-01T12:04:40.126Z] 12:04:40 INFO - tests@dom/events/test/test_bug656379-2.html:80:5 [task 2020-03-01T12:04:40.127Z] 12:04:40 INFO - execNext@dom/events/test/test_bug656379-2.html:101:30 [task 2020-03-01T12:04:40.127Z] 12:04:40 INFO - TEST-PASS | dom/events/test/test_bug656379-2.html | Label 2 should not be hovered after mousemove over label2 [task 2020-03-01T12:04:40.129Z] 12:04:40 INFO - Synthesizing mousemove on label2... [task 2020-03-01T12:04:40.129Z] 12:04:40 INFO - mouseout on HTML > BODY [task 2020-03-01T12:04:40.129Z] 12:04:40 INFO - mouseover on P#display > LABEL > SPAN#label2 [task 2020-03-01T12:04:40.130Z] 12:04:40 INFO - mouseenter on P#display [task 2020-03-01T12:04:40.130Z] 12:04:40 INFO - mouseenter on P#display > LABEL [task 2020-03-01T12:04:40.131Z] 12:04:40 INFO - mouseenter on P#display > LABEL > SPAN#label2 [task 2020-03-01T12:04:40.132Z] 12:04:40 INFO - mousemove on P#display > LABEL > SPAN#label2 [task 2020-03-01T12:04:40.133Z] 12:04:40 INFO - TEST-PASS | dom/events/test/test_bug656379-2.html | Button 1 should not be hovered after mousemove over label2 [task 2020-03-01T12:04:40.133Z] 12:04:40 INFO - TEST-PASS | dom/events/test/test_bug656379-2.html | Label 1 should not be hovered after mousemove over label2 ``` And same for bug 1545222: ``` [task 2020-03-01T04:57:03.470Z] 04:57:03 INFO - TEST-START | dom/events/test/test_bug656379-2.html [task 2020-03-01T04:57:03.526Z] 04:57:03 INFO - TEST-INFO | started process screentopng [task 2020-03-01T04:57:03.853Z] 04:57:03 INFO - TEST-INFO | screentopng: exit 0 [task 2020-03-01T04:57:03.853Z] 04:57:03 INFO - Buffered messages logged at 04:57:03 [task 2020-03-01T04:57:03.853Z] 04:57:03 INFO - must wait for load [task 2020-03-01T04:57:03.854Z] 04:57:03 INFO - mousemove on P#display > LABEL#label1 [task 2020-03-01T04:57:03.854Z] 04:57:03 INFO - Buffered messages finished [task 2020-03-01T04:57:03.858Z] 04:57:03 INFO - TEST-UNEXPECTED-FAIL | dom/events/test/test_bug656379-2.html | Button 1 should be hovered after mousemove over label1 - got false, expected true [task 2020-03-01T04:57:03.858Z] 04:57:03 INFO - SimpleTest.is@SimpleTest/SimpleTest.js:383:14 [task 2020-03-01T04:57:03.858Z] 04:57:03 INFO - tests@dom/events/test/test_bug656379-2.html:58:5 [task 2020-03-01T04:57:03.858Z] 04:57:03 INFO - execNext@dom/events/test/test_bug656379-2.html:92:30 [task 2020-03-01T04:57:03.858Z] 04:57:03 INFO - Not taking screenshot here: see the one that was previously logged [task 2020-03-01T04:57:03.858Z] 04:57:03 INFO - TEST-UNEXPECTED-FAIL | dom/events/test/test_bug656379-2.html | Label 1 should be hovered after mousemove over label1 - got false, expected true [task 2020-03-01T04:57:03.858Z] 04:57:03 INFO - SimpleTest.is@SimpleTest/SimpleTest.js:383:14 [task 2020-03-01T04:57:03.858Z] 04:57:03 INFO - tests@dom/events/test/test_bug656379-2.html:60:5 [task 2020-03-01T04:57:03.858Z] 04:57:03 INFO - execNext@dom/events/test/test_bug656379-2.html:92:30 [task 2020-03-01T04:57:03.858Z] 04:57:03 INFO - TEST-PASS | dom/events/test/test_bug656379-2.html | Button 2 should not be hovered after mousemove over label1 [task 2020-03-01T04:57:03.859Z] 04:57:03 INFO - TEST-PASS | dom/events/test/test_bug656379-2.html | Label 2 should not be hovered after mousemove over label1 [task 2020-03-01T04:57:03.859Z] 04:57:03 INFO - mousemove on P#display > LABEL > INPUT#button2 [task 2020-03-01T04:57:03.859Z] 04:57:03 INFO - TEST-PASS | dom/events/test/test_bug656379-2.html | Button 1 should not be hovered after mousemove over button2 [task 2020-03-01T04:57:03.860Z] 04:57:03 INFO - TEST-PASS | dom/events/test/test_bug656379-2.html | Label 1 should not be hovered after mousemove over button2 [task 2020-03-01T04:57:03.861Z] 04:57:03 INFO - TEST-PASS | dom/events/test/test_bug656379-2.html | Button 2 should be hovered after mousemove over button2 [task 2020-03-01T04:57:03.861Z] 04:57:03 INFO - TEST-PASS | dom/events/test/test_bug656379-2.html | Label 2 should not be hovered after mousemove over label2 [task 2020-03-01T04:57:03.862Z] 04:57:03 INFO - mousemove on P#display > LABEL > SPAN#label2 [task 2020-03-01T04:57:03.863Z] 04:57:03 INFO - TEST-PASS | dom/events/test/test_bug656379-2.html | Button 1 should not be hovered after mousemove over label2 [task 2020-03-01T04:57:03.865Z] 04:57:03 INFO - TEST-PASS | dom/events/test/test_bug656379-2.html | Label 1 should not be hovered after mousemove over label2 [task 2020-03-01T04:57:03.865Z] 04:57:03 INFO - TEST-PASS | dom/events/test/test_bug656379-2.html | Button 2 should be hovered after mousemove over label2 [task 2020-03-01T04:57:03.867Z] 04:57:03 INFO - TEST-PASS | dom/events/test/test_bug656379-2.html | Label 2 should be hovered after mousemove over label2 [task 2020-03-01T04:57:03.867Z] 04:57:03 INFO - GECKO(2405) | MEMORY STAT | vsize 2617MB | residentFast 189MB | heapAllocated 34MB [task 2020-03-01T04:57:03.868Z] 04:57:03 INFO - TEST-OK | dom/events/test/test_bug656379-2.html | took 65ms ``` In those cases, `mousemove` events are fired as expected. [The `:hover` state is set by `EventStateManager::PreHandleEvent()`](https://searchfox.org/mozilla-central/rev/2c16c5c5ea7e5a105f2ae56e03a6cbf0021d002d/dom/events/EventStateManager.cpp#658,666,685) -> [`EventStateManager::GenerateMouseEnterExit()`](https://searchfox.org/mozilla-central/rev/2c16c5c5ea7e5a105f2ae56e03a6cbf0021d002d/dom/events/EventStateManager.cpp#4571,4579,4592) -> [`EventStateManager::NotifyMouseOver(()`](https://searchfox.org/mozilla-central/rev/2c16c5c5ea7e5a105f2ae56e03a6cbf0021d002d/dom/events/EventStateManager.cpp#4400,4441). I.e., the state is updated synchronously before dispathcing `mousemove` event at least in DOM code. On the other hand, [`Element::Matches()` goes into Stylo](https://searchfox.org/mozilla-central/rev/2c16c5c5ea7e5a105f2ae56e03a6cbf0021d002d/dom/base/Element.cpp#3034,3039). Emilio, is all resoucre about `:hover` state in stylo updated synchronously when `EventStateManager` updeates it?