Skip to content

Commit 81c98f8

Browse files
akosyakovroboquat
authored andcommitted
[supervisor-frontend] redirect to desktop IDE on gitpod.io domain
1 parent f69e6d4 commit 81c98f8

File tree

3 files changed

+31
-12
lines changed

3 files changed

+31
-12
lines changed

components/supervisor/frontend/src/ide/heart-beat.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,7 @@ export const track = (w: Window) => {
1919
}
2020

2121
let pageCloseCompatibile: boolean = false
22-
22+
// TODO(ak) remove
2323
isSaaSServerGreaterThan("main.4124").then((r) => {
2424
pageCloseCompatibile = r
2525
})

components/supervisor/frontend/src/index.ts

Lines changed: 1 addition & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -158,16 +158,7 @@ const toStop = new DisposableCollection();
158158
});
159159
if (!desktopRedirected) {
160160
desktopRedirected = true;
161-
try {
162-
const desktopLink = new URL(ideStatus.desktop.link)
163-
// redirect only if points to desktop application
164-
// don't navigate browser to another page
165-
if (desktopLink.protocol != 'http:' && desktopLink.protocol != 'https:') {
166-
window.location.href = ideStatus.desktop.link;
167-
}
168-
} catch (e) {
169-
console.error('invalid desktop link:', e)
170-
}
161+
loading.openDesktopLink(ideStatus.desktop.link)
171162
}
172163
return loading.frame;
173164
}

components/supervisor/frontend/src/shared/loading-frame.ts

Lines changed: 29 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,8 +9,15 @@ import { WindowMessageReader, WindowMessageWriter } from "@gitpod/gitpod-protoco
99
import { JsonRpcProxyFactory } from '@gitpod/gitpod-protocol/lib/messaging/proxy-factory';
1010
import { createMessageConnection } from 'vscode-jsonrpc/lib/main';
1111
import { ConsoleLogger } from 'vscode-ws-jsonrpc';
12+
import { isSaaSServerGreaterThan } from '../ide/gitpod-server-compatibility';
1213
import { startUrl } from './urls';
1314

15+
let openDesktopLinkSupported = false;
16+
// TODO(ak) remove after 15.09.2022
17+
isSaaSServerGreaterThan("main.4275").then(r =>
18+
openDesktopLinkSupported = r
19+
)
20+
1421
const serverOrigin = startUrl.url.origin;
1522
const relocateListener = (event: MessageEvent) => {
1623
if (event.origin === serverOrigin && event.data.type == 'relocate' && event.data.url) {
@@ -36,6 +43,7 @@ export function load({ gitpodService }: {
3643
frame: HTMLIFrameElement
3744
sessionId: Promise<string>
3845
setState: (state: object) => void
46+
openDesktopLink: (link: string) => void
3947
}> {
4048
return new Promise(resolve => {
4149
const frame = document.createElement('iframe');
@@ -56,7 +64,27 @@ export function load({ gitpodService }: {
5664
const setState = (state: object) => {
5765
frameWindow.postMessage({ type: 'setState', state }, serverOrigin);
5866
}
59-
resolve({ frame, sessionId, setState });
67+
const openDesktopLink = (link: string) => {
68+
if (openDesktopLinkSupported) {
69+
frameWindow.postMessage({ type: '$openDesktopLink', link }, serverOrigin);
70+
} else {
71+
let redirect = false;
72+
try {
73+
const desktopLink = new URL(link);
74+
redirect = desktopLink.protocol !== "http:" && desktopLink.protocol !== "https:";
75+
} catch (e) {
76+
console.error("invalid desktop link:", e);
77+
}
78+
// redirect only if points to desktop application
79+
// don't navigate browser to another page
80+
if (redirect) {
81+
window.location.href = link;
82+
} else {
83+
window.open(link, "_blank", "noopener");
84+
}
85+
}
86+
}
87+
resolve({ frame, sessionId, setState, openDesktopLink });
6088
};
6189
});
6290
}

0 commit comments

Comments
 (0)