Skip to content

Commit 132bcb4

Browse files
author
Loïc Mangeonjean
committed
fix: fix setTimeout overriding on mainWindow, instead of the context window
1 parent 02b45cf commit 132bcb4

1 file changed

Lines changed: 13 additions & 8 deletions

File tree

vscode-patches/0071-feat-support-loading-VSCode-in-an-iframe.patch

Lines changed: 13 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -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

1515
diff --git a/src/vs/base/browser/dom.ts b/src/vs/base/browser/dom.ts
1616
index 6169e138aab..e654f642bab 100644
@@ -140,13 +140,15 @@ index ab920e18349..c4a02c5ca47 100644
140140
export function isAuxiliaryWindow(obj: Window): obj is CodeWindow {
141141
if (obj === mainWindow) {
142142
diff --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

Comments
 (0)