mirror of
https://github.com/servo/servo.git
synced 2025-08-03 12:40:06 +01:00
Auto merge of #13245 - servo:reset-stop-propagation, r=nox
Correct an unsound optimization in event dispatch. <!-- Reviewable:start --> This change is [<img src="https://reviewable.io/review_button.svg" height="34" align="absmiddle" alt="Reviewable"/>](https://reviewable.io/reviews/servo/servo/13245) <!-- Reviewable:end -->
This commit is contained in:
commit
bb53da6957
3 changed files with 12 additions and 14 deletions
|
@ -112,19 +112,23 @@ pub fn dispatch_event(target: &EventTarget,
|
|||
assert_eq!(event.phase(), EventPhase::None);
|
||||
assert!(event.GetCurrentTarget().is_none());
|
||||
|
||||
// Step 1.
|
||||
event.mark_as_dispatching();
|
||||
|
||||
// Step 2.
|
||||
event.set_target(target_override.unwrap_or(target));
|
||||
|
||||
if event.stop_propagation() {
|
||||
// If the event's stop propagation flag is set, we can skip everything because
|
||||
// it prevents the calls of the invoke algorithm in the spec and we asserted
|
||||
// at the beginning that steps 10-12 don't need to be executed.
|
||||
// it prevents the calls of the invoke algorithm in the spec.
|
||||
|
||||
// Step 10-12.
|
||||
event.clear_dispatching_flags();
|
||||
|
||||
// Step 14.
|
||||
return !event.DefaultPrevented();
|
||||
}
|
||||
|
||||
// Step 1. Postponed here for the reason stated above.
|
||||
event.mark_as_dispatching();
|
||||
|
||||
// Step 3. The "invoke" algorithm is only used on `target` separately,
|
||||
// so we don't put it in the path.
|
||||
rooted_vec!(let mut event_path);
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue