提交 a60a8aef 编写于 作者: S Sandeep Somavarapu

Introduce request handler in web api

上级 c0e7048e
......@@ -40,6 +40,8 @@ import { joinPath } from 'vs/base/common/resources';
import { BrowserStorageService } from 'vs/platform/storage/browser/storageService';
import { IStorageService } from 'vs/platform/storage/common/storage';
import { getThemeTypeSelector, DARK, HIGH_CONTRAST, LIGHT } from 'vs/platform/theme/common/themeService';
import { IRequestService } from 'vs/platform/request/common/request';
import { WebRequestService as RequestService } from 'vs/workbench/services/request/browser/requestService';
class CodeRendererMain extends Disposable {
......@@ -160,7 +162,7 @@ class CodeRendererMain extends Disposable {
fileService.registerProvider(Schemas.userData, userDataProvider);
}
const services = await Promise.all([
const [configurationService, storageService] = await Promise.all([
this.createWorkspaceService(payload, environmentService, fileService, remoteAgentService, logService).then(service => {
// Workspace
......@@ -181,7 +183,10 @@ class CodeRendererMain extends Disposable {
})
]);
return { serviceCollection, logService, storageService: services[1] };
// Request Service
serviceCollection.set(IRequestService, new RequestService(this.configuration.requestHandler, remoteAgentService, configurationService, logService));
return { serviceCollection, logService, storageService };
}
private async createStorageService(payload: IWorkspaceInitializationPayload, environmentService: IWorkbenchEnvironmentService, fileService: IFileService, logService: ILogService): Promise<BrowserStorageService> {
......
......@@ -16,6 +16,7 @@ export class WebRequestService extends RequestService {
private readonly remoteRequestChannel: RequestChannelClient | null;
constructor(
private readonly requestHandler: ((options: IRequestOptions) => Promise<IRequestContext>) | undefined,
@IRemoteAgentService remoteAgentService: IRemoteAgentService,
@IConfigurationService configurationService: IConfigurationService,
@ILogService logService: ILogService
......@@ -26,6 +27,9 @@ export class WebRequestService extends RequestService {
}
async request(options: IRequestOptions, token: CancellationToken): Promise<IRequestContext> {
if (this.requestHandler) {
return this.requestHandler(options);
}
try {
const context = await super.request(options, token);
if (this.remoteRequestChannel && context.res.statusCode === 405) {
......
......@@ -68,8 +68,6 @@ import { IExtensionGalleryService } from 'vs/platform/extensionManagement/common
import { IContextViewService } from 'vs/platform/contextview/browser/contextView';
import { ContextViewService } from 'vs/platform/contextview/browser/contextViewService';
import { ExtensionGalleryService } from 'vs/platform/extensionManagement/node/extensionGalleryService';
import { IRequestService } from 'vs/platform/request/common/request';
import { RequestService } from 'vs/platform/request/browser/requestService';
import { LifecycleService } from 'vs/platform/lifecycle/electron-browser/lifecycleService';
import { ILifecycleService } from 'vs/platform/lifecycle/common/lifecycle';
import { ILocalizationsService } from 'vs/platform/localizations/common/localizations';
......@@ -154,7 +152,6 @@ registerSingleton(ITextResourceConfigurationService, TextResourceConfigurationSe
registerSingleton(IAccessibilityService, AccessibilityService, true);
registerSingleton(IContextViewService, ContextViewService, true);
registerSingleton(IExtensionGalleryService, ExtensionGalleryService, true);
registerSingleton(IRequestService, RequestService, true);
registerSingleton(ILifecycleService, LifecycleService);
registerSingleton(ILocalizationsService, LocalizationsService);
registerSingleton(ISharedProcessService, SharedProcessService, true);
......
......@@ -7,6 +7,7 @@ import 'vs/workbench/workbench.web.main';
import { main } from 'vs/workbench/browser/web.main';
import { UriComponents } from 'vs/base/common/uri';
import { IFileSystemProvider } from 'vs/platform/files/common/files';
import { IRequestOptions, IRequestContext } from 'vs/platform/request/common/request';
export interface IWorkbenchConstructionOptions {
......@@ -37,6 +38,12 @@ export interface IWorkbenchConstructionOptions {
* state like settings, keybindings, UI state (e.g. opened editors) and snippets.
*/
userDataProvider?: IFileSystemProvider;
/**
* Experimental: Optional request handler to handle http requests.
* In case not provided, workbench uses <code>XMLHttpRequest</code>.
*/
requestHandler?: (requestOptions: IRequestOptions) => Promise<IRequestContext>;
}
/**
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册