mirror of
https://github.com/Microsoft/vscode
synced 2024-09-12 21:24:38 +00:00
Move schemes to opener metadata
This commit is contained in:
parent
885585c7f8
commit
542de8e009
|
@ -46,7 +46,7 @@ export function activate(context: vscode.ExtensionContext) {
|
|||
manager.show(url.toString(), showOptions);
|
||||
}));
|
||||
|
||||
context.subscriptions.push(vscode.window.registerExternalUriOpener(openerId, ['http', 'https'], {
|
||||
context.subscriptions.push(vscode.window.registerExternalUriOpener(openerId, {
|
||||
canOpenExternalUri(uri: vscode.Uri) {
|
||||
const originalUri = new URL(uri.toString());
|
||||
if (enabledHosts.has(originalUri.hostname)) {
|
||||
|
@ -63,6 +63,7 @@ export function activate(context: vscode.ExtensionContext) {
|
|||
});
|
||||
}
|
||||
}, {
|
||||
schemes: ['http', 'https'],
|
||||
label: localize('openTitle', "Open in simple browser"),
|
||||
}));
|
||||
}
|
||||
|
|
15
src/vs/vscode.proposed.d.ts
vendored
15
src/vs/vscode.proposed.d.ts
vendored
|
@ -2450,7 +2450,7 @@ declare module 'vscode' {
|
|||
/**
|
||||
* The uri that triggered the open.
|
||||
*
|
||||
* Due to port forwarding, this may not match the `resolvedUri` passed to `openExternalUri`
|
||||
* Due to port forwarding, this may not match the `resolvedUri` passed to `openExternalUri`.
|
||||
*/
|
||||
readonly sourceUri: Uri;
|
||||
}
|
||||
|
@ -2460,6 +2460,13 @@ declare module 'vscode' {
|
|||
*/
|
||||
interface ExternalUriOpenerMetadata {
|
||||
|
||||
/**
|
||||
* List of uri schemes the opener is triggered for.
|
||||
*
|
||||
* Currently only `http` and `https` are supported.
|
||||
*/
|
||||
readonly schemes: readonly string[]
|
||||
|
||||
/**
|
||||
* Text displayed to the user that explains what the opener does.
|
||||
*
|
||||
|
@ -2476,14 +2483,12 @@ declare module 'vscode' {
|
|||
*
|
||||
* @param id Unique id of the opener, such as `myExtension.browserPreview`. This is used in settings
|
||||
* and commands to identify the opener.
|
||||
* @param schemes List of uri schemes the opener is triggered for. Currently only `http`
|
||||
* and `https` are supported.
|
||||
* @param opener Opener to register.
|
||||
* @param metadata Additional information about the opener.
|
||||
*
|
||||
* @returns Disposable that unregisters the opener.
|
||||
*/
|
||||
export function registerExternalUriOpener(id: string, schemes: readonly string[], opener: ExternalUriOpener, metadata: ExternalUriOpenerMetadata): Disposable;
|
||||
*/
|
||||
export function registerExternalUriOpener(id: string, opener: ExternalUriOpener, metadata: ExternalUriOpenerMetadata): Disposable;
|
||||
}
|
||||
|
||||
interface OpenExternalOptions {
|
||||
|
|
|
@ -681,9 +681,9 @@ export function createApiFactoryAndRegisterActors(accessor: ServicesAccessor): I
|
|||
checkProposedApiEnabled(extension);
|
||||
return extHostNotebook.showNotebookDocument(document, options);
|
||||
},
|
||||
registerExternalUriOpener(id: string, schemes: readonly string[], opener: vscode.ExternalUriOpener, metadata: vscode.ExternalUriOpenerMetadata) {
|
||||
registerExternalUriOpener(id: string, opener: vscode.ExternalUriOpener, metadata: vscode.ExternalUriOpenerMetadata) {
|
||||
checkProposedApiEnabled(extension);
|
||||
return extHostUriOpeners.registerUriOpener(extension.identifier, id, schemes, opener, metadata);
|
||||
return extHostUriOpeners.registerUriOpener(extension.identifier, id, opener, metadata);
|
||||
},
|
||||
get openEditors() {
|
||||
checkProposedApiEnabled(extension);
|
||||
|
|
|
@ -11,18 +11,12 @@ import { ExtensionIdentifier } from 'vs/platform/extensions/common/extensions';
|
|||
import type * as vscode from 'vscode';
|
||||
import { ExtHostUriOpenersShape, IMainContext, MainContext, MainThreadUriOpenersShape } from './extHost.protocol';
|
||||
|
||||
interface OpenerEntry {
|
||||
readonly extension: ExtensionIdentifier;
|
||||
readonly schemes: ReadonlySet<string>;
|
||||
readonly opener: vscode.ExternalUriOpener;
|
||||
readonly metadata: vscode.ExternalUriOpenerMetadata;
|
||||
}
|
||||
|
||||
export class ExtHostUriOpeners implements ExtHostUriOpenersShape {
|
||||
|
||||
private readonly _proxy: MainThreadUriOpenersShape;
|
||||
|
||||
private readonly _openers = new Map<string, OpenerEntry>();
|
||||
private readonly _openers = new Map<string, vscode.ExternalUriOpener>();
|
||||
|
||||
constructor(
|
||||
mainContext: IMainContext,
|
||||
|
@ -33,7 +27,6 @@ export class ExtHostUriOpeners implements ExtHostUriOpenersShape {
|
|||
registerUriOpener(
|
||||
extensionId: ExtensionIdentifier,
|
||||
id: string,
|
||||
schemes: readonly string[],
|
||||
opener: vscode.ExternalUriOpener,
|
||||
metadata: vscode.ExternalUriOpenerMetadata,
|
||||
): vscode.Disposable {
|
||||
|
@ -41,13 +34,8 @@ export class ExtHostUriOpeners implements ExtHostUriOpenersShape {
|
|||
throw new Error(`Opener with id already registered: '${id}'`);
|
||||
}
|
||||
|
||||
this._openers.set(id, {
|
||||
opener,
|
||||
extension: extensionId,
|
||||
schemes: new Set(schemes),
|
||||
metadata
|
||||
});
|
||||
this._proxy.$registerUriOpener(id, schemes, extensionId, metadata.label);
|
||||
this._openers.set(id, opener);
|
||||
this._proxy.$registerUriOpener(id, metadata.schemes, extensionId, metadata.label);
|
||||
|
||||
return toDisposable(() => {
|
||||
this._openers.delete(id);
|
||||
|
@ -56,21 +44,22 @@ export class ExtHostUriOpeners implements ExtHostUriOpenersShape {
|
|||
}
|
||||
|
||||
async $canOpenUri(id: string, uriComponents: UriComponents, token: CancellationToken): Promise<modes.ExternalUriOpenerPriority> {
|
||||
const entry = this._openers.get(id);
|
||||
if (!entry) {
|
||||
const opener = this._openers.get(id);
|
||||
if (!opener) {
|
||||
throw new Error(`Unknown opener with id: ${id}`);
|
||||
}
|
||||
|
||||
const uri = URI.revive(uriComponents);
|
||||
return entry.opener.canOpenExternalUri(uri, token);
|
||||
return opener.canOpenExternalUri(uri, token);
|
||||
}
|
||||
|
||||
async $openUri(id: string, context: { resolvedUri: UriComponents, sourceUri: UriComponents }, token: CancellationToken): Promise<void> {
|
||||
const entry = this._openers.get(id);
|
||||
if (!entry) {
|
||||
const opener = this._openers.get(id);
|
||||
if (!opener) {
|
||||
throw new Error(`Unknown opener id: '${id}'`);
|
||||
}
|
||||
return entry.opener.openExternalUri(URI.revive(context.resolvedUri), {
|
||||
|
||||
return opener.openExternalUri(URI.revive(context.resolvedUri), {
|
||||
sourceUri: URI.revive(context.sourceUri)
|
||||
}, token);
|
||||
}
|
||||
|
|
Loading…
Reference in a new issue