From 49ca7509c7cae2b3c0983cca3f4659e711ce7b86 Mon Sep 17 00:00:00 2001 From: Kevin Sawicki Date: Thu, 10 Dec 2015 17:20:10 -0800 Subject: [PATCH] Reuse BrowserWindowProxy instances --- atom/renderer/lib/override.coffee | 13 +++++++++++-- 1 file changed, 11 insertions(+), 2 deletions(-) diff --git a/atom/renderer/lib/override.coffee b/atom/renderer/lib/override.coffee index cb4fb8fbac2d..828c48c0614c 100644 --- a/atom/renderer/lib/override.coffee +++ b/atom/renderer/lib/override.coffee @@ -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.