Make window.opener a BrowserWindowProxy
This commit is contained in:
parent
606fb0615f
commit
574eec3e74
3 changed files with 14 additions and 5 deletions
|
@ -94,9 +94,10 @@ window.prompt = ->
|
||||||
# Implement window.postMessage if current window is a guest window.
|
# Implement window.postMessage if current window is a guest window.
|
||||||
guestId = ipcRenderer.sendSync 'ATOM_SHELL_GUEST_WINDOW_MANAGER_GET_GUEST_ID'
|
guestId = ipcRenderer.sendSync 'ATOM_SHELL_GUEST_WINDOW_MANAGER_GET_GUEST_ID'
|
||||||
if guestId?
|
if guestId?
|
||||||
window.opener =
|
window.opener = BrowserWindowProxy.getOrCreate(guestId)
|
||||||
postMessage: (message, targetOrigin='*') ->
|
Object.setPrototypeOf(window.opener, null)
|
||||||
ipcRenderer.send 'ATOM_SHELL_GUEST_WINDOW_MANAGER_WINDOW_OPENER_POSTMESSAGE', guestId, message, targetOrigin, location.origin
|
window.opener.postMessage = (message, targetOrigin='*') ->
|
||||||
|
ipcRenderer.send 'ATOM_SHELL_GUEST_WINDOW_MANAGER_WINDOW_OPENER_POSTMESSAGE', guestId, message, targetOrigin, location.origin
|
||||||
|
|
||||||
ipcRenderer.on 'ATOM_SHELL_GUEST_WINDOW_POSTMESSAGE', (event, guestId, message, sourceOrigin) ->
|
ipcRenderer.on 'ATOM_SHELL_GUEST_WINDOW_POSTMESSAGE', (event, guestId, message, sourceOrigin) ->
|
||||||
# Manually dispatch event instead of using postMessage because we also need to
|
# Manually dispatch event instead of using postMessage because we also need to
|
||||||
|
|
|
@ -120,7 +120,10 @@ describe 'chromium feature', ->
|
||||||
listener = (event) ->
|
listener = (event) ->
|
||||||
window.removeEventListener 'message', listener
|
window.removeEventListener 'message', listener
|
||||||
b.close()
|
b.close()
|
||||||
assert.equal event.data, 'file://testing'
|
message = JSON.parse(event.data)
|
||||||
|
assert.equal message.data, 'testing'
|
||||||
|
assert.equal message.origin, 'file://'
|
||||||
|
assert.equal message.sourceEqualsOpener, true
|
||||||
assert.equal event.origin, 'file://'
|
assert.equal event.origin, 'file://'
|
||||||
done()
|
done()
|
||||||
window.addEventListener 'message', listener
|
window.addEventListener 'message', listener
|
||||||
|
|
|
@ -2,7 +2,12 @@
|
||||||
<body>
|
<body>
|
||||||
<script type="text/javascript" charset="utf-8">
|
<script type="text/javascript" charset="utf-8">
|
||||||
window.addEventListener('message', function (e) {
|
window.addEventListener('message', function (e) {
|
||||||
window.opener.postMessage(e.origin + e.data, '*');
|
var reply = JSON.stringify({
|
||||||
|
origin: e.origin,
|
||||||
|
data: e.data,
|
||||||
|
sourceEqualsOpener: e.source === window.opener
|
||||||
|
})
|
||||||
|
window.opener.postMessage(reply, '*');
|
||||||
});
|
});
|
||||||
</script>
|
</script>
|
||||||
</body>
|
</body>
|
||||||
|
|
Loading…
Reference in a new issue