@@ -7,10 +7,10 @@ Subject: [PATCH] feat: support loading VSCode in an iframe
77 src/vs/base/browser/dom.ts | 39 +++++++------------
88 src/vs/base/browser/domStylesheets.ts | 4 +-
99 src/vs/base/browser/window.ts | 7 +++-
10- src/vs/workbench/browser/window.ts | 17 ++++++--
10+ src/vs/workbench/browser/window.ts | 23 +++++++-- --
1111 .../browser/view/renderers/webviewPreloads.ts | 4 +-
1212 .../browser/webWorkerExtensionHost.ts | 6 +--
13- 6 files changed, 40 insertions(+), 37 deletions(-)
13+ 6 files changed, 43 insertions(+), 40 deletions(-)
1414
1515diff --git a/src/vs/base/browser/dom.ts b/src/vs/base/browser/dom.ts
1616index 6169e138aab..e654f642bab 100644
@@ -140,13 +140,15 @@ index ab920e18349..c4a02c5ca47 100644
140140 export function isAuxiliaryWindow(obj: Window): obj is CodeWindow {
141141 if (obj === mainWindow) {
142142diff --git a/src/vs/workbench/browser/window.ts b/src/vs/workbench/browser/window.ts
143- index 70e83ad4396..d32117f12b7 100644
143+ index 70e83ad4396..74ed21bbfeb 100644
144144--- a/src/vs/workbench/browser/window.ts
145145+++ b/src/vs/workbench/browser/window.ts
146- @@ -109,11 +109,20 @@ export abstract class BaseWindow extends Disposable {
146+ @@ -109,13 +109,22 @@ export abstract class BaseWindow extends Disposable {
147147 // to throttle timeouts in minimized windows, so with this we can ensure the
148148 // timeout is scheduled without being throttled (unless all windows are minimized).
149149
150+ - const originalSetTimeout = targetWindow.setTimeout;
151+ - Object.defineProperty(targetWindow, 'vscodeOriginalSetTimeout', { get: () => originalSetTimeout });
150152+ function getOverridenWindow(targetWindow: Window) {
151153+ if (targetWindow === mainWindow) {
152154+ // If running inside an iframe, do not override the `setTimeout` function on the
@@ -156,16 +158,19 @@ index 70e83ad4396..d32117f12b7 100644
156158+ return targetWindow;
157159+ }
158160+
159- const originalSetTimeout = targetWindow.setTimeout;
160- - Object.defineProperty(targetWindow, 'vscodeOriginalSetTimeout', { get: () => originalSetTimeout });
161+ + const originalSetTimeout = getOverridenWindow(targetWindow).setTimeout;
161162+ Object.defineProperty(getOverridenWindow(targetWindow), 'vscodeOriginalSetTimeout', { get: () => originalSetTimeout });
162163
163- const originalClearTimeout = targetWindow.clearTimeout;
164+ - const originalClearTimeout = targetWindow.clearTimeout;
164165- Object.defineProperty(targetWindow, 'vscodeOriginalClearTimeout', { get: () => originalClearTimeout });
166+ + const originalClearTimeout = getOverridenWindow(targetWindow).clearTimeout;
165167+ Object.defineProperty(getOverridenWindow(targetWindow), 'vscodeOriginalClearTimeout', { get: () => originalClearTimeout });
166168
167- targetWindow.setTimeout = function (this: unknown, handler: TimerHandler, timeout = 0, ...args: unknown[]): number {
169+ - targetWindow.setTimeout = function (this: unknown, handler: TimerHandler, timeout = 0, ...args: unknown[]): number {
170+ + getOverridenWindow(targetWindow).setTimeout = function (this: unknown, handler: TimerHandler, timeout = 0, ...args: unknown[]): number {
168171 if (dom.getWindowsCount() === 1 || typeof handler === 'string' || timeout === 0 /* immediates are never throttled */) {
172+ return originalSetTimeout.apply(this, [handler, timeout, ...args]);
173+ }
169174@@ -138,7 +147,7 @@ export abstract class BaseWindow extends Disposable {
170175 // this can happen for timeouts on unfocused windows
171176 let didClear = false;
0 commit comments