we (web engine): Experimental web browser project to understand the limits of Claude
2
fork

Configure Feed

Select the types of activity you want to include in your feed.

Review fixes: stopPropagation must prevent bubble phase entry

- Check is_propagation_stopped before entering bubble phase in
run_event_dispatch (not just inside the loop)
- Remove redundant is_propagation_stopped check from invoke_listeners
(stopPropagation should not prevent remaining listeners on the same
node from firing, only stopImmediatePropagation does that)

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>

+1 -5
+1 -5
crates/js/src/dom_bridge.rs
··· 1941 1941 _ => false, 1942 1942 }; 1943 1943 1944 - if bubbles { 1944 + if bubbles && !is_propagation_stopped(&vm.gc, event_ref) { 1945 1945 set_builtin_prop(&mut vm.gc, event_ref, "eventPhase", Value::Number(3.0)); 1946 1946 set_builtin_prop(&mut vm.gc, event_ref, EVENT_PHASE_KEY, Value::Number(3.0)); 1947 1947 ··· 2069 2069 if is_immediate_stopped(&vm.gc, event_ref) { 2070 2070 break; 2071 2071 } 2072 - if is_propagation_stopped(&vm.gc, event_ref) && capture_only { 2073 - break; 2074 - } 2075 - 2076 2072 // Set `this` to currentTarget for the callback. 2077 2073 let old_this = vm.get_global("this").cloned(); 2078 2074 vm.set_global("this", Value::Object(current_target_wrapper));