From df0be6397ada13b9c6752ab7c326549f36ec653a Mon Sep 17 00:00:00 2001 From: Tomer Sharon Date: Thu, 3 Oct 2019 16:17:29 -0400 Subject: [PATCH 1/4] fix --- src/browser/api/browser_view.ts | 14 +++++++++++--- 1 file changed, 11 insertions(+), 3 deletions(-) diff --git a/src/browser/api/browser_view.ts b/src/browser/api/browser_view.ts index 76c35ed4a..1ecd4f8de 100644 --- a/src/browser/api/browser_view.ts +++ b/src/browser/api/browser_view.ts @@ -84,14 +84,21 @@ export function show(ofView: OfView) { export async function attach(ofView: OfView, toIdentity: Identity) { const {view} = ofView; if (view) { + const previousTarget = ofView.target; + const ofWin = getWindowByUuidName(toIdentity.uuid, toIdentity.name); + const oldWin = getWindowByUuidName(previousTarget.uuid, previousTarget.name); + if (!ofWin) { throw new Error(`Could not locate target window ${toIdentity.uuid}/${toIdentity.name}`); } + if(!oldWin) { + throw new Error(`Could not locate origin window ${previousTarget.uuid}/${previousTarget.name}`); + } + + const oldwinMap = windowCloseListenerMap.get(oldWin); - const previousTarget = ofView.target; if (previousTarget.name !== toIdentity.name) { - const oldWin = getWindowByUuidName(previousTarget.uuid, previousTarget.name); if (oldWin) { oldWin.browserWindow.removeBrowserView(view); of_events.emit(route.window('view-detached', previousTarget.uuid, previousTarget.name), { @@ -99,7 +106,6 @@ export async function attach(ofView: OfView, toIdentity: Identity) { target: toIdentity, previousTarget }); - const oldwinMap = windowCloseListenerMap.get(oldWin); if (oldwinMap) { const listener = oldwinMap.get(ofView); if (typeof listener === 'function') { @@ -108,6 +114,8 @@ export async function attach(ofView: OfView, toIdentity: Identity) { oldwinMap.delete(ofView); } } + } else if (oldwinMap && oldwinMap.has(ofView)) { + return; } const bWin = ofWin.browserWindow; From c2fe001784050d9e903eaa5679696eae6b7ecef1 Mon Sep 17 00:00:00 2001 From: Tomer Sharon Date: Thu, 3 Oct 2019 16:25:17 -0400 Subject: [PATCH 2/4] refactor --- src/browser/api/browser_view.ts | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/src/browser/api/browser_view.ts b/src/browser/api/browser_view.ts index 1ecd4f8de..1d8138c01 100644 --- a/src/browser/api/browser_view.ts +++ b/src/browser/api/browser_view.ts @@ -82,17 +82,15 @@ export function show(ofView: OfView) { } export async function attach(ofView: OfView, toIdentity: Identity) { - const {view} = ofView; + const {view, target: previousTarget} = ofView; if (view) { - const previousTarget = ofView.target; - const ofWin = getWindowByUuidName(toIdentity.uuid, toIdentity.name); const oldWin = getWindowByUuidName(previousTarget.uuid, previousTarget.name); if (!ofWin) { throw new Error(`Could not locate target window ${toIdentity.uuid}/${toIdentity.name}`); } - if(!oldWin) { + if (!oldWin) { throw new Error(`Could not locate origin window ${previousTarget.uuid}/${previousTarget.name}`); } From 2bbacb81dc1b709be71ca058a818c7fc4cb9b313 Mon Sep 17 00:00:00 2001 From: Tomer Sharon Date: Mon, 7 Oct 2019 10:01:40 -0400 Subject: [PATCH 3/4] destroy check and nicer logic --- src/browser/api/browser_view.ts | 26 ++++++++++++-------------- 1 file changed, 12 insertions(+), 14 deletions(-) diff --git a/src/browser/api/browser_view.ts b/src/browser/api/browser_view.ts index 1d8138c01..207b88b07 100644 --- a/src/browser/api/browser_view.ts +++ b/src/browser/api/browser_view.ts @@ -83,37 +83,34 @@ export function show(ofView: OfView) { export async function attach(ofView: OfView, toIdentity: Identity) { const {view, target: previousTarget} = ofView; - if (view) { + + if (view && ! view.isDestroyed()) { const ofWin = getWindowByUuidName(toIdentity.uuid, toIdentity.name); const oldWin = getWindowByUuidName(previousTarget.uuid, previousTarget.name); if (!ofWin) { throw new Error(`Could not locate target window ${toIdentity.uuid}/${toIdentity.name}`); } - if (!oldWin) { - throw new Error(`Could not locate origin window ${previousTarget.uuid}/${previousTarget.name}`); - } - - const oldwinMap = windowCloseListenerMap.get(oldWin); - if (previousTarget.name !== toIdentity.name) { - if (oldWin) { + if (oldWin) { + const oldWinMap = windowCloseListenerMap.get(oldWin); + if (previousTarget.name !== toIdentity.name) { oldWin.browserWindow.removeBrowserView(view); of_events.emit(route.window('view-detached', previousTarget.uuid, previousTarget.name), { viewIdentity: {uuid: ofView.uuid, name: ofView.name}, target: toIdentity, previousTarget }); - if (oldwinMap) { - const listener = oldwinMap.get(ofView); + if (oldWinMap) { + const listener = oldWinMap.get(ofView); if (typeof listener === 'function') { of_events.removeListener(route.window('closed', previousTarget.uuid, previousTarget.name), listener); } - oldwinMap.delete(ofView); + oldWinMap.delete(ofView); } - } - } else if (oldwinMap && oldwinMap.has(ofView)) { - return; + } else if (oldWinMap && oldWinMap.has(ofView)) { + return; + } } const bWin = ofWin.browserWindow; @@ -142,6 +139,7 @@ export async function attach(ofView: OfView, toIdentity: Identity) { }); } } + export async function destroy (ofView: OfView) { const {uuid, name, target, view} = ofView; removeBrowserView(ofView); From de2fa831aa16e6a257eb05aac51f946907b89ccc Mon Sep 17 00:00:00 2001 From: tomer-openfin <47791895+tomer-openfin@users.noreply.github.com> Date: Thu, 17 Oct 2019 16:52:21 -0400 Subject: [PATCH 4/4] Update browser_view.ts --- src/browser/api/browser_view.ts | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/src/browser/api/browser_view.ts b/src/browser/api/browser_view.ts index 570f1d79a..b5038cef7 100644 --- a/src/browser/api/browser_view.ts +++ b/src/browser/api/browser_view.ts @@ -99,8 +99,6 @@ export async function attach(ofView: OfView, toIdentity: Identity) { throw new Error(`Could not locate origin window ${previousTarget.uuid}/${previousTarget.name}`); } - const oldwinMap = windowCloseListenerMap.get(oldWin); - if (oldWin) { const oldWinMap = windowCloseListenerMap.get(oldWin); if (previousTarget.name !== toIdentity.name) { @@ -204,4 +202,4 @@ export function addEventListener({uuid, name}: Identity, type: string, listener: of_events.removeListener(eventString, safeListener); }; return unsubscribe; -} \ No newline at end of file +}