diff --git a/atom/browser/lib/guest-window-manager.coffee b/atom/browser/lib/guest-window-manager.coffee index 6f5040ce21d3..f92c1a46c051 100644 --- a/atom/browser/lib/guest-window-manager.coffee +++ b/atom/browser/lib/guest-window-manager.coffee @@ -64,3 +64,6 @@ ipc.on 'ATOM_SHELL_GUEST_WINDOW_MANAGER_WINDOW_OPENER_POSTMESSAGE', (event, mess ipc.on 'ATOM_SHELL_GUEST_WINDOW_MANAGER_WEB_CONTENTS_METHOD', (event, guestId, method, args...) -> BrowserWindow.fromId(guestId)?.webContents?[method] args... + +ipc.on 'ATOM_SHELL_GUEST_WINDOW_MANAGER_IS_GUEST_WINDOW', (event) -> + event.returnValue = v8Util.getHiddenValue(event.sender, 'embedder') isnt undefined diff --git a/atom/renderer/lib/override.coffee b/atom/renderer/lib/override.coffee index aea7feb3cbfe..d0f1fabc4ac9 100644 --- a/atom/renderer/lib/override.coffee +++ b/atom/renderer/lib/override.coffee @@ -91,7 +91,7 @@ window.prompt = -> throw new Error('prompt() is and will not be supported.') # Simple implementation of postMessage. -unless process.guestInstanceId? +if ipc.sendSync 'ATOM_SHELL_GUEST_WINDOW_MANAGER_IS_GUEST_WINDOW' window.opener = postMessage: (message, targetOrigin='*') -> ipc.send 'ATOM_SHELL_GUEST_WINDOW_MANAGER_WINDOW_OPENER_POSTMESSAGE', message, targetOrigin diff --git a/spec/chromium-spec.coffee b/spec/chromium-spec.coffee index 8ca7e9800fe5..375f98966bea 100644 --- a/spec/chromium-spec.coffee +++ b/spec/chromium-spec.coffee @@ -3,6 +3,7 @@ http = require 'http' https = require 'https' path = require 'path' ws = require 'ws' +remote = require 'remote' describe 'chromium feature', -> fixtures = path.resolve __dirname, 'fixtures' @@ -39,9 +40,31 @@ describe 'chromium feature', -> assert.equal b.constructor.name, 'BrowserWindowProxy' b.close() + describe 'window.opener', -> + ipc = remote.require 'ipc' + url = "file://#{fixtures}/pages/window-opener.html" + w = null + + afterEach -> + w?.destroy() + ipc.removeAllListeners 'opener' + + it 'is null for main window', (done) -> + ipc.on 'opener', (event, opener) -> + done(if opener is null then undefined else opener) + BrowserWindow = remote.require 'browser-window' + w = new BrowserWindow(show: false) + w.loadUrl url + + it 'is not null for window opened by window.open', (done) -> + b = window.open url, 'test2', 'show=no' + ipc.on 'opener', (event, opener) -> + b.close() + done(if opener isnt null then undefined else opener) + describe 'creating a Uint8Array under browser side', -> it 'does not crash', -> - RUint8Array = require('remote').getGlobal 'Uint8Array' + RUint8Array = remote.getGlobal 'Uint8Array' new RUint8Array describe 'webgl', -> diff --git a/spec/fixtures/pages/window-opener.html b/spec/fixtures/pages/window-opener.html new file mode 100644 index 000000000000..0b5ecd556c9b --- /dev/null +++ b/spec/fixtures/pages/window-opener.html @@ -0,0 +1,8 @@ + + + + + + diff --git a/spec/webview-spec.coffee b/spec/webview-spec.coffee index ef0763b0147c..ba3478fca557 100644 --- a/spec/webview-spec.coffee +++ b/spec/webview-spec.coffee @@ -263,6 +263,8 @@ describe ' tag', -> document.body.appendChild webview describe 'executeJavaScript', -> + return unless process.env.TRAVIS is 'true' + it 'should support user gesture', (done) -> listener = (e) -> webview.removeEventListener 'enter-html-full-screen', listener