diff --git a/src/vs/base/browser/browser.ts b/src/vs/base/browser/browser.ts
index c092106..66f1934 100644
--- a/src/vs/base/browser/browser.ts
+++ b/src/vs/base/browser/browser.ts
@@ -125,0 +126,4 @@ export const isEdgeWebView = isEdge && (userAgent.indexOf('WebView/') >= 0);
+export const isMacintosh = userAgent.indexOf("Macintosh") >= 0;
+export const isWindows = userAgent.indexOf("Windows") >= 0;
+export const isLinux = userAgent.indexOf("Linux") >= 0;
+
diff --git a/src/vs/base/browser/keyboardEvent.ts b/src/vs/base/browser/keyboardEvent.ts
index 03bdffc..d72c168 100644
--- a/src/vs/base/browser/keyboardEvent.ts
+++ b/src/vs/base/browser/keyboardEvent.ts
@@ -154 +154 @@ let INVERSE_KEY_CODE_MAP: KeyCode[] = new Array(KeyCode.MAX_VALUE);
-		if (platform.isMacintosh) {
+		if (browser.isMacintosh) {
@@ -159 +159 @@ let INVERSE_KEY_CODE_MAP: KeyCode[] = new Array(KeyCode.MAX_VALUE);
-		if (platform.isMacintosh) {
+		if (browser.isMacintosh) {
@@ -205 +205 @@ export interface IKeyboardEvent {
-const ctrlKeyMod = (platform.isMacintosh ? KeyMod.WinCtrl : KeyMod.CtrlCmd);
+const ctrlKeyMod = (browser.isMacintosh ? KeyMod.WinCtrl : KeyMod.CtrlCmd);
@@ -208 +208 @@ const shiftKeyMod = KeyMod.Shift;
-const metaKeyMod = (platform.isMacintosh ? KeyMod.CtrlCmd : KeyMod.WinCtrl);
+const metaKeyMod = (browser.isMacintosh ? KeyMod.CtrlCmd : KeyMod.WinCtrl);
diff --git a/src/vs/base/browser/ui/aria/aria.ts b/src/vs/base/browser/ui/aria/aria.ts
index 1922450..9900776 100644
--- a/src/vs/base/browser/ui/aria/aria.ts
+++ b/src/vs/base/browser/ui/aria/aria.ts
@@ -8 +8 @@ import * as nls from 'vs/nls';
-import { isMacintosh } from 'vs/base/common/platform';
+import { isMacintosh } from 'vs/base/browser/browser';
diff --git a/src/vs/base/browser/ui/list/listWidget.ts b/src/vs/base/browser/ui/list/listWidget.ts
index cd73128..b1246de 100644
--- a/src/vs/base/browser/ui/list/listWidget.ts
+++ b/src/vs/base/browser/ui/list/listWidget.ts
@@ -13 +13 @@ import * as DOM from 'vs/base/browser/dom';
-import * as platform from 'vs/base/common/platform';
+import * as browser from 'vs/base/browser/browser';
@@ -253 +253 @@ class KeyboardController<T> implements IDisposable {
-			onKeyDown.filter(e => (platform.isMacintosh ? e.metaKey : e.ctrlKey) && e.keyCode === KeyCode.KEY_A).on(this.onCtrlA, this, this.disposables);
+			onKeyDown.filter(e => (browser.isMacintosh ? e.metaKey : e.ctrlKey) && e.keyCode === KeyCode.KEY_A).on(this.onCtrlA, this, this.disposables);
@@ -491 +491 @@ export function isSelectionSingleChangeEvent(event: IListMouseEvent<any> | IList
-	return platform.isMacintosh ? event.browserEvent.metaKey : event.browserEvent.ctrlKey;
+	return browser.isMacintosh ? event.browserEvent.metaKey : event.browserEvent.ctrlKey;
@@ -553 +553 @@ export class MouseController<T> implements IDisposable {
-		return platform.isMacintosh ? event.browserEvent.metaKey : event.browserEvent.ctrlKey;
+		return browser.isMacintosh ? event.browserEvent.metaKey : event.browserEvent.ctrlKey;
diff --git a/src/vs/base/browser/ui/menu/menu.ts b/src/vs/base/browser/ui/menu/menu.ts
index 47da5e4..fbf7e22 100644
--- a/src/vs/base/browser/ui/menu/menu.ts
+++ b/src/vs/base/browser/ui/menu/menu.ts
@@ -23,2 +23,3 @@ import { isLinux } from 'vs/base/common/platform';
-export const MENU_MNEMONIC_REGEX: RegExp = /\(&([^\s&])\)|(?<!&)&([^\s&])/;
-export const MENU_ESCAPED_MNEMONIC_REGEX: RegExp = /(?<!&amp;)(?:&amp;)([^\s&])/;
+// Not all browsers support negative lookbehinds. We don't support mnemonics currently anyway.
+export const MENU_MNEMONIC_REGEX: RegExp = /&([^\s&])/; ///\(&([^\s&])\)|(?<!&)&([^\s&])/;
+export const MENU_ESCAPED_MNEMONIC_REGEX: RegExp = /&amp;([^\s&])/; // /(?<!&amp;)(?:&amp;)([^\s&])/;
diff --git a/src/vs/base/browser/ui/sash/sash.ts b/src/vs/base/browser/ui/sash/sash.ts
index 8c7168b..8bbea63 100644
--- a/src/vs/base/browser/ui/sash/sash.ts
+++ b/src/vs/base/browser/ui/sash/sash.ts
@@ -9 +9 @@ import { isIPad } from 'vs/base/browser/browser';
-import { isMacintosh } from 'vs/base/common/platform';
+import { isMacintosh } from 'vs/base/browser/browser';
diff --git a/src/vs/base/browser/ui/scrollbar/scrollableElement.ts b/src/vs/base/browser/ui/scrollbar/scrollableElement.ts
index 9b31c84..51de0ea 100644
--- a/src/vs/base/browser/ui/scrollbar/scrollableElement.ts
+++ b/src/vs/base/browser/ui/scrollbar/scrollableElement.ts
@@ -18 +18 @@ import { IDisposable, dispose } from 'vs/base/common/lifecycle';
-import * as platform from 'vs/base/common/platform';
+import * as browser from 'vs/base/browser/browser';
@@ -269 +269 @@ export abstract class AbstractScrollableElement extends Widget {
-		if (platform.isMacintosh) {
+		if (browser.isMacintosh) {
@@ -338 +338 @@ export abstract class AbstractScrollableElement extends Widget {
-			const shiftConvert = !platform.isMacintosh && e.browserEvent && e.browserEvent.shiftKey;
+			const shiftConvert = !browser.isMacintosh && e.browserEvent && e.browserEvent.shiftKey;
@@ -571 +571 @@ function resolveOptions(opts: ScrollableElementCreationOptions): ScrollableEleme
-	if (platform.isMacintosh) {
+	if (browser.isMacintosh) {
diff --git a/src/vs/base/browser/ui/selectBox/selectBox.ts b/src/vs/base/browser/ui/selectBox/selectBox.ts
index 0e7314f..814fb0a 100644
--- a/src/vs/base/browser/ui/selectBox/selectBox.ts
+++ b/src/vs/base/browser/ui/selectBox/selectBox.ts
@@ -16 +16 @@ import { SelectBoxList } from 'vs/base/browser/ui/selectBox/selectBoxCustom';
-import { isMacintosh } from 'vs/base/common/platform';
+import { isMacintosh } from 'vs/base/browser/browser';
diff --git a/src/vs/base/browser/ui/selectBox/selectBoxCustom.ts b/src/vs/base/browser/ui/selectBox/selectBoxCustom.ts
index 0ddce2d..cc2fd1b 100644
--- a/src/vs/base/browser/ui/selectBox/selectBoxCustom.ts
+++ b/src/vs/base/browser/ui/selectBox/selectBoxCustom.ts
@@ -20 +20 @@ import { ISelectBoxDelegate, ISelectOptionItem, ISelectBoxOptions, ISelectBoxSty
-import { isMacintosh } from 'vs/base/common/platform';
+import { isMacintosh } from 'vs/base/browser/browser';
diff --git a/src/vs/base/browser/ui/selectBox/selectBoxNative.ts b/src/vs/base/browser/ui/selectBox/selectBoxNative.ts
index 01f59d4..453d5c4 100644
--- a/src/vs/base/browser/ui/selectBox/selectBoxNative.ts
+++ b/src/vs/base/browser/ui/selectBox/selectBoxNative.ts
@@ -12 +12 @@ import { ISelectBoxDelegate, ISelectOptionItem, ISelectBoxOptions, ISelectBoxSty
-import { isMacintosh } from 'vs/base/common/platform';
+import { isMacintosh } from 'vs/base/browser/browser';
diff --git a/src/vs/base/browser/ui/tree/abstractTree.ts b/src/vs/base/browser/ui/tree/abstractTree.ts
index 2283978..26c2dee 100644
--- a/src/vs/base/browser/ui/tree/abstractTree.ts
+++ b/src/vs/base/browser/ui/tree/abstractTree.ts
@@ -24 +24 @@ import { disposableTimeout } from 'vs/base/common/async';
-import { isMacintosh } from 'vs/base/common/platform';
+import { isMacintosh } from 'vs/base/browser/browser';
diff --git a/src/vs/base/parts/quickopen/browser/quickOpenWidget.ts b/src/vs/base/parts/quickopen/browser/quickOpenWidget.ts
index 74148e4..041205b 100644
--- a/src/vs/base/parts/quickopen/browser/quickOpenWidget.ts
+++ b/src/vs/base/parts/quickopen/browser/quickOpenWidget.ts
@@ -8 +8 @@ import * as nls from 'vs/nls';
-import * as platform from 'vs/base/common/platform';
+import * as browser from 'vs/base/browser/browser';
@@ -66 +66 @@ export class QuickOpenController extends DefaultController {
-		if (platform.isMacintosh) {
+		if (browser.isMacintosh) {
diff --git a/src/vs/base/parts/tree/browser/treeDefaults.ts b/src/vs/base/parts/tree/browser/treeDefaults.ts
index f91ca2b..ef6fce9 100644
--- a/src/vs/base/parts/tree/browser/treeDefaults.ts
+++ b/src/vs/base/parts/tree/browser/treeDefaults.ts
@@ -8,0 +9 @@ import * as platform from 'vs/base/common/platform';
+import * as browser from 'vs/base/browser/browser';
@@ -113 +114 @@ export class DefaultController implements _.IController {
-			if (platform.isMacintosh) {
+			if (browser.isMacintosh) {
@@ -155 +156 @@ export class DefaultController implements _.IController {
-		const isMac = platform.isMacintosh;
+		const isMac = browser.isMacintosh;
diff --git a/src/vs/code/electron-browser/issue/issueReporterMain.ts b/src/vs/code/electron-browser/issue/issueReporterMain.ts
index ca5ed69..945b281 100644
--- a/src/vs/code/electron-browser/issue/issueReporterMain.ts
+++ b/src/vs/code/electron-browser/issue/issueReporterMain.ts
@@ -423 +423 @@ export class IssueReporter extends Disposable {
-			const cmdOrCtrlKey = platform.isMacintosh ? e.metaKey : e.ctrlKey;
+			const cmdOrCtrlKey = browser.isMacintosh ? e.metaKey : e.ctrlKey;
@@ -457 +457 @@ export class IssueReporter extends Disposable {
-			if (platform.isMacintosh) {
+			if (browser.isMacintosh) {
diff --git a/src/vs/code/electron-browser/processExplorer/processExplorerMain.ts b/src/vs/code/electron-browser/processExplorer/processExplorerMain.ts
index ce8c65f..c31a6d3 100644
--- a/src/vs/code/electron-browser/processExplorer/processExplorerMain.ts
+++ b/src/vs/code/electron-browser/processExplorer/processExplorerMain.ts
@@ -304 +304 @@ export function startup(data: ProcessExplorerData): void {
-		const cmdOrCtrlKey = platform.isMacintosh ? e.metaKey : e.ctrlKey;
+		const cmdOrCtrlKey = browser.isMacintosh ? e.metaKey : e.ctrlKey;
diff --git a/src/vs/code/electron-browser/sharedProcess/sharedProcessMain.ts b/src/vs/code/electron-browser/sharedProcess/sharedProcessMain.ts
index 25de96d..66e732e 100644
--- a/src/vs/code/electron-browser/sharedProcess/sharedProcessMain.ts
+++ b/src/vs/code/electron-browser/sharedProcess/sharedProcessMain.ts
@@ -195,0 +196,2 @@ async function handshake(configuration: ISharedProcessConfiguration): Promise<vo
+
+startup({ machineId: "1" });
diff --git a/src/vs/editor/browser/config/configuration.ts b/src/vs/editor/browser/config/configuration.ts
index f4a579b..7f57220 100644
--- a/src/vs/editor/browser/config/configuration.ts
+++ b/src/vs/editor/browser/config/configuration.ts
@@ -353 +353 @@ export class Configuration extends CommonEditorConfiguration {
-		if (platform.isMacintosh) {
+		if (browser.isMacintosh) {
diff --git a/src/vs/editor/browser/controller/mouseHandler.ts b/src/vs/editor/browser/controller/mouseHandler.ts
index 1a8af35..fe56af9 100644
--- a/src/vs/editor/browser/controller/mouseHandler.ts
+++ b/src/vs/editor/browser/controller/mouseHandler.ts
@@ -222 +222 @@ export class MouseHandler extends ViewEventHandler {
-		if (platform.isMacintosh && e.leftButton && e.ctrlKey) {
+		if (browser.isMacintosh && e.leftButton && e.ctrlKey) {
diff --git a/src/vs/editor/browser/controller/textAreaHandler.ts b/src/vs/editor/browser/controller/textAreaHandler.ts
index be5583d..c0e4f2e 100644
--- a/src/vs/editor/browser/controller/textAreaHandler.ts
+++ b/src/vs/editor/browser/controller/textAreaHandler.ts
@@ -214 +214 @@ export class TextAreaHandler extends ViewPart {
-					if (platform.isMacintosh) {
+					if (browser.isMacintosh) {
diff --git a/src/vs/editor/browser/controller/textAreaInput.ts b/src/vs/editor/browser/controller/textAreaInput.ts
index 7ccf0e9..8c30ca2 100644
--- a/src/vs/editor/browser/controller/textAreaInput.ts
+++ b/src/vs/editor/browser/controller/textAreaInput.ts
@@ -262 +262 @@ export class TextAreaInput extends Disposable {
-			const [newState, typeInput] = deduceInputFromTextAreaValue(/*couldBeEmojiInput*/platform.isMacintosh, /*couldBeTypingAtOffset0*/previousEventWasFocus && platform.isMacintosh);
+			const [newState, typeInput] = deduceInputFromTextAreaValue(/*couldBeEmojiInput*/browser.isMacintosh, /*couldBeTypingAtOffset0*/previousEventWasFocus && browser.isMacintosh);
diff --git a/src/vs/editor/common/config/commonEditorConfig.ts b/src/vs/editor/common/config/commonEditorConfig.ts
index fa004fb..6420078 100644
--- a/src/vs/editor/common/config/commonEditorConfig.ts
+++ b/src/vs/editor/common/config/commonEditorConfig.ts
@@ -392 +392 @@ const editorConfiguration: IConfigurationNode = {
-			'included': platform.isMacintosh
+			'included': platform.isNative && platform.isMacintosh
diff --git a/src/vs/editor/common/config/editorOptions.ts b/src/vs/editor/common/config/editorOptions.ts
index 934e908..b404444 100644
--- a/src/vs/editor/common/config/editorOptions.ts
+++ b/src/vs/editor/common/config/editorOptions.ts
@@ -9,0 +10 @@ import * as platform from 'vs/base/common/platform';
+import * as browser from 'vs/base/browser/browser';
@@ -1765 +1766 @@ export class EditorOptionsValidator {
-				configuredMulticursorModifier = platform.isMacintosh ? 'metaKey' : 'ctrlKey';
+				configuredMulticursorModifier = browser.isMacintosh ? 'metaKey' : 'ctrlKey';
@@ -2530 +2531 @@ export const EDITOR_FONT_DEFAULTS = {
-		platform.isMacintosh ? DEFAULT_MAC_FONT_FAMILY : (platform.isLinux ? DEFAULT_LINUX_FONT_FAMILY : DEFAULT_WINDOWS_FONT_FAMILY)
+		browser.isMacintosh ? DEFAULT_MAC_FONT_FAMILY : (platform.isLinux ? DEFAULT_LINUX_FONT_FAMILY : DEFAULT_WINDOWS_FONT_FAMILY)
@@ -2534 +2535 @@ export const EDITOR_FONT_DEFAULTS = {
-		platform.isMacintosh ? 12 : 14
+		browser.isMacintosh ? 12 : 14
diff --git a/src/vs/editor/common/config/fontInfo.ts b/src/vs/editor/common/config/fontInfo.ts
index 88cb52a..c4a1be9 100644
--- a/src/vs/editor/common/config/fontInfo.ts
+++ b/src/vs/editor/common/config/fontInfo.ts
@@ -6 +6 @@
-import * as platform from 'vs/base/common/platform';
+import * as browser from 'vs/base/browser/browser';
@@ -14 +14 @@ import { EditorZoom } from 'vs/editor/common/config/editorZoom';
-const GOLDEN_LINE_HEIGHT_RATIO = platform.isMacintosh ? 1.5 : 1.35;
+const GOLDEN_LINE_HEIGHT_RATIO = browser.isMacintosh ? 1.5 : 1.35;
diff --git a/src/vs/editor/contrib/clipboard/clipboard.ts b/src/vs/editor/contrib/clipboard/clipboard.ts
index 5e43f1b..2244391 100644
--- a/src/vs/editor/contrib/clipboard/clipboard.ts
+++ b/src/vs/editor/contrib/clipboard/clipboard.ts
@@ -29 +29,2 @@ const supportsCopyWithSyntaxHighlighting = (supportsCopy && !browser.isEdgeOrIE)
-const supportsPaste = (platform.isNative || (!browser.isChrome && document.queryCommandSupported('paste')));
+// const supportsPaste = (platform.isNative || (!browser.isChrome && document.queryCommandSupported('paste')));
+const supportsPaste = true;
@@ -176,0 +178 @@ class ExecCommandPasteAction extends ExecCommandAction {
+		const { workbench } = require('vs/../../../../packages/vscode/src/workbench') as typeof import ('vs/../../../../packages/vscode/src/workbench');
@@ -181 +183 @@ class ExecCommandPasteAction extends ExecCommandAction {
-			precondition: EditorContextKeys.writable,
+			precondition: (require('vs/platform/contextkey/common/contextkey') as typeof import('vs/platform/contextkey/common/contextkey')).ContextKeyExpr.and(EditorContextKeys.writable, workbench.clipboardContextKey),
@@ -191 +193,2 @@ class ExecCommandPasteAction extends ExecCommandAction {
-				order: 3
+				order: 3,
+				when: workbench.clipboardContextKey,
@@ -194,0 +198,14 @@ class ExecCommandPasteAction extends ExecCommandAction {
+
+	public async run(accessor, editor: ICodeEditor): Promise<void> {
+		if (editor instanceof (require('vs/editor/browser/widget/codeEditorWidget') as typeof import('vs/editor/browser/widget/codeEditorWidget')).CodeEditorWidget) {
+			try {
+				editor.trigger('', (require('vs/editor/common/editorCommon') as typeof import ('vs/editor/common/editorCommon')).Handler.Paste, {
+					text: await (require('vs/../../../../packages/vscode/src/workbench') as typeof import ('vs/../../../../packages/vscode/src/workbench')).workbench.clipboardText,
+				});
+			} catch (ex) {
+				super.run(accessor, editor);
+			}
+		} else {
+			super.run(accessor, editor);
+		}
+	}
diff --git a/src/vs/editor/contrib/dnd/dnd.ts b/src/vs/editor/contrib/dnd/dnd.ts
index caa3ea7..e32371f 100644
--- a/src/vs/editor/contrib/dnd/dnd.ts
+++ b/src/vs/editor/contrib/dnd/dnd.ts
@@ -9 +9 @@ import { IDisposable, dispose } from 'vs/base/common/lifecycle';
-import { isMacintosh } from 'vs/base/common/platform';
+import { isMacintosh } from 'vs/base/browser/browser';
diff --git a/src/vs/editor/contrib/goToDefinition/clickLinkGesture.ts b/src/vs/editor/contrib/goToDefinition/clickLinkGesture.ts
index 3b72a01..0d723f5 100644
--- a/src/vs/editor/contrib/goToDefinition/clickLinkGesture.ts
+++ b/src/vs/editor/contrib/goToDefinition/clickLinkGesture.ts
@@ -86 +86 @@ function createOptions(multiCursorModifier: 'altKey' | 'ctrlKey' | 'metaKey'): C
-		if (platform.isMacintosh) {
+		if (browser.isMacintosh) {
@@ -92 +92 @@ function createOptions(multiCursorModifier: 'altKey' | 'ctrlKey' | 'metaKey'): C
-	if (platform.isMacintosh) {
+	if (browser.isMacintosh) {
diff --git a/src/vs/editor/contrib/links/links.ts b/src/vs/editor/contrib/links/links.ts
index 972a60c..453ad61 100644
--- a/src/vs/editor/contrib/links/links.ts
+++ b/src/vs/editor/contrib/links/links.ts
@@ -13 +13 @@ import { IDisposable, dispose } from 'vs/base/common/lifecycle';
-import * as platform from 'vs/base/common/platform';
+import * as browser from 'vs/base/browser/browser';
@@ -29 +29 @@ const HOVER_MESSAGE_GENERAL_META = new MarkdownString().appendText(
-	platform.isMacintosh
+	browser.isMacintosh
@@ -35 +35 @@ const HOVER_MESSAGE_COMMAND_META = new MarkdownString().appendText(
-	platform.isMacintosh
+	browser.isMacintosh
@@ -41 +41 @@ const HOVER_MESSAGE_GENERAL_ALT = new MarkdownString().appendText(
-	platform.isMacintosh
+	browser.isMacintosh
@@ -47 +47 @@ const HOVER_MESSAGE_COMMAND_ALT = new MarkdownString().appendText(
-	platform.isMacintosh
+	browser.isMacintosh
diff --git a/src/vs/editor/standalone/browser/accessibilityHelp/accessibilityHelp.ts b/src/vs/editor/standalone/browser/accessibilityHelp/accessibilityHelp.ts
index cacc646..459fedd 100644
--- a/src/vs/editor/standalone/browser/accessibilityHelp/accessibilityHelp.ts
+++ b/src/vs/editor/standalone/browser/accessibilityHelp/accessibilityHelp.ts
@@ -262 +262 @@ class AccessibilityHelpWidget extends Widget implements IOverlayWidget {
-			platform.isMacintosh
+			browser.isMacintosh
@@ -291 +291 @@ class AccessibilityHelpWidget extends Widget implements IOverlayWidget {
-			platform.isMacintosh
+			browser.isMacintosh
diff --git a/src/vs/loader.js b/src/vs/loader.js
index 4eddcab..2badfc3 100644
--- a/src/vs/loader.js
+++ b/src/vs/loader.js
@@ -671,4 +671,4 @@ var AMDLoader;
-            this._fs = nodeRequire('fs');
-            this._vm = nodeRequire('vm');
-            this._path = nodeRequire('path');
-            this._crypto = nodeRequire('crypto');
+            this._fs = require('fs');
+            this._vm = require('vm');
+            this._path = require('path');
+            this._crypto = require('crypto');
@@ -736,0 +737,12 @@ var AMDLoader;
+            const context = require.context("../", true, /.*/);
+            if (scriptSrc.indexOf("file:///") !== -1) {
+                let vsSrc = scriptSrc.split("file:///")[1].split(".js")[0];
+                if (this._env.isWindows) {
+                    const vsSrcSplit = vsSrc.split(":/");
+                    vsSrcSplit.shift();
+                    vsSrc = vsSrcSplit.join(":/");
+                }
+                if (vsSrc && vsSrc.startsWith("vs/")) {
+                  scriptSrc = `node|./${vsSrc}`;
+                }
+            }
@@ -741 +753 @@ var AMDLoader;
-                    moduleExports_1 = nodeRequire(pieces[1]);
+                    moduleExports_1 = context(pieces[1]);
diff --git a/src/vs/platform/clipboard/electron-browser/clipboardService.ts b/src/vs/platform/clipboard/electron-browser/clipboardService.ts
index 9952574..908a9ae 100644
--- a/src/vs/platform/clipboard/electron-browser/clipboardService.ts
+++ b/src/vs/platform/clipboard/electron-browser/clipboardService.ts
@@ -9 +9 @@ import { URI } from 'vs/base/common/uri';
-import { isMacintosh } from 'vs/base/common/platform';
+import { isMacintosh } from 'vs/base/browser/browser';
diff --git a/src/vs/platform/windows/common/windows.ts b/src/vs/platform/windows/common/windows.ts
index e28ca55..e8a4cd0 100644
--- a/src/vs/platform/windows/common/windows.ts
+++ b/src/vs/platform/windows/common/windows.ts
@@ -9 +9 @@ import { ITelemetryData } from 'vs/platform/telemetry/common/telemetry';
-import { IProcessEnvironment, isMacintosh, isLinux } from 'vs/base/common/platform';
+import { IProcessEnvironment, isMacintosh, isLinux, isWeb } from 'vs/base/common/platform';
@@ -260,0 +261 @@ export function getTitleBarStyle(configurationService: IConfigurationService, en
+	if (isWeb) { return 'custom'; }
diff --git a/src/vs/workbench/api/electron-browser/mainThreadHeapService.ts b/src/vs/workbench/api/electron-browser/mainThreadHeapService.ts
index 1b5d15e..f0ce325 100644
--- a/src/vs/workbench/api/electron-browser/mainThreadHeapService.ts
+++ b/src/vs/workbench/api/electron-browser/mainThreadHeapService.ts
@@ -49,0 +50 @@ export class HeapService implements IHeapService {
+		return; // Cannot control GC in the browser.
diff --git a/src/vs/workbench/api/node/extHostExtensionService.ts b/src/vs/workbench/api/node/extHostExtensionService.ts
index 58ba2e5..4fb6272 100644
--- a/src/vs/workbench/api/node/extHostExtensionService.ts
+++ b/src/vs/workbench/api/node/extHostExtensionService.ts
@@ -774 +774 @@ function loadCommonJSModule<T>(logService: ILogService, modulePath: string, acti
-		r = require.__$__nodeRequire<T>(modulePath);
+		r = (global as any).nativeNodeRequire(modulePath);
diff --git a/src/vs/workbench/api/node/extHostTypeConverters.ts b/src/vs/workbench/api/node/extHostTypeConverters.ts
index a445750..c64712b 100644
--- a/src/vs/workbench/api/node/extHostTypeConverters.ts
+++ b/src/vs/workbench/api/node/extHostTypeConverters.ts
@@ -26 +25,0 @@ import { ExtHostDocumentsAndEditors } from 'vs/workbench/api/node/extHostDocumen
-import { isString, isNumber } from 'vs/base/common/types';
@@ -31 +29,0 @@ import { LogLevel as _MainLogLevel } from 'vs/platform/log/common/log';
-import { coalesce } from 'vs/base/common/arrays';
@@ -116,0 +115,2 @@ export namespace Diagnostic {
+		const { isString, isNumber } = require('vs/base/common/types');
+		const { coalesce } = require('vs/base/common/arrays');
diff --git a/src/vs/workbench/browser/dnd.ts b/src/vs/workbench/browser/dnd.ts
index 5897ab9..57b926e 100644
--- a/src/vs/workbench/browser/dnd.ts
+++ b/src/vs/workbench/browser/dnd.ts
@@ -168 +168 @@ export class ResourcesDropHandler {
-			return;
+			return (require('vs/../../../../packages/vscode/src/workbench') as typeof import ('vs/../../../../packages/vscode/src/workbench')).workbench.handleDrop(event, resolveTargetGroup, afterDrop, targetIndex);
diff --git a/src/vs/workbench/browser/layout.ts b/src/vs/workbench/browser/layout.ts
index 819bb31..de69133 100644
--- a/src/vs/workbench/browser/layout.ts
+++ b/src/vs/workbench/browser/layout.ts
@@ -15 +15 @@ import { IThemeService } from 'vs/platform/theme/common/themeService';
-import { isMacintosh } from 'vs/base/common/platform';
+import { isNative, isMacintosh } from 'vs/base/common/platform';
@@ -29 +29 @@ import { getZoomFactor } from 'vs/base/browser/browser';
-const TITLE_BAR_HEIGHT = isMacintosh ? 22 : 30;
+const TITLE_BAR_HEIGHT = isNative && isMacintosh ? 22 : 30;
diff --git a/src/vs/workbench/browser/parts/editor/editor.contribution.ts b/src/vs/workbench/browser/parts/editor/editor.contribution.ts
index 5c1e6ef..dd79592 100644
--- a/src/vs/workbench/browser/parts/editor/editor.contribution.ts
+++ b/src/vs/workbench/browser/parts/editor/editor.contribution.ts
@@ -48 +48 @@ import { ContextKeyExpr } from 'vs/platform/contextkey/common/contextkey';
-import { isMacintosh } from 'vs/base/common/platform';
+import { isMacintosh } from 'vs/base/browser/browser';
diff --git a/src/vs/workbench/browser/parts/editor/editorDropTarget.ts b/src/vs/workbench/browser/parts/editor/editorDropTarget.ts
index 52272c0..77d447d 100644
--- a/src/vs/workbench/browser/parts/editor/editorDropTarget.ts
+++ b/src/vs/workbench/browser/parts/editor/editorDropTarget.ts
@@ -14 +14 @@ import { IEditorIdentifier, EditorInput, EditorOptions } from 'vs/workbench/comm
-import { isMacintosh } from 'vs/base/common/platform';
+import { isMacintosh } from 'vs/base/browser/browser';
diff --git a/src/vs/workbench/browser/parts/editor/resourceViewer.ts b/src/vs/workbench/browser/parts/editor/resourceViewer.ts
index 73446c7..90330a2 100644
--- a/src/vs/workbench/browser/parts/editor/resourceViewer.ts
+++ b/src/vs/workbench/browser/parts/editor/resourceViewer.ts
@@ -23 +23 @@ import { memoize } from 'vs/base/common/decorators';
-import * as platform from 'vs/base/common/platform';
+import * as browser from 'vs/base/browser/browser';
@@ -444 +444 @@ class InlineImageView {
-			if (platform.isMacintosh ? altPressed : ctrlPressed) {
+			if (browser.isMacintosh ? altPressed : ctrlPressed) {
@@ -458 +458 @@ class InlineImageView {
-			if (!(platform.isMacintosh ? altPressed : ctrlPressed)) {
+			if (!(browser.isMacintosh ? altPressed : ctrlPressed)) {
@@ -478 +478 @@ class InlineImageView {
-			if (!(platform.isMacintosh ? altPressed : ctrlPressed)) { // zoom in
+			if (!(browser.isMacintosh ? altPressed : ctrlPressed)) { // zoom in
@@ -502 +502 @@ class InlineImageView {
-			const isScrollWhellKeyPressed = platform.isMacintosh ? altPressed : ctrlPressed;
+			const isScrollWhellKeyPressed = browser.isMacintosh ? altPressed : ctrlPressed;
diff --git a/src/vs/workbench/browser/parts/editor/tabsTitleControl.ts b/src/vs/workbench/browser/parts/editor/tabsTitleControl.ts
index e2bfb8d..3f6ae26 100644
--- a/src/vs/workbench/browser/parts/editor/tabsTitleControl.ts
+++ b/src/vs/workbench/browser/parts/editor/tabsTitleControl.ts
@@ -7 +7 @@ import 'vs/css!./media/tabstitlecontrol';
-import { isMacintosh } from 'vs/base/common/platform';
+import { isMacintosh } from 'vs/base/browser/browser';
diff --git a/src/vs/workbench/browser/parts/quickinput/quickInputList.ts b/src/vs/workbench/browser/parts/quickinput/quickInputList.ts
index 7478274..aa55946 100644
--- a/src/vs/workbench/browser/parts/quickinput/quickInputList.ts
+++ b/src/vs/workbench/browser/parts/quickinput/quickInputList.ts
@@ -24 +24 @@ import { range } from 'vs/base/common/arrays';
-import * as platform from 'vs/base/common/platform';
+import * as browser from 'vs/base/browser/browser';
@@ -264 +264 @@ export class QuickInputList {
-					if (platform.isMacintosh ? e.metaKey : e.ctrlKey) {
+					if (browser.isMacintosh ? e.metaKey : e.ctrlKey) {
diff --git a/src/vs/workbench/browser/parts/titlebar/media/titlebarpart.css b/src/vs/workbench/browser/parts/titlebar/media/titlebarpart.css
index a215bde..df7562b 100644
--- a/src/vs/workbench/browser/parts/titlebar/media/titlebarpart.css
+++ b/src/vs/workbench/browser/parts/titlebar/media/titlebarpart.css
@@ -44,0 +45 @@
+.web > .monaco-workbench .part.titlebar,
diff --git a/src/vs/workbench/browser/parts/titlebar/menubarControl.ts b/src/vs/workbench/browser/parts/titlebar/menubarControl.ts
index 254ae28..4f2e217 100644
--- a/src/vs/workbench/browser/parts/titlebar/menubarControl.ts
+++ b/src/vs/workbench/browser/parts/titlebar/menubarControl.ts
@@ -16 +16,2 @@ import { IKeybindingService } from 'vs/platform/keybinding/common/keybinding';
-import { isMacintosh, isLinux } from 'vs/base/common/platform';
+import { isNative } from 'vs/base/common/platform';
+import { isMacintosh, isLinux } from 'vs/base/browser/browser';
@@ -117 +118 @@ export class MenubarControl extends Disposable {
-		if (isMacintosh) {
+		if (isNative && isMacintosh) {
@@ -123 +124 @@ export class MenubarControl extends Disposable {
-		if (isMacintosh || this.currentTitlebarStyleSetting !== 'custom') {
+		if ((isNative && isMacintosh) || this.currentTitlebarStyleSetting !== 'custom') {
@@ -283 +284 @@ export class MenubarControl extends Disposable {
-		if (!isMacintosh && this.currentTitlebarStyleSetting === 'custom') {
+		if (!(isNative && isMacintosh) && this.currentTitlebarStyleSetting === 'custom') {
@@ -299 +300 @@ export class MenubarControl extends Disposable {
-		if (!isMacintosh && this.currentTitlebarStyleSetting === 'custom') {
+		if (!(isNative && isMacintosh) && this.currentTitlebarStyleSetting === 'custom') {
@@ -470 +471 @@ export class MenubarControl extends Disposable {
-				if (!isMacintosh) {
+				if (!(isNative && isMacintosh)) {
@@ -692 +693 @@ export class MenubarControl extends Disposable {
-			if (!isMacintosh && this.currentTitlebarStyleSetting === 'custom') {
+			if (!(isNative && isMacintosh) && this.currentTitlebarStyleSetting === 'custom') {
diff --git a/src/vs/workbench/browser/parts/titlebar/titlebarPart.ts b/src/vs/workbench/browser/parts/titlebar/titlebarPart.ts
index 3ab509f..5c76d17 100644
--- a/src/vs/workbench/browser/parts/titlebar/titlebarPart.ts
+++ b/src/vs/workbench/browser/parts/titlebar/titlebarPart.ts
@@ -25 +25,2 @@ import { TITLE_BAR_ACTIVE_BACKGROUND, TITLE_BAR_ACTIVE_FOREGROUND, TITLE_BAR_INA
-import { isMacintosh, isWindows, isLinux } from 'vs/base/common/platform';
+import { isNative } from 'vs/base/common/platform';
+import { isMacintosh, isWindows, isLinux } from 'vs/base/browser/browser';
@@ -327 +328 @@ export class TitlebarPart extends Part implements ITitleService, ISerializableVi
-		if (!isMacintosh) {
+		if (!(isNative && isMacintosh)) {
@@ -343 +344 @@ export class TitlebarPart extends Part implements ITitleService, ISerializableVi
-		if (!isMacintosh) {
+		if (!(isNative && isMacintosh)) {
@@ -550 +551 @@ export class TitlebarPart extends Part implements ITitleService, ISerializableVi
-		if (!isMacintosh &&
+		if (!(isNative && isMacintosh) &&
@@ -568 +569 @@ export class TitlebarPart extends Part implements ITitleService, ISerializableVi
-			if (isMacintosh || this.configurationService.getValue<MenuBarVisibility>('window.menuBarVisibility') === 'hidden') {
+			if ((isNative && isMacintosh) || this.configurationService.getValue<MenuBarVisibility>('window.menuBarVisibility') === 'hidden') {
diff --git a/src/vs/workbench/browser/workbench.contribution.ts b/src/vs/workbench/browser/workbench.contribution.ts
index 1eb763e..ad509f8 100644
--- a/src/vs/workbench/browser/workbench.contribution.ts
+++ b/src/vs/workbench/browser/workbench.contribution.ts
@@ -9 +9 @@ import { IConfigurationRegistry, Extensions as ConfigurationExtensions, Configur
-import { isMacintosh } from 'vs/base/common/platform';
+import { isMacintosh } from 'vs/base/browser/browser';
diff --git a/src/vs/workbench/common/contextkeys.ts b/src/vs/workbench/common/contextkeys.ts
index a0921a0..ed5ba1e 100644
--- a/src/vs/workbench/common/contextkeys.ts
+++ b/src/vs/workbench/common/contextkeys.ts
@@ -7 +7 @@ import { RawContextKey } from 'vs/platform/contextkey/common/contextkey';
-import { isMacintosh, isLinux, isWindows } from 'vs/base/common/platform';
+import { isMacintosh, isLinux, isWindows } from 'vs/base/browser/browser';
diff --git a/src/vs/workbench/contrib/codeEditor/browser/accessibility/accessibility.ts b/src/vs/workbench/contrib/codeEditor/browser/accessibility/accessibility.ts
index 787c9ef..bd50c14 100644
--- a/src/vs/workbench/contrib/codeEditor/browser/accessibility/accessibility.ts
+++ b/src/vs/workbench/contrib/codeEditor/browser/accessibility/accessibility.ts
@@ -15 +15 @@ import { Disposable } from 'vs/base/common/lifecycle';
-import * as platform from 'vs/base/common/platform';
+import * as browser from 'vs/base/browser/browser';
@@ -197 +197 @@ class AccessibilityHelpWidget extends Widget implements IOverlayWidget {
-			platform.isMacintosh
+			browser.isMacintosh
@@ -239 +239 @@ class AccessibilityHelpWidget extends Widget implements IOverlayWidget {
-			platform.isMacintosh
+			browser.isMacintosh
diff --git a/src/vs/workbench/contrib/codeEditor/browser/suggestEnabledInput/suggestEnabledInput.ts b/src/vs/workbench/contrib/codeEditor/browser/suggestEnabledInput/suggestEnabledInput.ts
index 1d338f1..4f13736 100644
--- a/src/vs/workbench/contrib/codeEditor/browser/suggestEnabledInput/suggestEnabledInput.ts
+++ b/src/vs/workbench/contrib/codeEditor/browser/suggestEnabledInput/suggestEnabledInput.ts
@@ -14 +14 @@ import { mixin } from 'vs/base/common/objects';
-import { isMacintosh } from 'vs/base/common/platform';
+import { isMacintosh } from 'vs/base/browser/browser';
diff --git a/src/vs/workbench/contrib/codeEditor/browser/toggleMultiCursorModifier.ts b/src/vs/workbench/contrib/codeEditor/browser/toggleMultiCursorModifier.ts
index 5e1b6da..f8643d2 100644
--- a/src/vs/workbench/contrib/codeEditor/browser/toggleMultiCursorModifier.ts
+++ b/src/vs/workbench/contrib/codeEditor/browser/toggleMultiCursorModifier.ts
@@ -8 +8 @@ import { Action } from 'vs/base/common/actions';
-import * as platform from 'vs/base/common/platform';
+import * as browser from 'vs/base/browser/browser';
@@ -84 +84 @@ MenuRegistry.appendMenuItem(MenuId.MenubarSelectionMenu, {
-			platform.isMacintosh
+			browser.isMacintosh
diff --git a/src/vs/workbench/contrib/comments/electron-browser/commentNode.ts b/src/vs/workbench/contrib/comments/electron-browser/commentNode.ts
index 1ece57b..cf9505e 100644
--- a/src/vs/workbench/contrib/comments/electron-browser/commentNode.ts
+++ b/src/vs/workbench/contrib/comments/electron-browser/commentNode.ts
@@ -26 +26 @@ import { KeyCode } from 'vs/base/common/keyCodes';
-import { isMacintosh } from 'vs/base/common/platform';
+import { isMacintosh } from 'vs/base/browser/browser';
diff --git a/src/vs/workbench/contrib/comments/electron-browser/commentThreadWidget.ts b/src/vs/workbench/contrib/comments/electron-browser/commentThreadWidget.ts
index 973dd5a..6c54854 100644
--- a/src/vs/workbench/contrib/comments/electron-browser/commentThreadWidget.ts
+++ b/src/vs/workbench/contrib/comments/electron-browser/commentThreadWidget.ts
@@ -15 +15 @@ import { IDisposable, dispose } from 'vs/base/common/lifecycle';
-import * as platform from 'vs/base/common/platform';
+import * as browser from 'vs/base/browser/browser';
@@ -742 +742 @@ export class ReviewZoneWidget extends ZoneWidget {
-			let keybinding = platform.isMacintosh ? 'Cmd+Enter' : 'Ctrl+Enter';
+			let keybinding = browser.isMacintosh ? 'Cmd+Enter' : 'Ctrl+Enter';
diff --git a/src/vs/workbench/contrib/debug/browser/linkDetector.ts b/src/vs/workbench/contrib/debug/browser/linkDetector.ts
index 1b6f41c..0c9bf68 100644
--- a/src/vs/workbench/contrib/debug/browser/linkDetector.ts
+++ b/src/vs/workbench/contrib/debug/browser/linkDetector.ts
@@ -9 +9 @@ import { URI as uri } from 'vs/base/common/uri';
-import { isMacintosh } from 'vs/base/common/platform';
+import { isMacintosh } from 'vs/base/browser/browser';
diff --git a/src/vs/workbench/contrib/debug/electron-browser/debug.contribution.ts b/src/vs/workbench/contrib/debug/electron-browser/debug.contribution.ts
index fde17ef..6010faa 100644
--- a/src/vs/workbench/contrib/debug/electron-browser/debug.contribution.ts
+++ b/src/vs/workbench/contrib/debug/electron-browser/debug.contribution.ts
@@ -45 +45 @@ import { ViewsRegistry } from 'vs/workbench/common/views';
-import { isMacintosh } from 'vs/base/common/platform';
+import { isMacintosh } from 'vs/base/browser/browser';
diff --git a/src/vs/workbench/contrib/debug/electron-browser/debugEditorContribution.ts b/src/vs/workbench/contrib/debug/electron-browser/debugEditorContribution.ts
index 89c1311..e803b6f 100644
--- a/src/vs/workbench/contrib/debug/electron-browser/debugEditorContribution.ts
+++ b/src/vs/workbench/contrib/debug/electron-browser/debugEditorContribution.ts
@@ -9,0 +10 @@ import * as env from 'vs/base/common/platform';
+import * as browser from 'vs/base/browser/browser';
@@ -180 +181 @@ export class DebugEditorContribution implements IDebugEditorContribution {
-			if (e.event.rightButton || (env.isMacintosh && e.event.leftButton && e.event.ctrlKey)) {
+			if (e.event.rightButton || (browser.isMacintosh && e.event.leftButton && e.event.ctrlKey)) {
@@ -429 +430 @@ export class DebugEditorContribution implements IDebugEditorContribution {
-		const stopKey = env.isMacintosh ? 'metaKey' : 'ctrlKey';
+		const stopKey = browser.isMacintosh ? 'metaKey' : 'ctrlKey';
@@ -447 +448 @@ export class DebugEditorContribution implements IDebugEditorContribution {
-		const stopKey = env.isMacintosh ? KeyCode.Meta : KeyCode.Ctrl;
+		const stopKey = browser.isMacintosh ? KeyCode.Meta : KeyCode.Ctrl;
diff --git a/src/vs/workbench/contrib/debug/node/debugAdapter.ts b/src/vs/workbench/contrib/debug/node/debugAdapter.ts
index b5f6da9..6e6ff4b 100644
--- a/src/vs/workbench/contrib/debug/node/debugAdapter.ts
+++ b/src/vs/workbench/contrib/debug/node/debugAdapter.ts
@@ -315 +315 @@ export class ExecutableDebugAdapter extends StreamDebugAdapter {
-		return new Promise<void>((resolve, reject) => {
+		return new Promise<void>(async (resolve, reject) => {
@@ -320 +320 @@ export class ExecutableDebugAdapter extends StreamDebugAdapter {
-					if (!fs.existsSync(this.adapterExecutable.command)) {
+					if (!(await require("util").promisify(fs.exists)(this.adapterExecutable.command))) {
diff --git a/src/vs/workbench/contrib/extensions/node/extensionsWorkbenchService.ts b/src/vs/workbench/contrib/extensions/node/extensionsWorkbenchService.ts
index 67c0c41..956c3a6 100644
--- a/src/vs/workbench/contrib/extensions/node/extensionsWorkbenchService.ts
+++ b/src/vs/workbench/contrib/extensions/node/extensionsWorkbenchService.ts
@@ -118 +118 @@ class Extension implements IExtension {
-		return `${product.extensionsGallery.itemUrl}?itemName=${this.publisher}.${this.name}`;
+		return undefined; // `${product.extensionsGallery.itemUrl}?itemName=${this.publisher}.${this.name}`;
diff --git a/src/vs/workbench/contrib/files/browser/fileActions.contribution.ts b/src/vs/workbench/contrib/files/browser/fileActions.contribution.ts
index f83842f..bca184e 100644
--- a/src/vs/workbench/contrib/files/browser/fileActions.contribution.ts
+++ b/src/vs/workbench/contrib/files/browser/fileActions.contribution.ts
@@ -17 +17 @@ import { KeybindingsRegistry, KeybindingWeight } from 'vs/platform/keybinding/co
-import { isWindows, isMacintosh } from 'vs/base/common/platform';
+import { isWindows, isMacintosh } from 'vs/base/browser/browser';
diff --git a/src/vs/workbench/contrib/files/browser/fileCommands.ts b/src/vs/workbench/contrib/files/browser/fileCommands.ts
index 136bbc9..6766894 100644
--- a/src/vs/workbench/contrib/files/browser/fileCommands.ts
+++ b/src/vs/workbench/contrib/files/browser/fileCommands.ts
@@ -28 +28 @@ import { KeyMod, KeyCode, KeyChord } from 'vs/base/common/keyCodes';
-import { isWindows, isMacintosh } from 'vs/base/common/platform';
+import { isWindows, isMacintosh } from 'vs/base/browser/browser';
diff --git a/src/vs/workbench/contrib/files/browser/views/explorerViewer.ts b/src/vs/workbench/contrib/files/browser/views/explorerViewer.ts
index e944612..e638513 100644
--- a/src/vs/workbench/contrib/files/browser/views/explorerViewer.ts
+++ b/src/vs/workbench/contrib/files/browser/views/explorerViewer.ts
@@ -38 +38 @@ import { DesktopDragAndDropData, ExternalElementsDragAndDropData, ElementsDragAn
-import { isMacintosh, isLinux } from 'vs/base/common/platform';
+import { isMacintosh, isLinux } from 'vs/base/browser/browser';
@@ -592,0 +593 @@ export class FileDragAndDrop implements ITreeDragAndDrop<ExplorerItem> {
+		return (require('vs/../../../../packages/vscode/src/workbench') as typeof import('vs/../../../../packages/vscode/src/workbench')).workbench.handleExternalDrop(target, originalEvent);
diff --git a/src/vs/workbench/contrib/files/common/explorerModel.ts b/src/vs/workbench/contrib/files/common/explorerModel.ts
index 4ddf707..5e51b38 100644
--- a/src/vs/workbench/contrib/files/common/explorerModel.ts
+++ b/src/vs/workbench/contrib/files/common/explorerModel.ts
@@ -77,0 +78 @@ export class ExplorerItem {
+	private forgotChildren: boolean = false;
@@ -252 +253,2 @@ export class ExplorerItem {
-		if (!this._isDirectoryResolved) {
+		if (!this._isDirectoryResolved || this.forgotChildren) {
+			this.forgotChildren = false;
@@ -277,0 +280 @@ export class ExplorerItem {
+		this.forgotChildren = true;
diff --git a/src/vs/workbench/contrib/files/common/explorerService.ts b/src/vs/workbench/contrib/files/common/explorerService.ts
index 980c9b1..a692900 100644
--- a/src/vs/workbench/contrib/files/common/explorerService.ts
+++ b/src/vs/workbench/contrib/files/common/explorerService.ts
@@ -333 +333 @@ export class ExplorerService implements IExplorerService {
-			if (shouldRefresh()) {
+			if (true || shouldRefresh()) {
diff --git a/src/vs/workbench/contrib/logs/common/logs.contribution.ts b/src/vs/workbench/contrib/logs/common/logs.contribution.ts
index a14a280..af264a8 100644
--- a/src/vs/workbench/contrib/logs/common/logs.contribution.ts
+++ b/src/vs/workbench/contrib/logs/common/logs.contribution.ts
@@ -31 +31,2 @@ class LogOutputChannels extends Disposable implements IWorkbenchContribution {
-		outputChannelRegistry.registerChannel({ id: Constants.mainLogChannelId, label: nls.localize('mainLog', "Main"), file: URI.file(join(environmentService.logsPath, `main.log`)), log: true });
+		// This channel only seems to be used when loading the app and we skip all of that, so it is never actually created or written to.
+		// outputChannelRegistry.registerChannel({ id: Constants.mainLogChannelId, label: nls.localize('mainLog', "Main"), file: URI.file(join(environmentService.logsPath, `main.log`)), log: true });
diff --git a/src/vs/workbench/contrib/output/common/outputLinkProvider.ts b/src/vs/workbench/contrib/output/common/outputLinkProvider.ts
index efa955e..e72f41d 100644
--- a/src/vs/workbench/contrib/output/common/outputLinkProvider.ts
+++ b/src/vs/workbench/contrib/output/common/outputLinkProvider.ts
@@ -77,0 +78 @@ export class OutputLinkProvider {
+		return Promise.resolve([]);
diff --git a/src/vs/workbench/contrib/quickopen/browser/quickopen.contribution.ts b/src/vs/workbench/contrib/quickopen/browser/quickopen.contribution.ts
index 92f9b7c..b8300c6 100644
--- a/src/vs/workbench/contrib/quickopen/browser/quickopen.contribution.ts
+++ b/src/vs/workbench/contrib/quickopen/browser/quickopen.contribution.ts
@@ -6 +6 @@
-import * as env from 'vs/base/common/platform';
+import * as browser from 'vs/base/browser/browser';
@@ -94 +94 @@ Registry.as<IQuickOpenRegistry>(QuickOpenExtensions.Quickopen).registerQuickOpen
-				description: env.isMacintosh ? nls.localize('gotoLineDescriptionMac', "Go to Line") : nls.localize('gotoLineDescriptionWin', "Go to Line")
+				description: browser.isMacintosh ? nls.localize('gotoLineDescriptionMac', "Go to Line") : nls.localize('gotoLineDescriptionWin', "Go to Line")
diff --git a/src/vs/workbench/contrib/relauncher/electron-browser/relauncher.contribution.ts b/src/vs/workbench/contrib/relauncher/electron-browser/relauncher.contribution.ts
index e3c9552..a64fda2 100644
--- a/src/vs/workbench/contrib/relauncher/electron-browser/relauncher.contribution.ts
+++ b/src/vs/workbench/contrib/relauncher/electron-browser/relauncher.contribution.ts
@@ -18 +18,2 @@ import { isEqual } from 'vs/base/common/resources';
-import { isLinux, isMacintosh } from 'vs/base/common/platform';
+import { isNative, isLinux } from 'vs/base/common/platform';
+import { isMacintosh } from 'vs/base/browser/browser';
@@ -69 +70 @@ export class SettingsChangeRelauncher extends Disposable implements IWorkbenchCo
-		if (isMacintosh && config.window && typeof config.window.nativeTabs === 'boolean' && config.window.nativeTabs !== this.nativeTabs) {
+		if (isNative && isMacintosh && config.window && typeof config.window.nativeTabs === 'boolean' && config.window.nativeTabs !== this.nativeTabs) {
@@ -75 +76 @@ export class SettingsChangeRelauncher extends Disposable implements IWorkbenchCo
-		if (isMacintosh && config.window && typeof config.window.nativeFullScreen === 'boolean' && config.window.nativeFullScreen !== this.nativeFullScreen) {
+		if (isNative && isMacintosh && config.window && typeof config.window.nativeFullScreen === 'boolean' && config.window.nativeFullScreen !== this.nativeFullScreen) {
diff --git a/src/vs/workbench/contrib/scm/electron-browser/scmViewlet.ts b/src/vs/workbench/contrib/scm/electron-browser/scmViewlet.ts
index 077334b..b215ede 100644
--- a/src/vs/workbench/contrib/scm/electron-browser/scmViewlet.ts
+++ b/src/vs/workbench/contrib/scm/electron-browser/scmViewlet.ts
@@ -50 +50 @@ import { IPanelDndController, Panel } from 'vs/base/browser/ui/splitview/panelvi
-import * as platform from 'vs/base/common/platform';
+import * as browser from 'vs/base/browser/browser';
@@ -816 +816 @@ export class RepositoryPanel extends ViewletPanel {
-			const label = binding ? binding.getLabel() : (platform.isMacintosh ? 'Cmd+Enter' : 'Ctrl+Enter');
+			const label = binding ? binding.getLabel() : (browser.isMacintosh ? 'Cmd+Enter' : 'Ctrl+Enter');
diff --git a/src/vs/workbench/contrib/search/browser/search.contribution.ts b/src/vs/workbench/contrib/search/browser/search.contribution.ts
index c60cccd..257cd31 100644
--- a/src/vs/workbench/contrib/search/browser/search.contribution.ts
+++ b/src/vs/workbench/contrib/search/browser/search.contribution.ts
@@ -665 +665 @@ configurationRegistry.registerConfiguration({
-			included: platform.isMacintosh
+			included: platform.isNative && platform.isMacintosh
diff --git a/src/vs/workbench/contrib/tasks/common/problemMatcher.ts b/src/vs/workbench/contrib/tasks/common/problemMatcher.ts
index 57ece42..91bc82a 100644
--- a/src/vs/workbench/contrib/tasks/common/problemMatcher.ts
+++ b/src/vs/workbench/contrib/tasks/common/problemMatcher.ts
@@ -222 +222 @@ export function createLineMatcher(matcher: ProblemMatcher): ILineMatcher {
-const endOfLine: string = Platform.OS === Platform.OperatingSystem.Windows ? '\r\n' : '\n';
+const endOfLine: string = Platform.isWindows ? '\r\n' : '\n';
diff --git a/src/vs/workbench/contrib/terminal/electron-browser/terminal.contribution.ts b/src/vs/workbench/contrib/terminal/electron-browser/terminal.contribution.ts
index b15ee85..4a577b3 100644
--- a/src/vs/workbench/contrib/terminal/electron-browser/terminal.contribution.ts
+++ b/src/vs/workbench/contrib/terminal/electron-browser/terminal.contribution.ts
@@ -12,0 +13 @@ import * as platform from 'vs/base/common/platform';
+import * as browser from 'vs/base/browser/browser';
@@ -219 +220 @@ configurationRegistry.registerConfiguration({
-			default: platform.isMacintosh ? 'selectWord' : platform.isWindows ? 'copyPaste' : 'default',
+			default: browser.isMacintosh ? 'selectWord' : browser.isWindows ? 'copyPaste' : 'default',
diff --git a/src/vs/workbench/contrib/terminal/electron-browser/terminalLinkHandler.ts b/src/vs/workbench/contrib/terminal/electron-browser/terminalLinkHandler.ts
index 734d13f..efba861 100644
--- a/src/vs/workbench/contrib/terminal/electron-browser/terminalLinkHandler.ts
+++ b/src/vs/workbench/contrib/terminal/electron-browser/terminalLinkHandler.ts
@@ -7,0 +8 @@ import * as path from 'vs/base/common/path';
+import * as browser from 'vs/base/browser/browser';
@@ -235 +236 @@ export class TerminalLinkHandler {
-		return platform.isMacintosh ? event.metaKey : event.ctrlKey;
+		return browser.isMacintosh ? event.metaKey : event.ctrlKey;
@@ -243 +244 @@ export class TerminalLinkHandler {
-		if (platform.isMacintosh) {
+		if (browser.isMacintosh) {
diff --git a/src/vs/workbench/contrib/terminal/electron-browser/terminalPanel.ts b/src/vs/workbench/contrib/terminal/electron-browser/terminalPanel.ts
index bfde146..6c3391e 100644
--- a/src/vs/workbench/contrib/terminal/electron-browser/terminalPanel.ts
+++ b/src/vs/workbench/contrib/terminal/electron-browser/terminalPanel.ts
@@ -8,0 +9 @@ import * as platform from 'vs/base/common/platform';
+import * as browser from 'vs/base/browser/browser';
@@ -232 +233 @@ export class TerminalPanel extends Panel {
-					if (platform.isMacintosh) {
+					if (browser.isMacintosh) {
diff --git a/src/vs/workbench/contrib/webview/electron-browser/webview-pre.js b/src/vs/workbench/contrib/webview/electron-browser/webview-pre.js
index a239f09..3f68547 100644
--- a/src/vs/workbench/contrib/webview/electron-browser/webview-pre.js
+++ b/src/vs/workbench/contrib/webview/electron-browser/webview-pre.js
@@ -10 +10,19 @@
-	const ipcRenderer = require('electron').ipcRenderer;
+	const ipcRenderer = {
+		on: (channel, callback) => {
+			window.addEventListener("message", (event) => {
+				if (event.data.channel === channel) {
+					callback(event.data.channel, ...event.data.data);
+				}
+			});
+		},
+		sendToHost: (channel, ...args) => {
+			window.parent.postMessage({
+				channel,
+				data: args,
+				id: document.body.id,
+			}, "*");
+		},
+	};
+	const process = {
+		pid: undefined,
+	};
@@ -22,7 +40,7 @@
-			require('electron').webFrame.registerURLSchemeAsPrivileged('vscode-resource', {
-				secure: true,
-				bypassCSP: false,
-				allowServiceWorkers: false,
-				supportFetchAPI: true,
-				corsEnabled: true
-			});
+			// require('electron').webFrame.registerURLSchemeAsPrivileged('vscode-resource', {
+			// 	secure: true,
+			// 	bypassCSP: false,
+			// 	allowServiceWorkers: false,
+			// 	supportFetchAPI: true,
+			// 	corsEnabled: true
+			// });
diff --git a/src/vs/workbench/contrib/webview/electron-browser/webview.contribution.ts b/src/vs/workbench/contrib/webview/electron-browser/webview.contribution.ts
index 8e2b9e0..c06da1c 100644
--- a/src/vs/workbench/contrib/webview/electron-browser/webview.contribution.ts
+++ b/src/vs/workbench/contrib/webview/electron-browser/webview.contribution.ts
@@ -24 +24 @@ import { InputFocusedContextKey } from 'vs/platform/contextkey/common/contextkey
-import { isMacintosh } from 'vs/base/common/platform';
+import { isMacintosh } from 'vs/base/browser/browser';
diff --git a/src/vs/workbench/contrib/webview/electron-browser/webviewElement.ts b/src/vs/workbench/contrib/webview/electron-browser/webviewElement.ts
index 5a28744..9d6f38c 100644
--- a/src/vs/workbench/contrib/webview/electron-browser/webviewElement.ts
+++ b/src/vs/workbench/contrib/webview/electron-browser/webviewElement.ts
@@ -19 +19,2 @@ import { endsWith } from 'vs/base/common/strings';
-import { isMacintosh } from 'vs/base/common/platform';
+import { isWeb } from 'vs/base/common/platform';
+import { isMacintosh } from 'vs/base/browser/browser';
@@ -254 +255 @@ export class WebviewElement extends Disposable {
-		this._webview.src = this._options.useSameOriginForRoot ? require.toUrl('./webview.html') : 'data:text/html;charset=utf-8,%3C%21DOCTYPE%20html%3E%0D%0A%3Chtml%20lang%3D%22en%22%20style%3D%22width%3A%20100%25%3B%20height%3A%20100%25%22%3E%0D%0A%3Chead%3E%0D%0A%09%3Ctitle%3EVirtual%20Document%3C%2Ftitle%3E%0D%0A%3C%2Fhead%3E%0D%0A%3Cbody%20style%3D%22margin%3A%200%3B%20overflow%3A%20hidden%3B%20width%3A%20100%25%3B%20height%3A%20100%25%22%3E%0D%0A%3C%2Fbody%3E%0D%0A%3C%2Fhtml%3E';
+		this._webview.src = isWeb || this._options.useSameOriginForRoot ? require.toUrl('./webview.html') : 'data:text/html;charset=utf-8,%3C%21DOCTYPE%20html%3E%0D%0A%3Chtml%20lang%3D%22en%22%20style%3D%22width%3A%20100%25%3B%20height%3A%20100%25%22%3E%0D%0A%3Chead%3E%0D%0A%09%3Ctitle%3EVirtual%20Document%3C%2Ftitle%3E%0D%0A%3C%2Fhead%3E%0D%0A%3Cbody%20style%3D%22margin%3A%200%3B%20overflow%3A%20hidden%3B%20width%3A%20100%25%3B%20height%3A%20100%25%22%3E%0D%0A%3C%2Fbody%3E%0D%0A%3C%2Fhtml%3E';
@@ -265,0 +267,3 @@ export class WebviewElement extends Disposable {
+			Object.defineProperty(this._options, 'useSameOriginForRoot', {
+				value: true,
+			});
diff --git a/src/vs/workbench/contrib/welcome/walkThrough/node/walkThroughContentProvider.ts b/src/vs/workbench/contrib/welcome/walkThrough/node/walkThroughContentProvider.ts
index 147f05b..a36fad0 100644
--- a/src/vs/workbench/contrib/welcome/walkThrough/node/walkThroughContentProvider.ts
+++ b/src/vs/workbench/contrib/welcome/walkThrough/node/walkThroughContentProvider.ts
@@ -30,0 +31 @@ export class WalkThroughContentProvider implements ITextModelContentProvider, IW
+			/*
@@ -38 +39,11 @@ export class WalkThroughContentProvider implements ITextModelContentProvider, IW
-		}) : this.textFileService.resolveTextContent(URI.file(resource.fsPath)).then(content => content.value));
+			*/
+			// This works because the only walkthrough that is a module is the welcome page.
+			// We have to explicitly import it or Webpack won't pick it up.
+			import("vs/workbench/contrib/welcome/page/electron-browser/vs_code_welcome_page").then((content) => {
+				resolve(content.default());
+			}).catch((err) => {
+				reject(err);
+			});
+		}) : (resource.scheme !== "file"
+			? fetch(resource.path).then((res) => res.text())
+			: this.textFileService.resolveTextContent(URI.file(resource.fsPath)).then(content => content.value)));
@@ -64 +75 @@ export class WalkThroughSnippetContentProvider implements ITextModelContentProvi
-		return this.textFileService.resolveTextContent(URI.file(resource.fsPath)).then(content => {
+		return fetch(resource.path).then((res) => res.text()).then((content) => {
@@ -80,0 +92 @@ export class WalkThroughSnippetContentProvider implements ITextModelContentProvi
+				/*
@@ -85 +97,2 @@ export class WalkThroughSnippetContentProvider implements ITextModelContentProvi
-				marked(markdown, { renderer });
+				*/
+				marked(content, { renderer });
@@ -91 +104 @@ export class WalkThroughSnippetContentProvider implements ITextModelContentProvi
-				this.modelService.updateModel(codeEditorModel, content.value);
+				this.modelService.updateModel(codeEditorModel, content);
diff --git a/src/vs/workbench/electron-browser/actions/helpActions.ts b/src/vs/workbench/electron-browser/actions/helpActions.ts
index 79e2ba2..8c1b21b 100644
--- a/src/vs/workbench/electron-browser/actions/helpActions.ts
+++ b/src/vs/workbench/electron-browser/actions/helpActions.ts
@@ -9 +9,2 @@ import product from 'vs/platform/product/node/product';
-import { isMacintosh, isLinux, language } from 'vs/base/common/platform';
+import { language } from 'vs/base/common/platform';
+import { isMacintosh, isLinux } from 'vs/base/browser/browser';
diff --git a/src/vs/workbench/electron-browser/actions/windowActions.ts b/src/vs/workbench/electron-browser/actions/windowActions.ts
index ef64015..689487d 100644
--- a/src/vs/workbench/electron-browser/actions/windowActions.ts
+++ b/src/vs/workbench/electron-browser/actions/windowActions.ts
@@ -14 +14 @@ import { IWorkspaceConfigurationService } from 'vs/workbench/services/configurat
-import { isMacintosh } from 'vs/base/common/platform';
+import { isMacintosh } from 'vs/base/browser/browser';
diff --git a/src/vs/workbench/electron-browser/main.contribution.ts b/src/vs/workbench/electron-browser/main.contribution.ts
index 0d9d443..f0e30f7 100644
--- a/src/vs/workbench/electron-browser/main.contribution.ts
+++ b/src/vs/workbench/electron-browser/main.contribution.ts
@@ -13 +13,2 @@ import { KeyMod, KeyChord, KeyCode } from 'vs/base/common/keyCodes';
-import { isWindows, isLinux, isMacintosh } from 'vs/base/common/platform';
+import { isNative, isWeb } from 'vs/base/common/platform';
+import { isWindows, isLinux, isMacintosh } from 'vs/base/browser/browser';
@@ -535 +536 @@ import { LogStorageAction } from 'vs/platform/storage/node/storageService';
-					isMacintosh ?
+					isNative && isMacintosh ?
@@ -542 +543 @@ import { LogStorageAction } from 'vs/platform/storage/node/storageService';
-					isMacintosh ?
+					isNative && isMacintosh ?
@@ -629 +630 @@ import { LogStorageAction } from 'vs/platform/storage/node/storageService';
-				'included': isWindows || isLinux
+				'included': isWeb || isWindows || isLinux
@@ -636 +637 @@ import { LogStorageAction } from 'vs/platform/storage/node/storageService';
-				'included': isWindows || isLinux
+				'included': isWeb || isWindows || isLinux
@@ -662 +663 @@ import { LogStorageAction } from 'vs/platform/storage/node/storageService';
-				'included': isMacintosh && parseFloat(os.release()) >= 16 // Minimum: macOS Sierra (10.12.x = darwin 16.x)
+				'included': isNative && isMacintosh && parseFloat(os.release()) >= 16 // Minimum: macOS Sierra (10.12.x = darwin 16.x)
@@ -668 +669 @@ import { LogStorageAction } from 'vs/platform/storage/node/storageService';
-				'included': isMacintosh
+				'included': isNative && isMacintosh
diff --git a/src/vs/workbench/electron-browser/window.ts b/src/vs/workbench/electron-browser/window.ts
index acb68c8..bee143a 100644
--- a/src/vs/workbench/electron-browser/window.ts
+++ b/src/vs/workbench/electron-browser/window.ts
@@ -53 +53 @@ const TextInputActions: IAction[] = [
-	new Action('editor.action.clipboardPasteAction', nls.localize('paste', "Paste"), undefined, true, () => Promise.resolve(document.execCommand('paste'))),
+	(require('vs/../../../../packages/vscode/src/workbench') as typeof import ('vs/../../../../packages/vscode/src/workbench')).workbench.pasteAction,
@@ -319 +319 @@ export class ElectronWindow extends Disposable {
-		(<any>window).open = function (url: string, target: string, features: string, replace: boolean): any {
+		(<any>window).openInvalid = function (url: string, target: string, features: string, replace: boolean): any {
@@ -365 +365 @@ export class ElectronWindow extends Disposable {
-			!isMacintosh || // macOS only
+			!browser.isMacintosh || // macOS only
diff --git a/src/vs/workbench/electron-browser/workbench.ts b/src/vs/workbench/electron-browser/workbench.ts
index 7445d7b..0291dee 100644
--- a/src/vs/workbench/electron-browser/workbench.ts
+++ b/src/vs/workbench/electron-browser/workbench.ts
@@ -19 +19,2 @@ import { Registry } from 'vs/platform/registry/common/platform';
-import { isWindows, isLinux, isMacintosh, language } from 'vs/base/common/platform';
+import { isWeb, isNative, language } from 'vs/base/common/platform';
+import { isWindows, isLinux, isMacintosh } from 'vs/base/browser/browser';
@@ -321,0 +323 @@ export class Workbench extends Disposable implements IPartService {
+		(require('vs/../../../../packages/vscode/src/workbench') as typeof import ('vs/../../../../packages/vscode/src/workbench')).workbench.serviceCollection = serviceCollection;
@@ -345,0 +348 @@ export class Workbench extends Disposable implements IPartService {
+		/*
@@ -353,0 +357 @@ export class Workbench extends Disposable implements IPartService {
+		*/
@@ -458 +462 @@ export class Workbench extends Disposable implements IPartService {
-		addClasses(document.body, platformClass); // used by our fonts
+		addClasses(document.body, platformClass, isWeb ? 'web' : 'native'); // used by our fonts
@@ -633 +637 @@ export class Workbench extends Disposable implements IPartService {
-		if (!isMacintosh && this.useCustomTitleBarStyle()) {
+		if (isWeb || (!isMacintosh && this.useCustomTitleBarStyle())) {
@@ -1241 +1245 @@ export class Workbench extends Disposable implements IPartService {
-		if ((isWindows || isLinux) && this.useCustomTitleBarStyle()) {
+		if ((isWeb || isWindows || isLinux) && this.useCustomTitleBarStyle()) {
@@ -1397 +1401 @@ export class Workbench extends Disposable implements IPartService {
-				} else if (isMacintosh) {
+				} else if (isNative && isMacintosh) {
diff --git a/src/vs/workbench/services/extensions/electron-browser/cachedExtensionScanner.ts b/src/vs/workbench/services/extensions/electron-browser/cachedExtensionScanner.ts
index 0592910..0ce7e35 100644
--- a/src/vs/workbench/services/extensions/electron-browser/cachedExtensionScanner.ts
+++ b/src/vs/workbench/services/extensions/electron-browser/cachedExtensionScanner.ts
@@ -33,0 +34 @@ function getSystemExtensionsRoot(): string {
+	return (require('vs/../../../../packages/vscode/src/fill/paths') as typeof import ('vs/../../../../packages/vscode/src/fill/paths')).getBuiltInExtensionsDirectory();
diff --git a/src/vs/workbench/services/extensions/node/extensionHostProcess.ts b/src/vs/workbench/services/extensions/node/extensionHostProcess.ts
index 484cef9..f728fc8 100644
--- a/src/vs/workbench/services/extensions/node/extensionHostProcess.ts
+++ b/src/vs/workbench/services/extensions/node/extensionHostProcess.ts
@@ -137 +137 @@ function connectToRenderer(protocol: IMessagePassingProtocol): Promise<IRenderer
-					process.kill(initData.parentPid, 0); // throws an exception if the main process doesn't exist anymore.
+					// process.kill(initData.parentPid, 0); // throws an exception if the main process doesn't exist anymore.
diff --git a/src/vs/workbench/services/keybinding/electron-browser/keybindingService.ts b/src/vs/workbench/services/keybinding/electron-browser/keybindingService.ts
index 3c78990..545d91a 100644
--- a/src/vs/workbench/services/keybinding/electron-browser/keybindingService.ts
+++ b/src/vs/workbench/services/keybinding/electron-browser/keybindingService.ts
@@ -16 +16 @@ import { KeybindingParser } from 'vs/base/common/keybindingParser';
-import { OS, OperatingSystem } from 'vs/base/common/platform';
+import { OS, OperatingSystem, isNative } from 'vs/base/common/platform';
@@ -130 +130 @@ export class KeyboardMapperFactory {
-		if (OS === OperatingSystem.Windows) {
+		if (isNative && OS === OperatingSystem.Windows) {
diff --git a/src/vs/workbench/services/timer/electron-browser/timerService.ts b/src/vs/workbench/services/timer/electron-browser/timerService.ts
index 6e6fbcc..645bd72 100644
--- a/src/vs/workbench/services/timer/electron-browser/timerService.ts
+++ b/src/vs/workbench/services/timer/electron-browser/timerService.ts
@@ -426,0 +427 @@ export function didUseCachedData(): boolean {
+	return false;
diff --git a/src/vs/workbench/workbench.main.ts b/src/vs/workbench/workbench.main.ts
index 368fffe..8c172db 100644
--- a/src/vs/workbench/workbench.main.ts
+++ b/src/vs/workbench/workbench.main.ts
@@ -25 +25 @@ import 'vs/workbench/browser/actions/navigationActions';
-import 'vs/workbench/browser/parts/quickopen/quickopenActions';
+import 'vs/workbench/browser/parts/quickopen/quickOpenActions';
