diff --git a/git b/git deleted file mode 100644 index e69de29..0000000 diff --git a/packages/api-browser/src/window.ts b/packages/api-browser/src/window.ts index d62ad9d..9c43a4e 100644 --- a/packages/api-browser/src/window.ts +++ b/packages/api-browser/src/window.ts @@ -17,7 +17,7 @@ class Window implements ssf.WindowCore { eventListeners: Map void)[]> = new Map(); id: string; - constructor(options, callback?, errorCallback?) { + constructor(options?, callback?, errorCallback?) { this.children = []; this.eventListeners = new Map(); @@ -83,9 +83,7 @@ class Window implements ssf.WindowCore { return new Promise(resolve => { let newWin = null; if (window.opener) { - newWin = new Window(null); - newWin.innerWindow = window.opener; - newWin.id = window.opener.name; + newWin = Window.wrap(window.opener); } resolve(newWin); @@ -242,6 +240,13 @@ class Window implements ssf.WindowCore { currentWindow = new Window(null, callback, errorCallback); return currentWindow; } + + static wrap(win: BrowserWindow) { + const wrappedWindow = new Window(); + wrappedWindow.innerWindow = win; + wrappedWindow.id = String(win.name); + return wrappedWindow; + } } const objectToFeaturesString = (features) => { diff --git a/packages/api-electron/src/preload/window.ts b/packages/api-electron/src/preload/window.ts index 4374acf..c8788f0 100644 --- a/packages/api-electron/src/preload/window.ts +++ b/packages/api-electron/src/preload/window.ts @@ -341,6 +341,13 @@ class Window implements ssf.Window { currentWindow = new Window(null, callback, errorCallback); return currentWindow; } + + static wrap(win: Electron.BrowserWindow) { + const wrappedWindow = new Window(); + wrappedWindow.innerWindow = win; + wrappedWindow.id = String(win.id); + return wrappedWindow; + } } export default Window; diff --git a/packages/api-openfin/src/window.ts b/packages/api-openfin/src/window.ts index a36e7a5..b4e43ed 100644 --- a/packages/api-openfin/src/window.ts +++ b/packages/api-openfin/src/window.ts @@ -133,7 +133,7 @@ class Window implements ssf.Window { innerWindow: fin.OpenFinWindow; id: string; - constructor(options: ssf.WindowOptions, callback?: any, errorCallback?: any) { + constructor(options?: ssf.WindowOptions, callback?: any, errorCallback?: any) { MessageService.subscribe('*', 'ssf-window-message', (...args) => { const event = 'message'; if (this.eventListeners.has(event)) { @@ -244,9 +244,7 @@ class Window implements ssf.Window { names.forEach((name) => { const app = fin.desktop.Application.wrap(name); const win = app.getWindow(); - const childWin = new Window(undefined); - childWin.innerWindow = win; - childWin.id = win.uuid + ':' + win.name; + const childWin = Window.wrap(win); children.push(childWin); }); resolve(children); @@ -284,12 +282,9 @@ class Window implements ssf.Window { resolve(null); return; } - const app = fin.desktop.Application.wrap(name); const win = app.getWindow(); - const parentWin = new Window(undefined); - parentWin.innerWindow = win; - parentWin.id = win.uuid + ':' + win.name; + const parentWin = Window.wrap(win); resolve(parentWin); }; @@ -522,6 +517,13 @@ class Window implements ssf.Window { currentWindow = new Window(null, callback, errorCallback); return currentWindow; } + + static wrap(win: fin.OpenFinWindow) { + const wrappedWin = new Window(); + wrappedWin.innerWindow = win; + wrappedWin.id = win.uuid + ':' + win.name; + return wrappedWin; + } } export default Window; diff --git a/packages/api-specification/interface/window.ts b/packages/api-specification/interface/window.ts index c5d9811..7775329 100644 --- a/packages/api-specification/interface/window.ts +++ b/packages/api-specification/interface/window.ts @@ -277,6 +277,12 @@ declare namespace ssf { * @returns The window. */ static getCurrentWindow(callback?: () => void, errorCallback?: () => void): Window; + + /** + * Wraps a native container window with a ContainerJS window. + * @param window The native window to wrap. + */ + static wrap(window: Electron.BrowserWindow | fin.OpenFinWindow | BrowserWindow): Window; } /** diff --git a/packages/api-tests/test/window.core.spec.js b/packages/api-tests/test/window.core.spec.js index 5c2d987..c769972 100644 --- a/packages/api-tests/test/window.core.spec.js +++ b/packages/api-tests/test/window.core.spec.js @@ -616,6 +616,31 @@ describe('WindowCore API', function(done) { return chainPromises(steps); }); + it.only('Should wrap a native window in a containerjs window object #ssf.Window.wrap', function() { + const windowTitle = 'windownamewrap'; + const windowOptions = getWindowOptions({ + name: windowTitle + }); + + /* eslint-disable no-undef */ + const wrapScript = (callback) => { + ssf.app.ready().then(() => { + const inner = ssf.Window.getCurrentWindow().innerWindow; + const win = ssf.Window.wrap(inner); + callback(win.innerWindow != null); + }); + }; + /* eslint-enable no-undef */ + + const steps = [ + ...setupWindowSteps(windowOptions), + () => executeAsyncJavascript(app.client, wrapScript), + (result) => assert.equal(result.value, true) + ]; + + return chainPromises(steps); + }); + if (process.env.MOCHA_CONTAINER === 'electron') { it('Should return the id of the window #ssf.Window.getId #ssf.WindowCore.getId', function() { const windowTitle = 'windownameid';