Merge pull request #2568 from atom/first-crashed
Make sure guest view is destroyed immediately when embeder is closed
This commit is contained in:
commit
37044f6fd4
1 changed files with 11 additions and 1 deletions
|
@ -30,6 +30,10 @@ guestInstances = {}
|
||||||
embedderElementsMap = {}
|
embedderElementsMap = {}
|
||||||
reverseEmbedderElementsMap = {}
|
reverseEmbedderElementsMap = {}
|
||||||
|
|
||||||
|
# Moves the last element of array to the first one.
|
||||||
|
moveLastToFirst = (list) ->
|
||||||
|
list.unshift list.pop()
|
||||||
|
|
||||||
# Generate guestInstanceId.
|
# Generate guestInstanceId.
|
||||||
getNextInstanceId = (webContents) ->
|
getNextInstanceId = (webContents) ->
|
||||||
++nextInstanceId
|
++nextInstanceId
|
||||||
|
@ -46,7 +50,13 @@ createGuest = (embedder, params) ->
|
||||||
destroyEvents = ['destroyed', 'crashed', 'did-navigate-to-different-page']
|
destroyEvents = ['destroyed', 'crashed', 'did-navigate-to-different-page']
|
||||||
destroy = ->
|
destroy = ->
|
||||||
destroyGuest embedder, id if guestInstances[id]?
|
destroyGuest embedder, id if guestInstances[id]?
|
||||||
embedder.once event, destroy for event in destroyEvents
|
for event in destroyEvents
|
||||||
|
embedder.once event, destroy
|
||||||
|
# Users might also listen to the crashed event, so We must ensure the guest
|
||||||
|
# is destroyed before users' listener gets called. It is done by moving our
|
||||||
|
# listener to the first one in queue.
|
||||||
|
listeners = embedder._events[event]
|
||||||
|
moveLastToFirst listeners if Array.isArray listeners
|
||||||
guest.once 'destroyed', ->
|
guest.once 'destroyed', ->
|
||||||
embedder.removeListener event, destroy for event in destroyEvents
|
embedder.removeListener event, destroy for event in destroyEvents
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue