@@ -59,14 +59,14 @@ export function getGitpodService(): GitpodService {
59
59
let ideFrontendService : IDEFrontendService | undefined ;
60
60
export function getIDEFrontendService ( workspaceID : string , sessionId : string , service : GitpodService ) {
61
61
if ( ! ideFrontendService ) {
62
- ideFrontendService = new IDEFrontendService ( workspaceID , sessionId , service , window . parent ) ;
62
+ const parentOrigin = new URLSearchParams ( window . location . search ) . get ( "parentOrigin" ) || undefined ;
63
+ ideFrontendService = new IDEFrontendService ( workspaceID , sessionId , service , window . parent , parentOrigin ) ;
63
64
}
64
65
return ideFrontendService ;
65
66
}
66
67
67
68
export class IDEFrontendService implements IDEFrontendDashboardService . IServer {
68
69
private instanceID : string | undefined ;
69
- private ideUrl : URL | undefined ;
70
70
private user : User | undefined ;
71
71
72
72
private latestStatus ?: IDEFrontendDashboardService . Status ;
@@ -75,14 +75,15 @@ export class IDEFrontendService implements IDEFrontendDashboardService.IServer {
75
75
readonly onSetState = this . onDidChangeEmitter . event ;
76
76
77
77
constructor (
78
- private workspaceID : string ,
79
- private sessionId : string ,
80
- private service : GitpodService ,
81
- private clientWindow : Window ,
78
+ private readonly workspaceID : string ,
79
+ private readonly sessionId : string ,
80
+ private readonly service : GitpodService ,
81
+ private readonly clientWindow : Window ,
82
+ private parentOrigin : string | undefined ,
82
83
) {
83
84
this . processServerInfo ( ) ;
84
85
window . addEventListener ( "message" , ( event : MessageEvent ) => {
85
- if ( event . origin !== this . ideUrl ?. origin ) {
86
+ if ( event . origin !== this . parentOrigin ) {
86
87
return ;
87
88
}
88
89
@@ -119,9 +120,9 @@ export class IDEFrontendService implements IDEFrontendDashboardService.IServer {
119
120
120
121
const listener = await this . service . listenToInstance ( this . workspaceID ) ;
121
122
listener . onDidChange ( ( ) => {
122
- this . ideUrl = listener . info . latestInstance ?. ideUrl
123
- ? new URL ( listener . info . latestInstance ?. ideUrl )
124
- : undefined ;
123
+ if ( ! this . parentOrigin && listener . info . latestInstance ?. ideUrl ) {
124
+ this . parentOrigin = new URL ( listener . info . latestInstance ?. ideUrl ) . origin ;
125
+ }
125
126
const status = this . getWorkspaceStatus ( listener . info ) ;
126
127
this . latestStatus = status ;
127
128
this . sendStatusUpdate ( this . latestStatus ) ;
@@ -174,25 +175,25 @@ export class IDEFrontendService implements IDEFrontendDashboardService.IServer {
174
175
}
175
176
176
177
sendStatusUpdate ( status : IDEFrontendDashboardService . Status ) : void {
177
- if ( ! this . ideUrl ) {
178
+ if ( ! this . parentOrigin ) {
178
179
return ;
179
180
}
180
181
this . clientWindow . postMessage (
181
182
{
182
183
type : "ide-status-update" ,
183
184
status,
184
185
} as IDEFrontendDashboardService . StatusUpdateEventData ,
185
- this . ideUrl . origin ,
186
+ this . parentOrigin ,
186
187
) ;
187
188
}
188
189
189
190
relocate ( url : string ) : void {
190
- if ( ! this . ideUrl ) {
191
+ if ( ! this . parentOrigin ) {
191
192
return ;
192
193
}
193
194
this . clientWindow . postMessage (
194
195
{ type : "ide-relocate" , url } as IDEFrontendDashboardService . RelocateEventData ,
195
- this . ideUrl . origin ,
196
+ this . parentOrigin ,
196
197
) ;
197
198
}
198
199
}
0 commit comments