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:
		
							parent
							
								
									ba3f4c26bb
								
							
						
					
					
						commit
						75610505c6
					
				| @ -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']; | ||||||
| ``` | ``` | ||||||
|  | |||||||
| @ -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 { | ||||||
|  | |||||||
| @ -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); | ||||||
|  | |||||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user