From 75610505c61b275538c40c43f818a61bee000102 Mon Sep 17 00:00:00 2001 From: Joey Perrott Date: Mon, 21 Sep 2020 14:27:44 -0700 Subject: [PATCH] refactor(zone.js): remove usages of blacklist related to UNPATCHED_EVENTS (#38930) Remove usages of blacklist around UNPATCHED_EVENTS configuration PR Close #38930 --- packages/zone.js/STANDARD-APIS.md | 34 +++++++++---------- packages/zone.js/lib/common/events.ts | 10 +++--- packages/zone.js/test/browser/browser.spec.ts | 8 ++--- 3 files changed, 26 insertions(+), 26 deletions(-) diff --git a/packages/zone.js/STANDARD-APIS.md b/packages/zone.js/STANDARD-APIS.md index ed5d9c6581..81150e4e36 100644 --- a/packages/zone.js/STANDARD-APIS.md +++ b/packages/zone.js/STANDARD-APIS.md @@ -1,11 +1,11 @@ # Zone.js's support for standard apis Zone.js patched most standard APIs such as DOM event listeners, XMLHttpRequest in Browser, EventEmitter and fs API in Node.js so they can be in zone. - -In this document, all patched API are listed. + +In this document, all patched API are listed. For non-standard APIs, please see [NON-STANDARD-APIS.md](NON-STANDARD-APIS.md) - + ## Patch Mechanisms There are several patch mechanisms @@ -15,10 +15,10 @@ There are several patch mechanisms 1. MacroTask 2. MicroTask 3. EventTask - + Some APIs which should be treated as Tasks, but are currently still patched in the wrap way. These will be patched as Tasks soon. - -## Browser + +## Browser Web APIs @@ -26,7 +26,7 @@ Web APIs | --- | --- | --- | | setTimeout/clearTimeout | MacroTask | app can get handlerId, interval, args, isPeriodic(false) through task.data | | setImmediate/clearImmediate | MacroTask | same with setTimeout | -| setInterval/clearInterval | MacroTask | isPeriodic is true, so setInterval will not trigger onHasTask callback | +| setInterval/clearInterval | MacroTask | isPeriodic is true, so setInterval will not trigger onHasTask callback | | requestAnimationFrame/cancelAnimationFrame | MacroTask | | | mozRequestAnimationFrame/mozCancelAnimationFrame | MacroTask | | | webkitRequestAnimationFrame/webkitCancelAnimationFrame | MacroTask | | @@ -56,7 +56,7 @@ EventTarget from EventTarget will also be patched. - For browsers that do not support EventTarget, Zone.js will patch the following APIs in the IDL that inherit from EventTarget - + ||||| |---|---|---|---| |ApplicationCache|EventSource|FileReader|InputMethodContext| @@ -94,8 +94,8 @@ The following 'on' properties, such as onclick, onreadystatechange, are patched | --- | --- | --- | | setTimeout/clearTimeout | MacroTask | app can get handlerId, interval, args, isPeriodic(false) through task.data | | setImmediate/clearImmediate | MacroTask | same with setTimeout | -| setInterval/clearInterval | MacroTask | isPeriodic is true, so setInterval will not trigger onHasTask callback | -| process.nextTick | Microtask | isPeriodic is true, so setInterval will not trigger onHasTask callback | +| setInterval/clearInterval | MacroTask | isPeriodic is true, so setInterval will not trigger onHasTask callback | +| process.nextTick | Microtask | isPeriodic is true, so setInterval will not trigger onHasTask callback | | Promise | MicroTask | | | EventEmitter | EventTask | All APIs inherit EventEmitter are patched as EventTask | | crypto | MacroTask | | @@ -104,9 +104,9 @@ The following 'on' properties, such as onclick, onreadystatechange, are patched EventEmitter, addEventListener, prependEventListener and 'on' will be patched once as EventTasks, and removeEventListener and removeAllListeners will remove those EventTasks -## Electron +## Electron -Zone.js does not patch the Electron API, although in Electron both browser APIs and node APIs are patched, so +Zone.js does not patch the Electron API, although in Electron both browser APIs and node APIs are patched, so if you want to include Zone.js in Electron, please use dist/zone-mix.js ## ZoneAwareError @@ -117,7 +117,7 @@ This type of issue would happen when creating an error without `new`: `this` wou non-strict mode. It could cause some very difficult to detect issues. ```javascript - const error = Error(); + const error = Error(); ``` ZoneAwareError makes sure that `this` is ZoneAwareError even without new. @@ -127,10 +127,10 @@ ZoneAwareError makes sure that `this` is ZoneAwareError even without new. ZoneAwarePromise wraps the global Promise and makes it run in zones as a MicroTask. It also passes promise A+ tests. -## BlackListEvents +## UnpatchedEvents -Sometimes we don't want some `event` to be patched by `zone.js`, we can blacklist events -by following settings. +Sometimes we don't want some `event` to be patched by `zone.js`, we can instruct zone.js to leave +these `event` to be unpatched by following settings. ```javascript // disable on properties @@ -144,5 +144,5 @@ by following settings. }); // disable addEventListener - global['__zone_symbol__BLACK_LISTED_EVENTS'] = ['scroll']; + global['__zone_symbol__UNPATCHED_EVENTS'] = ['scroll']; ``` diff --git a/packages/zone.js/lib/common/events.ts b/packages/zone.js/lib/common/events.ts index e03783f7cd..7d70918eca 100644 --- a/packages/zone.js/lib/common/events.ts +++ b/packages/zone.js/lib/common/events.ts @@ -351,7 +351,7 @@ export function patchEventTarget( const compare = (patchOptions && patchOptions.diff) ? patchOptions.diff : compareTaskCallbackVsDelegate; - const blackListedEvents: string[] = (Zone as any)[zoneSymbol('BLACK_LISTED_EVENTS')]; + const unpatchedEvents: string[] = (Zone as any)[zoneSymbol('UNPATCHED_EVENTS')]; const passiveEvents: string[] = _global[zoneSymbol('PASSIVE_EVENTS')]; const makeAddListener = function( @@ -391,10 +391,10 @@ export function patchEventTarget( passiveSupported && !!passiveEvents && passiveEvents.indexOf(eventName) !== -1; const options = buildEventListenerOptions(arguments[2], passive); - if (blackListedEvents) { - // check black list - for (let i = 0; i < blackListedEvents.length; i++) { - if (eventName === blackListedEvents[i]) { + if (unpatchedEvents) { + // check upatched list + for (let i = 0; i < unpatchedEvents.length; i++) { + if (eventName === unpatchedEvents[i]) { if (passive) { return nativeListener.call(target, eventName, delegate, options); } else { diff --git a/packages/zone.js/test/browser/browser.spec.ts b/packages/zone.js/test/browser/browser.spec.ts index c635cfbfb5..cba4176e38 100644 --- a/packages/zone.js/test/browser/browser.spec.ts +++ b/packages/zone.js/test/browser/browser.spec.ts @@ -1154,10 +1154,10 @@ describe('Zone', function() { it('should not be passive with global variable defined with passive false option', () => { testPassive('touchstart', 'defaultPrevented', {passive: false}); }); - it('should be passive with global variable defined and also blacklisted', () => { + it('should be passive with global variable defined and also unpatched', () => { testPassive('scroll', 'default will run', undefined); }); - it('should not be passive without global variable defined and also blacklisted', () => { + it('should not be passive without global variable defined and also unpatched', () => { testPassive('wheel', 'defaultPrevented', undefined); }); }); @@ -1376,7 +1376,7 @@ describe('Zone', function() { let hookSpy2 = jasmine.createSpy('spy2'); let hookSpy3 = jasmine.createSpy('spy3'); let logs: string[] = []; - const isBlacklistedEvent = function(source: string) { + const isUnpatchedEvent = function(source: string) { return source.lastIndexOf('click') !== -1; }; const zone1 = Zone.current.fork({ @@ -1385,7 +1385,7 @@ describe('Zone', function() { parentZoneDelegate: ZoneDelegate, currentZone: Zone, targetZone: Zone, task: Task): any => { if ((task.type === 'eventTask' || task.type === 'macroTask') && - isBlacklistedEvent(task.source)) { + isUnpatchedEvent(task.source)) { task.cancelScheduleRequest(); return zone2.scheduleTask(task);