diff --git a/vscode-patches/0060-feat-support-shadow-dom.patch b/vscode-patches/0060-feat-support-shadow-dom.patch
index 6d918533..761e10c4 100644
--- a/vscode-patches/0060-feat-support-shadow-dom.patch
+++ b/vscode-patches/0060-feat-support-shadow-dom.patch
@@ -5,7 +5,7 @@ Subject: [PATCH] feat: support shadow dom
---
src/vs/base/browser/dom.ts | 61 ++++++++++++++++---
- src/vs/base/browser/domStylesheets.ts | 21 +++++--
+ src/vs/base/browser/domStylesheets.ts | 22 ++++---
src/vs/base/browser/keyboardEvent.ts | 12 +++-
.../browser/ui/contextview/contextview.ts | 2 +-
src/vs/base/browser/ui/dialog/dialog.ts | 6 +-
@@ -42,14 +42,16 @@ Subject: [PATCH] feat: support shadow dom
.../view/renderers/backLayerWebView.ts | 3 +-
.../browser/preferences.contribution.ts | 3 +-
.../preferences/browser/settingsEditor2.ts | 6 +-
+ .../terminal/browser/terminalService.ts | 7 +--
.../terminal/browser/terminalTabbedView.ts | 2 +-
.../contrib/terminal/browser/terminalView.ts | 2 +-
.../contrib/webview/browser/webviewElement.ts | 12 ++--
.../browser/gettingStarted.ts | 4 +-
.../browser/walkThroughPart.ts | 6 +-
+ .../browser/auxiliaryWindowService.ts | 6 +-
.../suggest/browser/simpleSuggestWidget.ts | 4 +-
- .../themes/browser/workbenchThemeService.ts | 2 +-
- 45 files changed, 192 insertions(+), 99 deletions(-)
+ .../themes/browser/workbenchThemeService.ts | 33 +++++++++-
+ 47 files changed, 227 insertions(+), 109 deletions(-)
diff --git a/src/vs/base/browser/dom.ts b/src/vs/base/browser/dom.ts
index e943bf0a557..6ebc4568a39 100644
@@ -180,13 +182,23 @@ index e943bf0a557..6ebc4568a39 100644
parentFocusable?.focus();
}
diff --git a/src/vs/base/browser/domStylesheets.ts b/src/vs/base/browser/domStylesheets.ts
-index 72fa42df1a6..369b16a0e5a 100644
+index 72fa42df1a6..f82797cdd26 100644
--- a/src/vs/base/browser/domStylesheets.ts
+++ b/src/vs/base/browser/domStylesheets.ts
-@@ -39,6 +39,14 @@ class WrappedStyleElement extends Disposable {
+@@ -26,7 +26,7 @@ class WrappedStyleElement extends Disposable {
+ this._currentCssStyle = cssStyle;
+
+ if (!this._styleSheet) {
+- this._styleSheet = createStyleSheet(mainWindow.document.head, s => s.textContent = cssStyle, this._store);
++ this._styleSheet = createStyleSheet(undefined, s => s.textContent = cssStyle, this._store);
+ } else {
+ this._styleSheet.textContent = cssStyle;
+ }
+@@ -39,7 +39,15 @@ class WrappedStyleElement extends Disposable {
}
}
+-export function createStyleSheet(container: HTMLElement = mainWindow.document.head, beforeAppend?: (style: HTMLStyleElement) => void, disposableStore?: DisposableStore): HTMLStyleElement {
+export let shadowRootContainer: ShadowRoot | undefined;
+export function setContainerElement(container: HTMLElement) {
+ const root = container.getRootNode();
@@ -195,24 +207,29 @@ index 72fa42df1a6..369b16a0e5a 100644
+ }
+}
+
- export function createStyleSheet(container: HTMLElement = mainWindow.document.head, beforeAppend?: (style: HTMLStyleElement) => void, disposableStore?: DisposableStore): HTMLStyleElement {
++export function createStyleSheet(container: HTMLElement | ShadowRoot = shadowRootContainer ?? mainWindow.document.head, beforeAppend?: (style: HTMLStyleElement) => void, disposableStore?: DisposableStore): HTMLStyleElement {
const style = document.createElement('style');
style.type = 'text/css';
-@@ -64,7 +72,12 @@ export function createStyleSheet(container: HTMLElement = mainWindow.document.he
+ style.media = 'screen';
+@@ -52,7 +60,7 @@ export function createStyleSheet(container: HTMLElement = mainWindow.document.he
+
+ // With
as container, the stylesheet becomes global and is tracked
+ // to support auxiliary windows to clone the stylesheet.
+- if (container === mainWindow.document.head) {
++ if (container === (shadowRootContainer ?? mainWindow.document.head)) {
+ const globalStylesheetClones = new Set();
+ globalStylesheets.set(style, globalStylesheetClones);
+ if (disposableStore) {
+@@ -64,7 +72,7 @@ export function createStyleSheet(container: HTMLElement = mainWindow.document.he
continue; // main window is already tracked
}
- const cloneDisposable = disposables.add(cloneGlobalStyleSheet(style, globalStylesheetClones, targetWindow));
+ const cloneDisposable = disposables.add(cloneGlobalStyleSheet(style, globalStylesheetClones, targetWindow.document.head));
-+ disposableStore?.add(cloneDisposable);
-+ }
-+
-+ if (shadowRootContainer !== undefined) {
-+ const cloneDisposable = cloneGlobalStyleSheet(style, globalStylesheetClones, shadowRootContainer);
disposableStore?.add(cloneDisposable);
}
}
-@@ -76,17 +89,17 @@ export function cloneGlobalStylesheets(targetWindow: Window): IDisposable {
+@@ -76,17 +84,17 @@ export function cloneGlobalStylesheets(targetWindow: Window): IDisposable {
const disposables = new DisposableStore();
for (const [globalStylesheet, clonedGlobalStylesheets] of globalStylesheets) {
@@ -1074,6 +1091,45 @@ index c754843a640..ab5ca9b057b 100644
}
private refreshSingleElement(element: SettingsTreeSettingElement): void {
+diff --git a/src/vs/workbench/contrib/terminal/browser/terminalService.ts b/src/vs/workbench/contrib/terminal/browser/terminalService.ts
+index effcc11e410..c3e617145a8 100644
+--- a/src/vs/workbench/contrib/terminal/browser/terminalService.ts
++++ b/src/vs/workbench/contrib/terminal/browser/terminalService.ts
+@@ -53,7 +53,7 @@ import { mark } from '../../../../base/common/performance.js';
+ import { DetachedTerminal } from './detachedTerminal.js';
+ import { ITerminalCapabilityImplMap, TerminalCapability } from '../../../../platform/terminal/common/capabilities/capabilities.js';
+ import { createInstanceCapabilityEventMultiplexer } from './terminalEvents.js';
+-import { isAuxiliaryWindow, mainWindow } from '../../../../base/browser/window.js';
++import { isAuxiliaryWindow } from '../../../../base/browser/window.js';
+ import { GroupIdentifier } from '../../../common/editor.js';
+ import { getActiveWindow } from '../../../../base/browser/dom.js';
+ import { hasKey, isString } from '../../../../base/common/types.js';
+@@ -238,7 +238,7 @@ export class TerminalService extends Disposable implements ITerminalService {
+ this._initializePrimaryBackend();
+
+ // Create async as the class depends on `this`
+- timeout(0).then(() => this._register(this._instantiationService.createInstance(TerminalEditorStyle, mainWindow.document.head)));
++ timeout(0).then(() => this._register(this._instantiationService.createInstance(TerminalEditorStyle)));
+ }
+
+ async showProfileQuickPick(type: 'setDefault' | 'createInstance', cwd?: string | URI): Promise {
+@@ -1395,7 +1395,6 @@ class TerminalEditorStyle extends Themable {
+ private _styleElement: HTMLElement;
+
+ constructor(
+- container: HTMLElement,
+ @ITerminalService private readonly _terminalService: ITerminalService,
+ @IThemeService private readonly _themeService: IThemeService,
+ @ITerminalProfileService private readonly _terminalProfileService: ITerminalProfileService,
+@@ -1403,7 +1402,7 @@ class TerminalEditorStyle extends Themable {
+ ) {
+ super(_themeService);
+ this._registerListeners();
+- this._styleElement = domStylesheets.createStyleSheet(container);
++ this._styleElement = domStylesheets.createStyleSheet();
+ this._register(toDisposable(() => this._styleElement.remove()));
+ this.updateStyles();
+ }
diff --git a/src/vs/workbench/contrib/terminal/browser/terminalTabbedView.ts b/src/vs/workbench/contrib/terminal/browser/terminalTabbedView.ts
index 7a3dd584458..b58e3170ff1 100644
--- a/src/vs/workbench/contrib/terminal/browser/terminalTabbedView.ts
@@ -1191,6 +1247,37 @@ index c6fb17f8525..8691b2f7a37 100644
while (active && active !== this.content) {
active = active.parentElement;
}
+diff --git a/src/vs/workbench/services/auxiliaryWindow/browser/auxiliaryWindowService.ts b/src/vs/workbench/services/auxiliaryWindow/browser/auxiliaryWindowService.ts
+index 15b221bafb8..0dc8b7ce37a 100644
+--- a/src/vs/workbench/services/auxiliaryWindow/browser/auxiliaryWindowService.ts
++++ b/src/vs/workbench/services/auxiliaryWindow/browser/auxiliaryWindowService.ts
+@@ -469,6 +469,8 @@ export class BrowserAuxiliaryWindowService extends Disposable implements IAuxili
+ mapOriginalToClone.set(originalNode, clonedNode);
+ }
+
++ const container = shadowRootContainer ?? mainWindow.document.head;
++
+ // Clone all style elements and stylesheet links from the window to the child window
+ // and keep track of elements to settle to signal that styles have loaded
+ // Increment pending links right from the beginning to ensure we only settle when
+@@ -476,7 +478,7 @@ export class BrowserAuxiliaryWindowService extends Disposable implements IAuxili
+ pendingLinksToSettle++;
+ try {
+ // eslint-disable-next-line no-restricted-syntax
+- for (const originalNode of mainWindow.document.head.querySelectorAll('link[rel="stylesheet"], style')) {
++ for (const originalNode of container.querySelectorAll('link[rel="stylesheet"], style')) {
+ cloneNode(originalNode);
+ }
+ } finally {
+@@ -490,7 +492,7 @@ export class BrowserAuxiliaryWindowService extends Disposable implements IAuxili
+
+ // Listen to new stylesheets as they are being added or removed in the main window
+ // and apply to child window (including changes to existing stylesheets elements)
+- disposables.add(sharedMutationObserver.observe(mainWindow.document.head, disposables, { childList: true, subtree: true })(mutations => {
++ disposables.add(sharedMutationObserver.observe(container, disposables, { childList: true, subtree: true })(mutations => {
+ for (const mutation of mutations) {
+ if (
+ mutation.type !== 'childList' || // only interested in added/removed nodes
diff --git a/src/vs/workbench/services/suggest/browser/simpleSuggestWidget.ts b/src/vs/workbench/services/suggest/browser/simpleSuggestWidget.ts
index 1245acce54c..a2312b0d332 100644
--- a/src/vs/workbench/services/suggest/browser/simpleSuggestWidget.ts
@@ -1214,15 +1301,55 @@ index 1245acce54c..a2312b0d332 100644
return;
}
diff --git a/src/vs/workbench/services/themes/browser/workbenchThemeService.ts b/src/vs/workbench/services/themes/browser/workbenchThemeService.ts
-index 99405e3d855..07b705e99e7 100644
+index 99405e3d855..2f96d707b62 100644
--- a/src/vs/workbench/services/themes/browser/workbenchThemeService.ts
+++ b/src/vs/workbench/services/themes/browser/workbenchThemeService.ts
-@@ -874,7 +874,7 @@ class ThemeFileWatcher {
+@@ -18,7 +18,7 @@ import { Event, Emitter } from '../../../../base/common/event.js';
+ import { registerFileIconThemeSchemas } from '../common/fileIconThemeSchema.js';
+ import { IDisposable, Disposable, DisposableStore } from '../../../../base/common/lifecycle.js';
+ import { FileIconThemeData, FileIconThemeLoader } from './fileIconThemeData.js';
+-import { createStyleSheet } from '../../../../base/browser/domStylesheets.js';
++import { createStyleSheet, shadowRootContainer } from '../../../../base/browser/domStylesheets.js';
+ import { IBrowserWorkbenchEnvironmentService } from '../../environment/browser/environmentService.js';
+ import { IFileService, FileChangeType } from '../../../../platform/files/common/files.js';
+ import { URI } from '../../../../base/common/uri.js';
+@@ -872,9 +872,38 @@ class ThemeFileWatcher {
+ }
+ }
++const injectedFontFaces = new Set();
++function injectFontFacesInHead(styleSheetContent: string) {
++ const sheet = new mainWindow.CSSStyleSheet();
++ sheet.replaceSync(styleSheetContent);
++ const fontFaces = Array.from(sheet.cssRules)
++ .filter((rule) => rule instanceof mainWindow.CSSFontFaceRule)
++ .map((r) => r.cssText);
++ const missingFontFaces = fontFaces.filter((fontFace) => !injectedFontFaces.has(fontFace));
++
++ if (missingFontFaces.length > 0) {
++ const fontFaceStyleSheet = new mainWindow.CSSStyleSheet();
++ for (const fontFace of missingFontFaces) {
++ fontFaceStyleSheet.insertRule(fontFace);
++ }
++ mainWindow.document.adoptedStyleSheets = [
++ ...mainWindow.document.adoptedStyleSheets,
++ fontFaceStyleSheet
++ ];
++ }
++}
++
function _applyRules(styleSheetContent: string, rulesClassName: string) {
++ if (shadowRootContainer) {
++ // Font-faces injected in shadow doms are ignored
++ // They need to be injected in the page head
++ // So we need to extract them and inject it in the head by hands if the container is a shadow dom
++ injectFontFacesInHead(styleSheetContent);
++ }
++
++ const container: HTMLElement | ShadowRoot = shadowRootContainer ?? mainWindow.document.head;
// eslint-disable-next-line no-restricted-syntax
- const themeStyles = mainWindow.document.head.getElementsByClassName(rulesClassName);
-+ const themeStyles = mainWindow.document.head.querySelectorAll(`.${rulesClassName}`);
++ const themeStyles = container.querySelectorAll(`.${rulesClassName}`);
if (themeStyles.length === 0) {
const elStyle = createStyleSheet();
elStyle.className = rulesClassName;
diff --git a/vscode-patches/0061-feat-support-adoptedStyleSheets-for-aux-windows.patch b/vscode-patches/0061-feat-support-adoptedStyleSheets-for-aux-windows.patch
index 06e7274a..52f49411 100644
--- a/vscode-patches/0061-feat-support-adoptedStyleSheets-for-aux-windows.patch
+++ b/vscode-patches/0061-feat-support-adoptedStyleSheets-for-aux-windows.patch
@@ -8,7 +8,7 @@ Subject: [PATCH] feat: support adoptedStyleSheets for aux windows
1 file changed, 8 insertions(+), 2 deletions(-)
diff --git a/src/vs/workbench/services/auxiliaryWindow/browser/auxiliaryWindowService.ts b/src/vs/workbench/services/auxiliaryWindow/browser/auxiliaryWindowService.ts
-index 15b221bafb8..3adc42984d0 100644
+index 0dc8b7ce37a..6c094a64793 100644
--- a/src/vs/workbench/services/auxiliaryWindow/browser/auxiliaryWindowService.ts
+++ b/src/vs/workbench/services/auxiliaryWindow/browser/auxiliaryWindowService.ts
@@ -5,7 +5,7 @@
diff --git a/vscode-patches/0067-feat-support-loading-VSCode-in-an-iframe.patch b/vscode-patches/0067-feat-support-loading-VSCode-in-an-iframe.patch
index 7eef870d..6e23a99a 100644
--- a/vscode-patches/0067-feat-support-loading-VSCode-in-an-iframe.patch
+++ b/vscode-patches/0067-feat-support-loading-VSCode-in-an-iframe.patch
@@ -195,7 +195,7 @@ index cc9e8f332c6..d06887a7eb2 100644
export const EventType = {
diff --git a/src/vs/base/browser/domStylesheets.ts b/src/vs/base/browser/domStylesheets.ts
-index 369b16a0e5a..99969bde5a8 100644
+index f82797cdd26..ac0e5a6cb12 100644
--- a/src/vs/base/browser/domStylesheets.ts
+++ b/src/vs/base/browser/domStylesheets.ts
@@ -6,7 +6,7 @@
diff --git a/vscode-patches/0068-feat-mark-elements-created-outside-of-the-VSCode-con.patch b/vscode-patches/0068-feat-mark-elements-created-outside-of-the-VSCode-con.patch
index eb745d5f..8812c0ec 100644
--- a/vscode-patches/0068-feat-mark-elements-created-outside-of-the-VSCode-con.patch
+++ b/vscode-patches/0068-feat-mark-elements-created-outside-of-the-VSCode-con.patch
@@ -21,10 +21,10 @@ index d06887a7eb2..25103157ef1 100644
return element;
}
diff --git a/src/vs/base/browser/domStylesheets.ts b/src/vs/base/browser/domStylesheets.ts
-index 99969bde5a8..2ab675b7895 100644
+index ac0e5a6cb12..69c2ea9408e 100644
--- a/src/vs/base/browser/domStylesheets.ts
+++ b/src/vs/base/browser/domStylesheets.ts
-@@ -51,6 +51,7 @@ export function createStyleSheet(container: HTMLElement = mainWindow.document.he
+@@ -51,6 +51,7 @@ export function createStyleSheet(container: HTMLElement | ShadowRoot = shadowRoo
const style = document.createElement('style');
style.type = 'text/css';
style.media = 'screen';
diff --git a/vscode-patches/0069-feat-centralize-element-creation-to-be-able-to-creat.patch b/vscode-patches/0069-feat-centralize-element-creation-to-be-able-to-creat.patch
index ead41665..e8dfcbc5 100644
--- a/vscode-patches/0069-feat-centralize-element-creation-to-be-able-to-creat.patch
+++ b/vscode-patches/0069-feat-centralize-element-creation-to-be-able-to-creat.patch
@@ -406,7 +406,7 @@ index 942bf6e8315..a3f602cbb4e 100644
fragment.appendChild(textNode);
while (node.firstChild) {
diff --git a/src/vs/base/browser/domStylesheets.ts b/src/vs/base/browser/domStylesheets.ts
-index 2ab675b7895..5ada59c00db 100644
+index 69c2ea9408e..6f8f9d62c25 100644
--- a/src/vs/base/browser/domStylesheets.ts
+++ b/src/vs/base/browser/domStylesheets.ts
@@ -6,7 +6,7 @@
@@ -421,7 +421,7 @@ index 2ab675b7895..5ada59c00db 100644
@@ -48,7 +48,7 @@ export function setContainerElement(container: HTMLElement) {
}
- export function createStyleSheet(container: HTMLElement = mainWindow.document.head, beforeAppend?: (style: HTMLStyleElement) => void, disposableStore?: DisposableStore): HTMLStyleElement {
+ export function createStyleSheet(container: HTMLElement | ShadowRoot = shadowRootContainer ?? mainWindow.document.head, beforeAppend?: (style: HTMLStyleElement) => void, disposableStore?: DisposableStore): HTMLStyleElement {
- const style = document.createElement('style');
+ const style = createElement('style');
style.type = 'text/css';
diff --git a/vscode-patches/0070-fix-close-auxiliary-window-when-the-context-is-unloa.patch b/vscode-patches/0070-fix-close-auxiliary-window-when-the-context-is-unloa.patch
index 80bfcba4..4eafa4a3 100644
--- a/vscode-patches/0070-fix-close-auxiliary-window-when-the-context-is-unloa.patch
+++ b/vscode-patches/0070-fix-close-auxiliary-window-when-the-context-is-unloa.patch
@@ -8,7 +8,7 @@ Subject: [PATCH] fix: close auxiliary window when the context is unloaded
1 file changed, 6 insertions(+)
diff --git a/src/vs/workbench/services/auxiliaryWindow/browser/auxiliaryWindowService.ts b/src/vs/workbench/services/auxiliaryWindow/browser/auxiliaryWindowService.ts
-index 3adc42984d0..412c22ccf9e 100644
+index 6c094a64793..8ae4e7f8e47 100644
--- a/src/vs/workbench/services/auxiliaryWindow/browser/auxiliaryWindowService.ts
+++ b/src/vs/workbench/services/auxiliaryWindow/browser/auxiliaryWindowService.ts
@@ -154,6 +154,12 @@ export class AuxiliaryWindow extends BaseWindow implements IAuxiliaryWindow {
diff --git a/vscode-patches/0078-refactor-extract-shouldAttemptTaskReconnection-flag.patch b/vscode-patches/0078-refactor-extract-shouldAttemptTaskReconnection-flag.patch
index 3cf7c715..f37957cb 100644
--- a/vscode-patches/0078-refactor-extract-shouldAttemptTaskReconnection-flag.patch
+++ b/vscode-patches/0078-refactor-extract-shouldAttemptTaskReconnection-flag.patch
@@ -33,7 +33,7 @@ index 36209197e92..01d8342874e 100644
this._tasksReconnected = true;
this._storageService.remove(AbstractTaskService.PersistentTasks_Key, StorageScope.WORKSPACE);
diff --git a/src/vs/workbench/contrib/terminal/browser/terminalService.ts b/src/vs/workbench/contrib/terminal/browser/terminalService.ts
-index effcc11e410..c3cf2fc53ff 100644
+index c3e617145a8..eb5f3fabc31 100644
--- a/src/vs/workbench/contrib/terminal/browser/terminalService.ts
+++ b/src/vs/workbench/contrib/terminal/browser/terminalService.ts
@@ -42,7 +42,7 @@ import { IEditorGroupsService } from '../../../services/editor/common/editorGrou