mirror of
https://github.com/ckaczor/azuredatastudio.git
synced 2026-02-09 17:52:34 -05:00
Merge from vscode 7eaf220cafb9d9e901370ffce02229171cbf3ea6
This commit is contained in:
committed by
Anthony Dresser
parent
39d9eed585
commit
a63578e6f7
@@ -14,7 +14,7 @@ export const IWebviewManagerService = createDecorator<IWebviewManagerService>('w
|
||||
export interface IWebviewManagerService {
|
||||
_serviceBrand: unknown;
|
||||
|
||||
registerWebview(id: string, webContentsId: number | undefined, windowId: number, metadata: RegisterWebviewMetadata): Promise<void>;
|
||||
registerWebview(id: string, windowId: number, metadata: RegisterWebviewMetadata): Promise<void>;
|
||||
unregisterWebview(id: string): Promise<void>;
|
||||
updateWebviewMetadata(id: string, metadataDelta: Partial<RegisterWebviewMetadata>): Promise<void>;
|
||||
|
||||
|
||||
@@ -33,7 +33,7 @@ export class WebviewMainService extends Disposable implements IWebviewManagerSer
|
||||
this.portMappingProvider = this._register(new WebviewPortMappingProvider(tunnelService));
|
||||
}
|
||||
|
||||
public async registerWebview(id: string, webContentsId: number | undefined, windowId: number, metadata: RegisterWebviewMetadata): Promise<void> {
|
||||
public async registerWebview(id: string, windowId: number, metadata: RegisterWebviewMetadata): Promise<void> {
|
||||
const extensionLocation = metadata.extensionLocation ? URI.from(metadata.extensionLocation) : undefined;
|
||||
|
||||
this.protocolProvider.registerWebview(id, {
|
||||
@@ -43,7 +43,7 @@ export class WebviewMainService extends Disposable implements IWebviewManagerSer
|
||||
localResourceRoots: metadata.localResourceRoots.map(x => URI.from(x))
|
||||
});
|
||||
|
||||
this.portMappingProvider.registerWebview(id, webContentsId, {
|
||||
this.portMappingProvider.registerWebview(id, {
|
||||
extensionLocation,
|
||||
mappings: metadata.portMappings,
|
||||
resolvedAuthority: metadata.remoteConnectionData,
|
||||
|
||||
@@ -3,7 +3,7 @@
|
||||
* Licensed under the Source EULA. See License.txt in the project root for license information.
|
||||
*--------------------------------------------------------------------------------------------*/
|
||||
|
||||
import { session } from 'electron';
|
||||
import { OnBeforeRequestListenerDetails, session } from 'electron';
|
||||
import { Disposable } from 'vs/base/common/lifecycle';
|
||||
import { URI } from 'vs/base/common/uri';
|
||||
import { IAddress } from 'vs/platform/remote/common/remoteAgentConnection';
|
||||
@@ -11,6 +11,10 @@ import { ITunnelService } from 'vs/platform/remote/common/tunnel';
|
||||
import { webviewPartitionId } from 'vs/platform/webview/common/resourceLoader';
|
||||
import { IWebviewPortMapping, WebviewPortMappingManager } from 'vs/platform/webview/common/webviewPortMapping';
|
||||
|
||||
interface OnBeforeRequestListenerDetails_Extended extends OnBeforeRequestListenerDetails {
|
||||
readonly lastCommittedOrigin?: string;
|
||||
}
|
||||
|
||||
interface PortMappingData {
|
||||
readonly extensionLocation: URI | undefined;
|
||||
readonly mappings: readonly IWebviewPortMapping[];
|
||||
@@ -20,13 +24,10 @@ interface PortMappingData {
|
||||
export class WebviewPortMappingProvider extends Disposable {
|
||||
|
||||
private readonly _webviewData = new Map<string, {
|
||||
readonly webContentsId: number | undefined;
|
||||
readonly manager: WebviewPortMappingManager;
|
||||
metadata: PortMappingData;
|
||||
}>();
|
||||
|
||||
private _webContentsIdsToWebviewIds = new Map<number, /* id */ string>();
|
||||
|
||||
constructor(
|
||||
@ITunnelService private readonly _tunnelService: ITunnelService,
|
||||
) {
|
||||
@@ -40,12 +41,15 @@ export class WebviewPortMappingProvider extends Disposable {
|
||||
'*://127.0.0.1:*/*',
|
||||
'*://0.0.0.0:*/*',
|
||||
]
|
||||
}, async (details, callback) => {
|
||||
const webviewId = details.webContentsId && this._webContentsIdsToWebviewIds.get(details.webContentsId);
|
||||
if (!webviewId) {
|
||||
}, async (details: OnBeforeRequestListenerDetails_Extended, callback) => {
|
||||
let origin: URI;
|
||||
try {
|
||||
origin = URI.parse(details.lastCommittedOrigin!);
|
||||
} catch {
|
||||
return callback({});
|
||||
}
|
||||
|
||||
const webviewId = origin.authority;
|
||||
const entry = this._webviewData.get(webviewId);
|
||||
if (!entry) {
|
||||
return callback({});
|
||||
@@ -56,16 +60,13 @@ export class WebviewPortMappingProvider extends Disposable {
|
||||
});
|
||||
}
|
||||
|
||||
public async registerWebview(id: string, webContentsId: number | undefined, metadata: PortMappingData): Promise<void> {
|
||||
public async registerWebview(id: string, metadata: PortMappingData): Promise<void> {
|
||||
const manager = new WebviewPortMappingManager(
|
||||
() => this._webviewData.get(id)?.metadata.extensionLocation,
|
||||
() => this._webviewData.get(id)?.metadata.mappings || [],
|
||||
this._tunnelService);
|
||||
|
||||
this._webviewData.set(id, { webContentsId, metadata, manager });
|
||||
if (typeof webContentsId === 'number') {
|
||||
this._webContentsIdsToWebviewIds.set(webContentsId, id);
|
||||
}
|
||||
this._webviewData.set(id, { metadata, manager });
|
||||
}
|
||||
|
||||
public unregisterWebview(id: string): void {
|
||||
@@ -73,9 +74,6 @@ export class WebviewPortMappingProvider extends Disposable {
|
||||
if (existing) {
|
||||
existing.manager.dispose();
|
||||
this._webviewData.delete(id);
|
||||
if (typeof existing.webContentsId === 'number') {
|
||||
this._webContentsIdsToWebviewIds.delete(existing.webContentsId);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user