Clean up WebView's ipc listeners when detached, fix #1185
This commit is contained in:
		
					parent
					
						
							
								5bd3cfc4f6
							
						
					
				
			
			
				commit
				
					
						d46c64f64b
					
				
			
		
					 2 changed files with 7 additions and 2 deletions
				
			
		|  | @ -40,6 +40,11 @@ module.exports = | ||||||
|         domEvent[f] = args[i] |         domEvent[f] = args[i] | ||||||
|       webView.onSizeChanged domEvent |       webView.onSizeChanged domEvent | ||||||
| 
 | 
 | ||||||
|  |   deregisterEvents: (viewInstanceId) -> | ||||||
|  |     ipc.removeAllListeners "ATOM_SHELL_GUEST_VIEW_INTERNAL_DISPATCH_EVENT-#{viewInstanceId}" | ||||||
|  |     ipc.removeAllListeners "ATOM_SHELL_GUEST_VIEW_INTERNAL_IPC_MESSAGE-#{viewInstanceId}" | ||||||
|  |     ipc.removeAllListeners "ATOM_SHELL_GUEST_VIEW_INTERNAL_SIZE_CHANGED-#{viewInstanceId}" | ||||||
|  | 
 | ||||||
|   createGuest: (type, params, callback) -> |   createGuest: (type, params, callback) -> | ||||||
|     requestId++ |     requestId++ | ||||||
|     ipc.send 'ATOM_SHELL_GUEST_VIEW_MANAGER_CREATE_GUEST', type, params, requestId |     ipc.send 'ATOM_SHELL_GUEST_VIEW_MANAGER_CREATE_GUEST', type, params, requestId | ||||||
|  |  | ||||||
|  | @ -28,8 +28,6 @@ class WebViewImpl | ||||||
| 
 | 
 | ||||||
|     @viewInstanceId = getNextId() |     @viewInstanceId = getNextId() | ||||||
| 
 | 
 | ||||||
|     guestViewInternal.registerEvents this, @viewInstanceId |  | ||||||
| 
 |  | ||||||
|     shadowRoot.appendChild @browserPluginNode |     shadowRoot.appendChild @browserPluginNode | ||||||
| 
 | 
 | ||||||
|   createBrowserPluginNode: -> |   createBrowserPluginNode: -> | ||||||
|  | @ -222,6 +220,7 @@ registerWebViewElement = -> | ||||||
|   proto.detachedCallback = -> |   proto.detachedCallback = -> | ||||||
|     internal = v8Util.getHiddenValue this, 'internal' |     internal = v8Util.getHiddenValue this, 'internal' | ||||||
|     return unless internal |     return unless internal | ||||||
|  |     guestViewInternal.deregisterEvents internal.viewInstanceId | ||||||
|     internal.elementAttached = false |     internal.elementAttached = false | ||||||
|     internal.reset() |     internal.reset() | ||||||
| 
 | 
 | ||||||
|  | @ -229,6 +228,7 @@ registerWebViewElement = -> | ||||||
|     internal = v8Util.getHiddenValue this, 'internal' |     internal = v8Util.getHiddenValue this, 'internal' | ||||||
|     return unless internal |     return unless internal | ||||||
|     unless internal.elementAttached |     unless internal.elementAttached | ||||||
|  |       guestViewInternal.registerEvents internal, internal.viewInstanceId | ||||||
|       internal.elementAttached = true |       internal.elementAttached = true | ||||||
|       internal.attributes[webViewConstants.ATTRIBUTE_SRC].parse() |       internal.attributes[webViewConstants.ATTRIBUTE_SRC].parse() | ||||||
| 
 | 
 | ||||||
|  |  | ||||||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue
	
	 Cheng Zhao
				Cheng Zhao