Skip to content

Commit

Permalink
Correct an unsound optimization in event dispatch.
Browse files Browse the repository at this point in the history
  • Loading branch information
Ms2ger committed Sep 12, 2016
1 parent 6cb43f2 commit 3eaf1c1
Show file tree
Hide file tree
Showing 3 changed files with 12 additions and 14 deletions.
14 changes: 9 additions & 5 deletions components/script/dom/eventdispatcher.rs
Expand Up @@ -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);
Expand Down
8 changes: 0 additions & 8 deletions tests/wpt/metadata/dom/events/Event-propagation.html.ini

This file was deleted.

Expand Up @@ -11,14 +11,16 @@
test(function() {
var called = false;
var callback = function() { called = true };
this.add_cleanup(function() {
document.head.removeEventListener("foo", callback)
});
document.head.addEventListener("foo", callback);
document.head.dispatchEvent(ev);
assert_equals(called, expected, "Propagation flag");
// dispatchEvent resets the propagation flags so it will happily dispatch
// the event the second time around.
document.head.dispatchEvent(ev);
assert_equals(called, true, "Propagation flag after first dispatch");
document.head.removeEventListener("foo", callback);
}, desc);
}

Expand Down

0 comments on commit 3eaf1c1

Please sign in to comment.