| FazBrowse GitHub Viewer | Trending | | Home |
| Tools: [Download Repo ZIP] [Original HTTPS Page] |
1 parent 438d9de commit f08e2c0
5 files changed
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
@@ -1282,9 +1282,10 @@ This is not used in Node.js and is provided purely for completeness. | |||
| 1282 | 1282 | added: v14.5.0 | |
| 1283 | 1283 | --> | |
| 1284 | 1284 | ||
| 1285 | - * Type: {boolean} Always returns `false`. | ||
| 1285 | + * Type: {boolean} True for Node.js internal events, false otherwise. | ||
| 1286 | 1286 | ||
| 1287 | - This is not used in Node.js and is provided purely for completeness. | ||
| 1287 | + Currently only `AbortSignal`s' `"abort"` event is fired with `isTrusted` | ||
| 1288 | + set to `true`. | ||
| 1288 | 1289 | ||
| 1289 | 1290 | #### `event.preventDefault()` | |
| 1290 | 1291 | <!-- YAML | |
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
@@ -11,7 +11,8 @@ const { | |||
| 11 | 11 | ||
| 12 | 12 | const { | |
| 13 | 13 | EventTarget, | |
| 14 | - Event | ||
| 14 | + Event, | ||
| 15 | + kTrustEvent | ||
| 15 | 16 | } = require('internal/event_target'); | |
| 16 | 17 | const { | |
| 17 | 18 | customInspectSymbol, | |
@@ -49,7 +50,9 @@ ObjectDefineProperties(AbortSignal.prototype, { | |||
| 49 | 50 | function abortSignal(signal) { | |
| 50 | 51 | if (signal[kAborted]) return; | |
| 51 | 52 | signal[kAborted] = true; | |
| 52 | - const event = new Event('abort'); | ||
| 53 | + const event = new Event('abort', { | ||
| 54 | + [kTrustEvent]: true | ||
| 55 | + }); | ||
| 53 | 56 | if (typeof signal.onabort === 'function') { | |
| 54 | 57 | signal.onabort(event); | |
| 55 | 58 | } | |
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
@@ -9,10 +9,12 @@ const { | |||
| 9 | 9 | ObjectAssign, | |
| 10 | 10 | ObjectDefineProperties, | |
| 11 | 11 | ObjectDefineProperty, | |
| 12 | + ObjectGetOwnPropertyDescriptor, | ||
| 12 | 13 | String, | |
| 13 | 14 | Symbol, | |
| 14 | 15 | SymbolFor, | |
| 15 | 16 | SymbolToStringTag, | |
| 17 | + SafeWeakSet, | ||
| 16 | 18 | } = primordials; | |
| 17 | 19 | ||
| 18 | 20 | const { | |
@@ -41,6 +43,7 @@ const kRemoveListener = Symbol('kRemoveListener'); | |||
| 41 | 43 | const kIsNodeStyleListener = Symbol('kIsNodeStyleListener'); | |
| 42 | 44 | const kMaxListeners = Symbol('kMaxListeners'); | |
| 43 | 45 | const kMaxListenersWarned = Symbol('kMaxListenersWarned'); | |
| 46 | + const kTrustEvent = Symbol('kTrustEvent'); | ||
| 44 | 47 | ||
| 45 | 48 | // Lazy load perf_hooks to avoid the additional overhead on startup | |
| 46 | 49 | let perf_hooks; | |
@@ -61,7 +64,12 @@ const kBubbles = Symbol('bubbles'); | |||
| 61 | 64 | const kComposed = Symbol('composed'); | |
| 62 | 65 | const kPropagationStopped = Symbol('propagationStopped'); | |
| 63 | 66 | ||
| 64 | - const isTrusted = () => false; | ||
| 67 | + const isTrustedSet = new SafeWeakSet(); | ||
| 68 | + const isTrusted = ObjectGetOwnPropertyDescriptor({ | ||
| 69 | + get isTrusted() { | ||
| 70 | + return isTrustedSet.has(this); | ||
| 71 | + } | ||
| 72 | + }, 'isTrusted').get; | ||
| 65 | 73 | ||
| 66 | 74 | class Event { | |
| 67 | 75 | constructor(type, options) { | |
@@ -77,6 +85,10 @@ class Event { | |||
| 77 | 85 | this[kDefaultPrevented] = false; | |
| 78 | 86 | this[kTimestamp] = lazyNow(); | |
| 79 | 87 | this[kPropagationStopped] = false; | |
| 88 | + if (options != null && options[kTrustEvent]) { | ||
| 89 | + isTrustedSet.add(this); | ||
| 90 | + } | ||
| 91 | + | ||
| 80 | 92 | // isTrusted is special (LegacyUnforgeable) | |
| 81 | 93 | ObjectDefineProperty(this, 'isTrusted', { | |
| 82 | 94 | get: isTrusted, | |
@@ -573,5 +585,6 @@ module.exports = { | |||
| 573 | 585 | initNodeEventTarget, | |
| 574 | 586 | kCreateEvent, | |
| 575 | 587 | kNewListener, | |
| 588 | + kTrustEvent, | ||
| 576 | 589 | kRemoveListener, | |
| 577 | 590 | }; | |
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
@@ -101,6 +101,10 @@ primordials.SafeSet = makeSafe( | |||
| 101 | 101 | Set, | |
| 102 | 102 | class SafeSet extends Set {} | |
| 103 | 103 | ); | |
| 104 | + primordials.SafeWeakSet = makeSafe( | ||
| 105 | + WeakSet, | ||
| 106 | + class SafeWeakSet extends WeakSet {} | ||
| 107 | + ); | ||
| 104 | 108 | primordials.SafePromise = makeSafe( | |
| 105 | 109 | Promise, | |
| 106 | 110 | class SafePromise extends Promise {} | |
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
@@ -1,11 +1,13 @@ | |||
| 1 | - // Flags: --no-warnings | ||
| 1 | + // Flags: --no-warnings --expose-internals | ||
| 2 | 2 | 'use strict'; | |
| 3 | 3 | ||
| 4 | 4 | const common = require('../common'); | |
| 5 | 5 | ||
| 6 | 6 | const { ok, strictEqual } = require('assert'); | |
| 7 | + const { Event } = require('internal/event_target'); | ||
| 7 | 8 | ||
| 8 | 9 | { | |
| 10 | + // Tests that abort is fired with the correct event type on AbortControllers | ||
| 9 | 11 | const ac = new AbortController(); | |
| 10 | 12 | ok(ac.signal); | |
| 11 | 13 | ac.signal.onabort = common.mustCall((event) => { | |
@@ -20,3 +22,33 @@ const { ok, strictEqual } = require('assert'); | |||
| 20 | 22 | ac.abort(); | |
| 21 | 23 | ok(ac.signal.aborted); | |
| 22 | 24 | } | |
| 25 | + | ||
| 26 | + { | ||
| 27 | + // Tests that abort events are trusted | ||
| 28 | + const ac = new AbortController(); | ||
| 29 | + ac.signal.addEventListener('abort', common.mustCall((event) => { | ||
| 30 | + ok(event.isTrusted); | ||
| 31 | + })); | ||
| 32 | + ac.abort(); | ||
| 33 | + } | ||
| 34 | + | ||
| 35 | + { | ||
| 36 | + // Tests that abort events have the same `isTrusted` reference | ||
| 37 | + const first = new AbortController(); | ||
| 38 | + const second = new AbortController(); | ||
| 39 | + let ev1, ev2; | ||
| 40 | + const ev3 = new Event('abort'); | ||
| 41 | + first.signal.addEventListener('abort', common.mustCall((event) => { | ||
| 42 | + ev1 = event; | ||
| 43 | + })); | ||
| 44 | + second.signal.addEventListener('abort', common.mustCall((event) => { | ||
| 45 | + ev2 = event; | ||
| 46 | + })); | ||
| 47 | + first.abort(); | ||
| 48 | + second.abort(); | ||
| 49 | + const firstTrusted = Reflect.getOwnPropertyDescriptor(ev1, 'isTrusted').get; | ||
| 50 | + const secondTrusted = Reflect.getOwnPropertyDescriptor(ev2, 'isTrusted').get; | ||
| 51 | + const untrusted = Reflect.getOwnPropertyDescriptor(ev3, 'isTrusted').get; | ||
| 52 | + strictEqual(firstTrusted, secondTrusted); | ||
| 53 | + strictEqual(untrusted, firstTrusted); | ||
| 54 | + } | ||
| Back | FazBrowse Home | New Git URL |
0 commit comments