# Window object returned by "window.open".
class BrowserWindowProxy
+ @proxies: {}
+
+ @getOrCreate: (guestId) ->
+ @proxies[guestId] ?= new BrowserWindowProxy(guestId)
+
+ @removeWindow: (guestId) ->
+ delete @proxies[guestId]
+
constructor: (@guestId) ->
@closed = false
ipcRenderer.once "ATOM_SHELL_GUEST_WINDOW_MANAGER_WINDOW_CLOSED_#{@guestId}", =>
+ BrowserWindowProxy.removeWindow(@guestId)
@closed = true
close: ->
guestId = ipcRenderer.sendSync 'ATOM_SHELL_GUEST_WINDOW_MANAGER_WINDOW_OPEN', url, frameName, options
if guestId
- new BrowserWindowProxy(guestId)
+ BrowserWindowProxy.getOrCreate(guestId)
else
null
event.initEvent 'message', false, false
event.data = message
event.origin = sourceOrigin
- event.source = new BrowserWindowProxy(guestId)
+ event.source = BrowserWindowProxy.getOrCreate(guestId)
window.dispatchEvent event
# Forward history operations to browser.