Reuse BrowserWindowProxy instances
authorKevin Sawicki <kevinsawicki@gmail.com>
Fri, 11 Dec 2015 01:20:10 +0000 (17:20 -0800)
committerKevin Sawicki <kevinsawicki@gmail.com>
Fri, 11 Dec 2015 01:20:10 +0000 (17:20 -0800)
atom/renderer/lib/override.coffee

index cb4fb8f..828c48c 100644 (file)
@@ -8,9 +8,18 @@ resolveURL = (url) ->
 
 # 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: ->
@@ -60,7 +69,7 @@ window.open = (url, frameName='', features='') ->
 
   guestId = ipcRenderer.sendSync 'ATOM_SHELL_GUEST_WINDOW_MANAGER_WINDOW_OPEN', url, frameName, options
   if guestId
-    new BrowserWindowProxy(guestId)
+    BrowserWindowProxy.getOrCreate(guestId)
   else
     null
 
@@ -96,7 +105,7 @@ ipcRenderer.on 'ATOM_SHELL_GUEST_WINDOW_POSTMESSAGE', (event, guestId, message,
   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.