diff --git a/src/vs/workbench/api/electron-browser/mainThreadWebview.ts b/src/vs/workbench/api/electron-browser/mainThreadWebview.ts index 222f5e17289..60eaaf1be9f 100644 --- a/src/vs/workbench/api/electron-browser/mainThreadWebview.ts +++ b/src/vs/workbench/api/electron-browser/mainThreadWebview.ts @@ -22,6 +22,8 @@ import { extHostNamedCustomer } from './extHostCustomers'; @extHostNamedCustomer(MainContext.MainThreadWebviews) export class MainThreadWebviews implements MainThreadWebviewsShape, WebviewReviver { + private static readonly serializeTimeout = 500; // ms + private static readonly viewType = 'mainThreadWebview'; private static readonly standardSupportedLinkSchemes = ['http', 'https', 'mailto']; @@ -163,14 +165,19 @@ export class MainThreadWebviews implements MainThreadWebviewsShape, WebviewReviv }); const reviveResponses = toRevive.map(handle => - this._proxy.$serializeWebview(handle).then(state => ({ handle, state }))); + TPromise.any([ + this._proxy.$serializeWebview(handle).then(state => ({ handle, state })), + TPromise.timeout(MainThreadWebviews.serializeTimeout).then(() => ({ handle, state: null })) + ]).then(x => x.value)); return TPromise.join(reviveResponses).then(results => { for (const result of results) { - if (result.state) { - const view = this._webviews.get(result.handle); - if (view) { + const view = this._webviews.get(result.handle); + if (view) { + if (result.state) { view.state.state = result.state; + } else { + view.state = null; } } } diff --git a/src/vs/workbench/parts/webview/electron-browser/webviewInputFactory.ts b/src/vs/workbench/parts/webview/electron-browser/webviewInputFactory.ts index 648d36f2dc1..a6f4edb387f 100644 --- a/src/vs/workbench/parts/webview/electron-browser/webviewInputFactory.ts +++ b/src/vs/workbench/parts/webview/electron-browser/webviewInputFactory.ts @@ -29,6 +29,11 @@ export class WebviewInputFactory implements IEditorInputFactory { public serialize( input: WebviewEditorInput ): string { + // Has not state, don't revive + if (!input.state) { + return null; + } + // Only attempt revival if we may have a reviver if (!this._webviewService.canRevive(input) && !input.reviver) { return null;