Skip to content

events: allow an event to be dispatched multiple times - #39395

Closed
lpinca wants to merge 1 commit into
nodejs:masterfrom
lpinca:fix/target-reset
Closed

events: allow an event to be dispatched multiple times#39395
lpinca wants to merge 1 commit into
nodejs:masterfrom
lpinca:fix/target-reset

Conversation

@lpinca

@lpincalpinca commented Jul 15, 2021

Copy link
Copy Markdown
Member

Use a different flag to prevent recursive dispatching.

@nodejs-github-botnodejs-github-bot added the needs-ci PRs that need a full CI run. label Jul 15, 2021
Comment threadtest/parallel/test-eventtarget.js Outdated
Use a different flag to prevent recursive dispatching.
@lpincalpinca changed the title events: reset the event target to nullevents: allow an event to be dispatched multiple timesJul 21, 2021
@lpinca

Copy link
Copy Markdown
MemberAuthor

@aduh95 PTAL.

// API completeness.

composedPath() { return this[kTarget] ? [this[kTarget]] : []; }
composedPath() { return this[kIsBeingDispatched] ? [this[kTarget]] : []; }

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Unrelated to this PR: Chromium and Safari both return an empty array when dispatching an event. Firefox has the same behavior as Node.js. I couldn't find which behavior is spec compliant.

{// Same event dispatched multiple times.constevent=newEvent('foo');consteventTarget1=newEventTarget();consteventTarget2=newEventTarget();eventTarget1.addEventListener('foo',((event)=>{console.log(event.target===eventTarget1,event.eventPhase===Event.AT_TARGET);// true trueconstpath=event.composedPath();console.log(path.length===1,path[0]===eventTarget1);// depends on the browser:// On Firefox + Node.js: true true// On Safari + Chromium : false false}));eventTarget2.addEventListener('foo',((event)=>{console.log(event.target===eventTarget2,event.eventPhase===Event.AT_TARGET);// true trueconstpath=event.composedPath();console.log(path.length===1,path[0]===eventTarget2);// depends on the browser}));eventTarget1.dispatchEvent(event);console.log(event.target===eventTarget1,event.eventPhase===Event.NONE);// true trueconsole.log(event.composedPath().length===0);// trueeventTarget2.dispatchEvent(event);console.log(event.target===eventTarget2,event.eventPhase===Event.NONE);// true trueconsole.log(event.composedPath().length===0);// true}

@aduh95aduh95 added author ready PRs that have at least one approval, no pending requests for changes, and a CI started. request-ci Add this label to start a Jenkins CI on a PR. labels Jul 21, 2021
@github-actionsgithub-actionsBot removed the request-ci Add this label to start a Jenkins CI on a PR. label Jul 21, 2021
@nodejs-github-bot

Copy link
Copy Markdown
Collaborator

@nodejs-github-bot

Copy link
Copy Markdown
Collaborator

@nodejs-github-bot

Copy link
Copy Markdown
Collaborator

@lpincalpinca added the eventtarget Issues and PRs related to the EventTarget implementation. label Jul 25, 2021
lpinca added a commit that referenced this pull request Jul 25, 2021
Use a different flag to prevent recursive dispatching.
PR-URL: #39395
Reviewed-By: Antoine du Hamel <duhamelantoine1995@gmail.com>
Reviewed-By: James M Snell <jasnell@gmail.com>
@lpinca

Copy link
Copy Markdown
MemberAuthor

Landed in 5c4e673.

@lpincalpinca closed this Jul 25, 2021
@lpinca
lpinca deleted the fix/target-reset branch July 25, 2021 14:18
targos pushed a commit that referenced this pull request Jul 26, 2021
Use a different flag to prevent recursive dispatching.
PR-URL: #39395
Reviewed-By: Antoine du Hamel <duhamelantoine1995@gmail.com>
Reviewed-By: James M Snell <jasnell@gmail.com>
@BethGriggsBethGriggs mentioned this pull request Jul 26, 2021
BethGriggs pushed a commit that referenced this pull request Jul 29, 2021
Use a different flag to prevent recursive dispatching.
PR-URL: #39395
Reviewed-By: Antoine du Hamel <duhamelantoine1995@gmail.com>
Reviewed-By: James M Snell <jasnell@gmail.com>
mrbbot added a commit to mrbbot/node that referenced this pull request Aug 15, 2021
Fast path for EventTarget dispatch with no listeners didn't reset
kIsBeingDispatched flag, meaning same event couldn't be dispatched
multiple times.
Refs: nodejs#39395
lpinca pushed a commit that referenced this pull request Sep 26, 2021
Fast path for EventTarget dispatch with no listeners didn't reset
kIsBeingDispatched flag, meaning same event couldn't be dispatched
multiple times.
PR-URL: #39772
Refs: #39395
Reviewed-By: James M Snell <jasnell@gmail.com>
Reviewed-By: Luigi Pinca <luigipinca@gmail.com>
Reviewed-By: Anna Henningsen <anna@addaleax.net>
targos pushed a commit that referenced this pull request Oct 4, 2021
Fast path for EventTarget dispatch with no listeners didn't reset
kIsBeingDispatched flag, meaning same event couldn't be dispatched
multiple times.
PR-URL: #39772
Refs: #39395
Reviewed-By: James M Snell <jasnell@gmail.com>
Reviewed-By: Luigi Pinca <luigipinca@gmail.com>
Reviewed-By: Anna Henningsen <anna@addaleax.net>
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

author readyPRs that have at least one approval, no pending requests for changes, and a CI started.eventtargetIssues and PRs related to the EventTarget implementation.needs-ciPRs that need a full CI run.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

5 participants

@lpinca@nodejs-github-bot@jasnell@aduh95@targos