diff --git a/src/vs/workbench/api/common/extHost.api.impl.ts b/src/vs/workbench/api/common/extHost.api.impl.ts index 1907f2993ad..2da02381a46 100644 --- a/src/vs/workbench/api/common/extHost.api.impl.ts +++ b/src/vs/workbench/api/common/extHost.api.impl.ts @@ -691,7 +691,7 @@ export function createApiFactoryAndRegisterActors(accessor: ServicesAccessor): I }, registerExternalUriOpener(id: string, opener: vscode.ExternalUriOpener, metadata: vscode.ExternalUriOpenerMetadata) { checkProposedApiEnabled(extension); - return extHostUriOpeners.registerUriOpener(extension.identifier, id, opener, metadata); + return extHostUriOpeners.registerExternalUriOpener(extension.identifier, id, opener, metadata); }, get openEditors() { checkProposedApiEnabled(extension); diff --git a/src/vs/workbench/api/common/extHostUriOpener.ts b/src/vs/workbench/api/common/extHostUriOpener.ts index 19b91ae4545..81bbc6f4dfc 100644 --- a/src/vs/workbench/api/common/extHostUriOpener.ts +++ b/src/vs/workbench/api/common/extHostUriOpener.ts @@ -5,6 +5,7 @@ import { CancellationToken } from 'vs/base/common/cancellation'; import { toDisposable } from 'vs/base/common/lifecycle'; +import { Schemas } from 'vs/base/common/network'; import { URI, UriComponents } from 'vs/base/common/uri'; import * as modes from 'vs/editor/common/modes'; import { ExtensionIdentifier } from 'vs/platform/extensions/common/extensions'; @@ -14,6 +15,8 @@ import { ExtHostUriOpenersShape, IMainContext, MainContext, MainThreadUriOpeners export class ExtHostUriOpeners implements ExtHostUriOpenersShape { + private static readonly supportedSchemes = new Set([Schemas.http, Schemas.https]); + private readonly _proxy: MainThreadUriOpenersShape; private readonly _openers = new Map(); @@ -24,7 +27,7 @@ export class ExtHostUriOpeners implements ExtHostUriOpenersShape { this._proxy = mainContext.getProxy(MainContext.MainThreadUriOpeners); } - registerUriOpener( + registerExternalUriOpener( extensionId: ExtensionIdentifier, id: string, opener: vscode.ExternalUriOpener, @@ -34,6 +37,11 @@ export class ExtHostUriOpeners implements ExtHostUriOpenersShape { throw new Error(`Opener with id '${id}' already registered`); } + const invalidScheme = metadata.schemes.find(scheme => !ExtHostUriOpeners.supportedSchemes.has(scheme)); + if (invalidScheme) { + throw new Error(`Scheme '${invalidScheme}' is not supported. Only http and https are currently supported.`); + } + this._openers.set(id, opener); this._proxy.$registerUriOpener(id, metadata.schemes, extensionId, metadata.label);