提交 14b5afc0 编写于 作者: C Christof Marti

Add --use-host-proxy (microsoft/vscode-remote-release#2487)

上级 bf8fb5f8
{
"name": "code-oss-dev",
"version": "1.44.0",
"distro": "07db0bb3dc2da82ce33f2871e0093df1b9085d06",
"distro": "de617fbc2d2b5e151b9e4f1713fcd5d29dda04ea",
"author": {
"name": "Microsoft Corporation"
},
......
......@@ -67,6 +67,7 @@ export interface IEnvironment {
userHome: URI;
webviewResourceRoot: string;
webviewCspSource: string;
useHostProxy?: boolean;
}
export interface IStaticWorkspaceData {
......
......@@ -61,7 +61,7 @@ export class ExtHostExtensionService extends AbstractExtHostExtensionService {
// Do this when extension service exists, but extensions are not being activated yet.
const configProvider = await this._extHostConfiguration.getConfigProvider();
await connectProxyResolver(this._extHostWorkspace, configProvider, this, this._logService, this._mainThreadTelemetryProxy);
await connectProxyResolver(this._extHostWorkspace, configProvider, this, this._logService, this._mainThreadTelemetryProxy, this._initData);
// Use IPC messages to forward console-calls, note that the console is
// already patched to use`process.send()`
......
......@@ -25,6 +25,7 @@ import { RunOnceScheduler } from 'vs/base/common/async';
interface ParsedExtHostArgs {
uriTransformerPath?: string;
useHostProxy?: string;
}
// workaround for https://github.com/microsoft/vscode/issues/85490
......@@ -40,7 +41,8 @@ interface ParsedExtHostArgs {
const args = minimist(process.argv.slice(2), {
string: [
'uriTransformerPath'
'uriTransformerPath',
'useHostProxy'
]
}) as ParsedExtHostArgs;
......@@ -293,6 +295,7 @@ export async function startExtensionHostProcess(): Promise<void> {
const { initData } = renderer;
// setup things
patchProcess(!!initData.environment.extensionTestsLocationURI); // to support other test frameworks like Jasmin that use process.exit (https://github.com/Microsoft/vscode/issues/37708)
initData.environment.useHostProxy = args.useHostProxy !== undefined ? args.useHostProxy !== 'false' : undefined;
// host abstraction
const hostUtils = new class NodeHost implements IHostUtils {
......
......@@ -16,7 +16,7 @@ import { endsWith } from 'vs/base/common/strings';
import { IExtHostWorkspaceProvider } from 'vs/workbench/api/common/extHostWorkspace';
import { ExtHostConfigProvider } from 'vs/workbench/api/common/extHostConfiguration';
import { ProxyAgent } from 'vscode-proxy-agent';
import { MainThreadTelemetryShape } from 'vs/workbench/api/common/extHost.protocol';
import { MainThreadTelemetryShape, IInitData } from 'vs/workbench/api/common/extHost.protocol';
import { toErrorMessage } from 'vs/base/common/errorMessage';
import { ExtHostExtensionService } from 'vs/workbench/api/node/extHostExtensionService';
import { URI } from 'vs/base/common/uri';
......@@ -35,9 +35,10 @@ export function connectProxyResolver(
configProvider: ExtHostConfigProvider,
extensionService: ExtHostExtensionService,
extHostLogService: ILogService,
mainThreadTelemetry: MainThreadTelemetryShape
mainThreadTelemetry: MainThreadTelemetryShape,
initData: IInitData,
) {
const resolveProxy = setupProxyResolution(extHostWorkspace, configProvider, extHostLogService, mainThreadTelemetry);
const resolveProxy = setupProxyResolution(extHostWorkspace, configProvider, extHostLogService, mainThreadTelemetry, initData);
const lookup = createPatchedModules(configProvider, resolveProxy);
return configureModuleLoading(extensionService, lookup);
}
......@@ -48,7 +49,8 @@ function setupProxyResolution(
extHostWorkspace: IExtHostWorkspaceProvider,
configProvider: ExtHostConfigProvider,
extHostLogService: ILogService,
mainThreadTelemetry: MainThreadTelemetryShape
mainThreadTelemetry: MainThreadTelemetryShape,
initData: IInitData,
) {
const env = process.env;
......@@ -139,12 +141,14 @@ function setupProxyResolution(
timeout = setTimeout(logEvent, 10 * 60 * 1000);
}
const useHostProxy = initData.environment.useHostProxy;
const doUseHostProxy = typeof useHostProxy === 'boolean' ? useHostProxy : !initData.remote.isRemote;
useSystemCertificates(extHostLogService, flags.useSystemCertificates, opts, () => {
useProxySettings(flags.useProxySettings, req, opts, url, callback);
useProxySettings(doUseHostProxy, flags.useProxySettings, req, opts, url, callback);
});
}
function useProxySettings(useProxySettings: boolean, req: http.ClientRequest, opts: http.RequestOptions, url: string, callback: (proxy?: string) => void) {
function useProxySettings(useHostProxy: boolean, useProxySettings: boolean, req: http.ClientRequest, opts: http.RequestOptions, url: string, callback: (proxy?: string) => void) {
if (!useProxySettings) {
callback('DIRECT');
......@@ -192,6 +196,12 @@ function setupProxyResolution(
return;
}
if (!useHostProxy) {
callback('DIRECT');
extHostLogService.trace('ProxyResolver#resolveProxy unconfigured', url, 'DIRECT');
return;
}
const start = Date.now();
extHostWorkspace.resolveProxy(url) // Use full URL to ensure it is an actually used one.
.then(proxy => {
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册