diff --git a/src/vs/workbench/contrib/webview/browser/baseWebviewElement.ts b/src/vs/workbench/contrib/webview/browser/baseWebviewElement.ts index 77ad4c55f93c49df8ae8e1d1096489d860ea5d24..97dcd030a8ad9d55491e926c8003c030399912bc 100644 --- a/src/vs/workbench/contrib/webview/browser/baseWebviewElement.ts +++ b/src/vs/workbench/contrib/webview/browser/baseWebviewElement.ts @@ -10,6 +10,7 @@ import { IEnvironmentService } from 'vs/platform/environment/common/environment' import { ExtensionIdentifier } from 'vs/platform/extensions/common/extensions'; import { ITelemetryService } from 'vs/platform/telemetry/common/telemetry'; import { WebviewExtensionDescription, WebviewOptions } from 'vs/workbench/contrib/webview/browser/webview'; +import { URI } from 'vs/base/common/uri'; export const enum WebviewMessageChannels { onmessage = 'onmessage', @@ -55,6 +56,18 @@ export abstract class BaseWebview extends Disposable { this._register(this.on('no-csp-found', () => { this.handleNoCspFound(); })); + + this._register(this.on(WebviewMessageChannels.didClickLink, (uri: string) => { + this._onDidClickLink.fire(URI.parse(uri)); + })); + + this._register(this.on(WebviewMessageChannels.onmessage, (data: any) => { + this._onMessage.fire(data); + })); + + this._register(this.on(WebviewMessageChannels.didScroll, (scrollYPercentage: number) => { + this._onDidScroll.fire({ scrollYPercentage: scrollYPercentage }); + })); } dispose(): void { @@ -69,6 +82,15 @@ export abstract class BaseWebview extends Disposable { private readonly _onMissingCsp = this._register(new Emitter()); public readonly onMissingCsp = this._onMissingCsp.event; + private readonly _onDidClickLink = this._register(new Emitter()); + public readonly onDidClickLink = this._onDidClickLink.event; + + private readonly _onMessage = this._register(new Emitter()); + public readonly onMessage = this._onMessage.event; + + private readonly _onDidScroll = this._register(new Emitter<{ readonly scrollYPercentage: number; }>()); + public readonly onDidScroll = this._onDidScroll.event; + protected _send(channel: string, data?: any): void { this._ready .then(() => this.postMessage(channel, data)) diff --git a/src/vs/workbench/contrib/webview/browser/webviewElement.ts b/src/vs/workbench/contrib/webview/browser/webviewElement.ts index 2e156fec551d9f98b80518dd3452a1f2a77b1cb6..4aa5a14566550ef8f508a88443ab3c3e9fbc0c2f 100644 --- a/src/vs/workbench/contrib/webview/browser/webviewElement.ts +++ b/src/vs/workbench/contrib/webview/browser/webviewElement.ts @@ -62,20 +62,6 @@ export class IFrameWebview extends BaseWebview implements Web state: undefined }; - this._register(this.on(WebviewMessageChannels.onmessage, (data: any) => { - this._onMessage.fire(data); - })); - - this._register(this.on(WebviewMessageChannels.didClickLink, (uri: string) => { - this._onDidClickLink.fire(URI.parse(uri)); - })); - - this._register(this.on(WebviewMessageChannels.didScroll, () => { - // if (e.args && typeof e.args[0] === 'number') { - // this._onDidScroll.fire({ scrollYPercentage: e.args[0] }); - // } - })); - this._register(this.on(WebviewMessageChannels.doReload, () => { this.reload(); })); @@ -186,18 +172,9 @@ export class IFrameWebview extends BaseWebview implements Web private readonly _onDidFocus = this._register(new Emitter()); public readonly onDidFocus = this._onDidFocus.event; - private readonly _onDidClickLink = this._register(new Emitter()); - public readonly onDidClickLink = this._onDidClickLink.event; - - private readonly _onDidScroll = this._register(new Emitter<{ scrollYPercentage: number }>()); - public readonly onDidScroll = this._onDidScroll.event; - private readonly _onDidUpdateState = this._register(new Emitter()); public readonly onDidUpdateState = this._onDidUpdateState.event; - private readonly _onMessage = this._register(new Emitter()); - public readonly onMessage = this._onMessage.event; - sendMessage(data: any): void { this._send('message', data); } diff --git a/src/vs/workbench/contrib/webview/electron-browser/webviewElement.ts b/src/vs/workbench/contrib/webview/electron-browser/webviewElement.ts index 9b42e4389eae600d0aa8bbee07ebf43bf96484bb..b897a545b461f420beedb0e59d40a9548f109705 100644 --- a/src/vs/workbench/contrib/webview/electron-browser/webviewElement.ts +++ b/src/vs/workbench/contrib/webview/electron-browser/webviewElement.ts @@ -295,14 +295,6 @@ export class ElectronWebviewBasedWebview extends BaseWebview impleme console.error('embedded page crashed'); })); - this._register(this.on(WebviewMessageChannels.onmessage, (data: any) => { - this._onMessage.fire(data); - })); - - this._register(this.on(WebviewMessageChannels.didClickLink, (uri: string) => { - this._onDidClickLink.fire(URI.parse(uri)); - })); - this._register(this.on('synthetic-mouse-event', (rawEvent: any) => { if (!this.element) { return; @@ -329,10 +321,6 @@ export class ElectronWebviewBasedWebview extends BaseWebview impleme } })); - this._register(this.on(WebviewMessageChannels.didScroll, (scrollYPercentage: number) => { - this._onDidScroll.fire({ scrollYPercentage: scrollYPercentage }); - })); - this._register(this.on(WebviewMessageChannels.doReload, () => { this.reload(); })); @@ -394,18 +382,9 @@ export class ElectronWebviewBasedWebview extends BaseWebview impleme parent.appendChild(this.element); } - private readonly _onDidClickLink = this._register(new Emitter()); - public readonly onDidClickLink = this._onDidClickLink.event; - - private readonly _onDidScroll = this._register(new Emitter<{ scrollYPercentage: number; }>()); - public readonly onDidScroll = this._onDidScroll.event; - private readonly _onDidUpdateState = this._register(new Emitter()); public readonly onDidUpdateState = this._onDidUpdateState.event; - private readonly _onMessage = this._register(new Emitter()); - public readonly onMessage = this._onMessage.event; - protected postMessage(channel: string, data?: any): void { if (this.element) { this.element.send(channel, data);