diff --git a/build/gulpfile.vscode.js b/build/gulpfile.vscode.js index 5c8abb020ef..c4c06a7e64c 100644 --- a/build/gulpfile.vscode.js +++ b/build/gulpfile.vscode.js @@ -157,7 +157,7 @@ function packageTask(platform, arch, sourceFolderName, destinationFolderName, op 'vs/workbench/workbench.desktop.main.js', 'vs/workbench/workbench.desktop.main.css', 'vs/workbench/services/extensions/node/extensionHostProcess.js', - 'vs/code/electron-browser/workbench/preload.js', + 'vs/code/electron-browser/preload.js', 'vs/code/electron-browser/workbench/workbench.html', 'vs/code/electron-browser/workbench/workbench.js' ]); diff --git a/src/vs/base/electron-sandbox/globals.ts b/src/vs/base/electron-sandbox/globals.ts index a5f420cbd1b..414e531765d 100644 --- a/src/vs/base/electron-sandbox/globals.ts +++ b/src/vs/base/electron-sandbox/globals.ts @@ -11,6 +11,12 @@ export const ipcRenderer = (window as any).vscode.ipcRenderer as { */ on(channel: string, listener: Function): void; + /** + * Adds a one time `listener` function for the event. This `listener` is invoked + * only the next time a message is sent to `channel`, after which it is removed. + */ + once(channel: string, listener: Function): void; + /** * Removes the specified `listener` from the listener array for the specified * `channel`. @@ -32,3 +38,11 @@ export const ipcRenderer = (window as any).vscode.ipcRenderer as { */ send(channel: string, ...args: any[]): void; }; + +export const webFrame = (window as any).vscode.webFrame as { + + /** + * The current zoom factor. + */ + getZoomFactor(): number; +}; diff --git a/src/vs/base/parts/contextmenu/electron-browser/contextmenu.ts b/src/vs/base/parts/contextmenu/electron-sandbox/contextmenu.ts similarity index 97% rename from src/vs/base/parts/contextmenu/electron-browser/contextmenu.ts rename to src/vs/base/parts/contextmenu/electron-sandbox/contextmenu.ts index da008e59930..a08b8a54278 100644 --- a/src/vs/base/parts/contextmenu/electron-browser/contextmenu.ts +++ b/src/vs/base/parts/contextmenu/electron-sandbox/contextmenu.ts @@ -3,7 +3,7 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import { ipcRenderer, Event } from 'electron'; +import { ipcRenderer } from 'vs/base/electron-sandbox/globals'; import { IContextMenuItem, ISerializableContextMenuItem, CONTEXT_MENU_CLOSE_CHANNEL, CONTEXT_MENU_CHANNEL, IPopupOptions, IContextMenuEvent } from 'vs/base/parts/contextmenu/common/contextmenu'; let contextMenuIdPool = 0; diff --git a/src/vs/code/electron-browser/issue/issueReporterMain.ts b/src/vs/code/electron-browser/issue/issueReporterMain.ts index 0bca9e03a6f..406df2dc41e 100644 --- a/src/vs/code/electron-browser/issue/issueReporterMain.ts +++ b/src/vs/code/electron-browser/issue/issueReporterMain.ts @@ -27,7 +27,7 @@ import { EnvironmentService, INativeEnvironmentService } from 'vs/platform/envir import { InstantiationService } from 'vs/platform/instantiation/common/instantiationService'; import { ServiceCollection } from 'vs/platform/instantiation/common/serviceCollection'; import { IMainProcessService } from 'vs/platform/ipc/common/mainProcessService'; -import { MainProcessService } from 'vs/platform/ipc/electron-browser/mainProcessService'; +import { MainProcessService } from 'vs/platform/ipc/electron-sandbox/mainProcessService'; import { ISharedProcessService } from 'vs/platform/ipc/electron-browser/sharedProcessService'; import { ISettingsSearchIssueReporterData, IssueReporterData, IssueReporterExtensionData, IssueReporterFeatures, IssueReporterStyles, IssueType } from 'vs/platform/issue/common/issue'; import { getLogLevel, ILogService } from 'vs/platform/log/common/log'; diff --git a/src/vs/code/electron-browser/workbench/preload.js b/src/vs/code/electron-browser/preload.js similarity index 71% rename from src/vs/code/electron-browser/workbench/preload.js rename to src/vs/code/electron-browser/preload.js index 07802dd616c..20012388f48 100644 --- a/src/vs/code/electron-browser/workbench/preload.js +++ b/src/vs/code/electron-browser/preload.js @@ -7,7 +7,7 @@ (function () { 'use strict'; - const { ipcRenderer } = require('electron'); + const { ipcRenderer, webFrame } = require('electron'); // @ts-ignore window.vscode = { @@ -15,6 +15,8 @@ /** * A minimal set of methods exposed from ipcRenderer * to support communication to electron-main + * + * @type {typeof import('../../base/electron-sandbox/globals').ipcRenderer} */ ipcRenderer: { @@ -38,6 +40,16 @@ ipcRenderer.on(channel, listener); }, + /** + * @param {string} channel + * @param {(event: import('electron').IpcRendererEvent, ...args: any[]) => void} listener + */ + once(channel, listener) { + validateIPC(channel); + + ipcRenderer.once(channel, listener); + }, + /** * @param {string} channel * @param {(event: import('electron').IpcRendererEvent, ...args: any[]) => void} listener @@ -47,6 +59,18 @@ ipcRenderer.removeListener(channel, listener); } + }, + + /** + * Support for methods of webFrame type. + * + * @type {typeof import('../../base/electron-sandbox/globals').webFrame} + */ + webFrame: { + + getZoomFactor() { + return webFrame.getZoomFactor(); + } } }; diff --git a/src/vs/code/electron-browser/processExplorer/processExplorerMain.ts b/src/vs/code/electron-browser/processExplorer/processExplorerMain.ts index 9091e788eed..77575f4ce35 100644 --- a/src/vs/code/electron-browser/processExplorer/processExplorerMain.ts +++ b/src/vs/code/electron-browser/processExplorer/processExplorerMain.ts @@ -13,7 +13,7 @@ import { ProcessExplorerStyles, ProcessExplorerData } from 'vs/platform/issue/co import * as browser from 'vs/base/browser/browser'; import * as platform from 'vs/base/common/platform'; import { IContextMenuItem } from 'vs/base/parts/contextmenu/common/contextmenu'; -import { popup } from 'vs/base/parts/contextmenu/electron-browser/contextmenu'; +import { popup } from 'vs/base/parts/contextmenu/electron-sandbox/contextmenu'; import { ProcessItem } from 'vs/base/common/processes'; import { addDisposableListener } from 'vs/base/browser/dom'; import { DisposableStore } from 'vs/base/common/lifecycle'; diff --git a/src/vs/code/electron-main/window.ts b/src/vs/code/electron-main/window.ts index db8c6db420a..c0c2c435c72 100644 --- a/src/vs/code/electron-main/window.ts +++ b/src/vs/code/electron-main/window.ts @@ -779,7 +779,7 @@ export class CodeWindow extends Disposable implements ICodeWindow { } private doGetPreloadUrl(): string { - return `${require.toUrl('vs/code/electron-browser/workbench/preload.js')}`; + return require.toUrl('vs/code/electron-browser/preload.js'); } serializeWindowState(): IWindowState { diff --git a/src/vs/platform/issue/electron-main/issueMainService.ts b/src/vs/platform/issue/electron-main/issueMainService.ts index 94c599a5f38..d32efddec73 100644 --- a/src/vs/platform/issue/electron-main/issueMainService.ts +++ b/src/vs/platform/issue/electron-main/issueMainService.ts @@ -18,6 +18,7 @@ import { ILogService } from 'vs/platform/log/common/log'; import { IWindowState } from 'vs/platform/windows/electron-main/windows'; import { listProcesses } from 'vs/base/node/ps'; import { IDialogMainService } from 'vs/platform/dialogs/electron-main/dialogs'; +import { URI } from 'vs/base/common/uri'; const DEFAULT_BACKGROUND_COLOR = '#1E1E1E'; @@ -189,6 +190,7 @@ export class IssueMainService implements IIssueService { title: localize('issueReporter', "Issue Reporter"), backgroundColor: data.styles.backgroundColor || DEFAULT_BACKGROUND_COLOR, webPreferences: { + preload: URI.parse(require.toUrl('vs/code/electron-browser/preload.js')).fsPath, nodeIntegration: true, enableWebSQL: false } @@ -239,6 +241,7 @@ export class IssueMainService implements IIssueService { backgroundColor: data.styles.backgroundColor, title: localize('processExplorer', "Process Explorer"), webPreferences: { + preload: URI.parse(require.toUrl('vs/code/electron-browser/preload.js')).fsPath, nodeIntegration: true, enableWebSQL: false } diff --git a/src/vs/workbench/services/contextmenu/electron-browser/contextmenuService.ts b/src/vs/workbench/services/contextmenu/electron-sandbox/contextmenuService.ts similarity index 98% rename from src/vs/workbench/services/contextmenu/electron-browser/contextmenuService.ts rename to src/vs/workbench/services/contextmenu/electron-sandbox/contextmenuService.ts index 70a68b7f35f..2290ea667c7 100644 --- a/src/vs/workbench/services/contextmenu/electron-browser/contextmenuService.ts +++ b/src/vs/workbench/services/contextmenu/electron-sandbox/contextmenuService.ts @@ -9,7 +9,7 @@ import * as dom from 'vs/base/browser/dom'; import { IContextMenuService, IContextViewService } from 'vs/platform/contextview/browser/contextView'; import { ITelemetryService } from 'vs/platform/telemetry/common/telemetry'; import { IKeybindingService } from 'vs/platform/keybinding/common/keybinding'; -import { webFrame } from 'electron'; +import { webFrame } from 'vs/base/electron-sandbox/globals'; import { unmnemonicLabel } from 'vs/base/common/labels'; import { Event, Emitter } from 'vs/base/common/event'; import { INotificationService } from 'vs/platform/notification/common/notification'; @@ -17,7 +17,7 @@ import { IContextMenuDelegate, ContextSubMenu, IContextMenuEvent } from 'vs/base import { once } from 'vs/base/common/functional'; import { Disposable } from 'vs/base/common/lifecycle'; import { IContextMenuItem } from 'vs/base/parts/contextmenu/common/contextmenu'; -import { popup } from 'vs/base/parts/contextmenu/electron-browser/contextmenu'; +import { popup } from 'vs/base/parts/contextmenu/electron-sandbox/contextmenu'; import { getTitleBarStyle } from 'vs/platform/windows/common/windows'; import { isMacintosh } from 'vs/base/common/platform'; import { IConfigurationService } from 'vs/platform/configuration/common/configuration'; diff --git a/src/vs/workbench/workbench.desktop.main.ts b/src/vs/workbench/workbench.desktop.main.ts index 96a0807b7c9..20b6eea1eaf 100644 --- a/src/vs/workbench/workbench.desktop.main.ts +++ b/src/vs/workbench/workbench.desktop.main.ts @@ -39,7 +39,6 @@ import 'vs/workbench/services/dialogs/electron-browser/dialogService'; import 'vs/workbench/services/keybinding/electron-browser/nativeKeymapService'; import 'vs/workbench/services/keybinding/electron-browser/keybinding.contribution'; import 'vs/workbench/services/extensions/electron-browser/extensionService'; -import 'vs/workbench/services/contextmenu/electron-browser/contextmenuService'; import 'vs/workbench/services/extensionManagement/electron-browser/extensionManagementServerService'; import 'vs/workbench/services/extensionManagement/electron-browser/extensionTipsService'; import 'vs/workbench/services/remote/electron-browser/remoteAgentServiceImpl'; diff --git a/src/vs/workbench/workbench.sandbox.main.ts b/src/vs/workbench/workbench.sandbox.main.ts index 699e03efeeb..bd584574c96 100644 --- a/src/vs/workbench/workbench.sandbox.main.ts +++ b/src/vs/workbench/workbench.sandbox.main.ts @@ -18,6 +18,7 @@ import 'vs/workbench/services/userDataSync/electron-sandbox/storageKeysSyncRegis import 'vs/workbench/services/menubar/electron-sandbox/menubarService'; import 'vs/workbench/services/issue/electron-sandbox/issueService'; import 'vs/workbench/services/update/electron-sandbox/updateService'; +import 'vs/workbench/services/contextmenu/electron-sandbox/contextmenuService'; //#endregion