refactor(zone.js): remove usages of blacklist related to UNPATCHED_EVENTS (#38930)

Remove usages of blacklist around UNPATCHED_EVENTS configuration

PR Close #38930
This commit is contained in:
Joey Perrott 2020-09-21 14:27:44 -07:00 committed by Misko Hevery
parent ba3f4c26bb
commit 75610505c6
3 changed files with 26 additions and 26 deletions

View File

@ -1,11 +1,11 @@
# Zone.js's support for standard apis # 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. 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) For non-standard APIs, please see [NON-STANDARD-APIS.md](NON-STANDARD-APIS.md)
## Patch Mechanisms ## Patch Mechanisms
There are several patch mechanisms There are several patch mechanisms
@ -15,10 +15,10 @@ There are several patch mechanisms
1. MacroTask 1. MacroTask
2. MicroTask 2. MicroTask
3. EventTask 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. 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 Web APIs
@ -26,7 +26,7 @@ Web APIs
| --- | --- | --- | | --- | --- | --- |
| setTimeout/clearTimeout | MacroTask | app can get handlerId, interval, args, isPeriodic(false) through task.data | | setTimeout/clearTimeout | MacroTask | app can get handlerId, interval, args, isPeriodic(false) through task.data |
| setImmediate/clearImmediate | MacroTask | same with setTimeout | | 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 | | | requestAnimationFrame/cancelAnimationFrame | MacroTask | |
| mozRequestAnimationFrame/mozCancelAnimationFrame | MacroTask | | | mozRequestAnimationFrame/mozCancelAnimationFrame | MacroTask | |
| webkitRequestAnimationFrame/webkitCancelAnimationFrame | MacroTask | | | webkitRequestAnimationFrame/webkitCancelAnimationFrame | MacroTask | |
@ -56,7 +56,7 @@ EventTarget
from EventTarget will also be patched. from EventTarget will also be patched.
- For browsers that do not support EventTarget, Zone.js will patch the following APIs in the IDL - For browsers that do not support EventTarget, Zone.js will patch the following APIs in the IDL
that inherit from EventTarget that inherit from EventTarget
||||| |||||
|---|---|---|---| |---|---|---|---|
|ApplicationCache|EventSource|FileReader|InputMethodContext| |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 | | setTimeout/clearTimeout | MacroTask | app can get handlerId, interval, args, isPeriodic(false) through task.data |
| setImmediate/clearImmediate | MacroTask | same with setTimeout | | 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 |
| process.nextTick | Microtask | 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 | | | Promise | MicroTask | |
| EventEmitter | EventTask | All APIs inherit EventEmitter are patched as EventTask | | EventEmitter | EventTask | All APIs inherit EventEmitter are patched as EventTask |
| crypto | MacroTask | | | 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 EventEmitter, addEventListener, prependEventListener and 'on' will be patched once as EventTasks, and removeEventListener and
removeAllListeners will remove those EventTasks 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 if you want to include Zone.js in Electron, please use dist/zone-mix.js
## ZoneAwareError ## 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. non-strict mode. It could cause some very difficult to detect issues.
```javascript ```javascript
const error = Error(); const error = Error();
``` ```
ZoneAwareError makes sure that `this` is ZoneAwareError even without new. 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. ZoneAwarePromise wraps the global Promise and makes it run in zones as a MicroTask.
It also passes promise A+ tests. 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 Sometimes we don't want some `event` to be patched by `zone.js`, we can instruct zone.js to leave
by following settings. these `event` to be unpatched by following settings.
```javascript ```javascript
// disable on properties // disable on properties
@ -144,5 +144,5 @@ by following settings.
}); });
// disable addEventListener // disable addEventListener
global['__zone_symbol__BLACK_LISTED_EVENTS'] = ['scroll']; global['__zone_symbol__UNPATCHED_EVENTS'] = ['scroll'];
``` ```

View File

@ -351,7 +351,7 @@ export function patchEventTarget(
const compare = const compare =
(patchOptions && patchOptions.diff) ? patchOptions.diff : compareTaskCallbackVsDelegate; (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 passiveEvents: string[] = _global[zoneSymbol('PASSIVE_EVENTS')];
const makeAddListener = function( const makeAddListener = function(
@ -391,10 +391,10 @@ export function patchEventTarget(
passiveSupported && !!passiveEvents && passiveEvents.indexOf(eventName) !== -1; passiveSupported && !!passiveEvents && passiveEvents.indexOf(eventName) !== -1;
const options = buildEventListenerOptions(arguments[2], passive); const options = buildEventListenerOptions(arguments[2], passive);
if (blackListedEvents) { if (unpatchedEvents) {
// check black list // check upatched list
for (let i = 0; i < blackListedEvents.length; i++) { for (let i = 0; i < unpatchedEvents.length; i++) {
if (eventName === blackListedEvents[i]) { if (eventName === unpatchedEvents[i]) {
if (passive) { if (passive) {
return nativeListener.call(target, eventName, delegate, options); return nativeListener.call(target, eventName, delegate, options);
} else { } else {

View File

@ -1154,10 +1154,10 @@ describe('Zone', function() {
it('should not be passive with global variable defined with passive false option', () => { it('should not be passive with global variable defined with passive false option', () => {
testPassive('touchstart', 'defaultPrevented', {passive: false}); 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); 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); testPassive('wheel', 'defaultPrevented', undefined);
}); });
}); });
@ -1376,7 +1376,7 @@ describe('Zone', function() {
let hookSpy2 = jasmine.createSpy('spy2'); let hookSpy2 = jasmine.createSpy('spy2');
let hookSpy3 = jasmine.createSpy('spy3'); let hookSpy3 = jasmine.createSpy('spy3');
let logs: string[] = []; let logs: string[] = [];
const isBlacklistedEvent = function(source: string) { const isUnpatchedEvent = function(source: string) {
return source.lastIndexOf('click') !== -1; return source.lastIndexOf('click') !== -1;
}; };
const zone1 = Zone.current.fork({ const zone1 = Zone.current.fork({
@ -1385,7 +1385,7 @@ describe('Zone', function() {
parentZoneDelegate: ZoneDelegate, currentZone: Zone, targetZone: Zone, task: Task): parentZoneDelegate: ZoneDelegate, currentZone: Zone, targetZone: Zone, task: Task):
any => { any => {
if ((task.type === 'eventTask' || task.type === 'macroTask') && if ((task.type === 'eventTask' || task.type === 'macroTask') &&
isBlacklistedEvent(task.source)) { isUnpatchedEvent(task.source)) {
task.cancelScheduleRequest(); task.cancelScheduleRequest();
return zone2.scheduleTask(task); return zone2.scheduleTask(task);