mirror of
https://github.com/Microsoft/vscode
synced 2024-08-27 21:09:43 +00:00
Show error when webview restore fails
This commit is contained in:
parent
753b18ddc1
commit
c14e30aeb4
|
@ -91,7 +91,7 @@ export class MarkdownPreviewManager implements vscode.WebviewSerializer {
|
|||
public async deserializeWebview(
|
||||
webview: vscode.Webview,
|
||||
state: any
|
||||
): Promise<boolean> {
|
||||
): Promise<void> {
|
||||
const preview = await MarkdownPreview.revive(
|
||||
webview,
|
||||
state,
|
||||
|
@ -101,7 +101,6 @@ export class MarkdownPreviewManager implements vscode.WebviewSerializer {
|
|||
this.topmostLineMonitor);
|
||||
|
||||
this.registerPreview(preview);
|
||||
return true;
|
||||
}
|
||||
|
||||
public async serializeWebview(
|
||||
|
|
4
src/vs/vscode.proposed.d.ts
vendored
4
src/vs/vscode.proposed.d.ts
vendored
|
@ -658,10 +658,8 @@ declare module 'vscode' {
|
|||
*
|
||||
* @param webview Webview to restore. The serializer should take ownership of this webview.
|
||||
* @param state Persisted state.
|
||||
*
|
||||
* @return Was deserialization successful?
|
||||
*/
|
||||
deserializeWebview(webview: Webview, state: any): Thenable<boolean>;
|
||||
deserializeWebview(webview: Webview, state: any): Thenable<void>;
|
||||
}
|
||||
|
||||
namespace window {
|
||||
|
|
|
@ -2,6 +2,7 @@
|
|||
* Copyright (c) Microsoft Corporation. All rights reserved.
|
||||
* Licensed under the MIT License. See License.txt in the project root for license information.
|
||||
*--------------------------------------------------------------------------------------------*/
|
||||
import { localize } from 'vs/nls';
|
||||
import { IDisposable, dispose } from 'vs/base/common/lifecycle';
|
||||
import * as map from 'vs/base/common/map';
|
||||
import URI from 'vs/base/common/uri';
|
||||
|
@ -132,7 +133,8 @@ export class MainThreadWebviews implements MainThreadWebviewsShape, WebviewReviv
|
|||
}
|
||||
|
||||
reviveWebview(webview: WebviewEditorInput): TPromise<void> {
|
||||
return this._extensionService.activateByEvent(`onView:${webview.state.viewType}`).then(() => {
|
||||
const viewType = webview.state.viewType;
|
||||
return this._extensionService.activateByEvent(`onView:${viewType}`).then(() => {
|
||||
const handle = 'revival-' + MainThreadWebviews.revivalPool++;
|
||||
this._webviews.set(handle, webview);
|
||||
|
||||
|
@ -148,7 +150,9 @@ export class MainThreadWebviews implements MainThreadWebviewsShape, WebviewReviv
|
|||
};
|
||||
|
||||
return this._proxy.$deserializeWebview(handle, webview.state.viewType, webview.state.state, webview.position, webview.options)
|
||||
.then(() => { });
|
||||
.then(undefined, () => {
|
||||
webview.html = MainThreadWebviews.getDeserializationFailedContents(viewType);
|
||||
});
|
||||
});
|
||||
}
|
||||
|
||||
|
@ -231,4 +235,16 @@ export class MainThreadWebviews implements MainThreadWebviewsShape, WebviewReviv
|
|||
this._openerService.open(link);
|
||||
}
|
||||
}
|
||||
|
||||
private static getDeserializationFailedContents(viewType: string) {
|
||||
return `<!DOCTYPE html>
|
||||
<html>
|
||||
<head>
|
||||
<base href="https://code.visualstudio.com/raw/">
|
||||
<meta http-equiv="Content-type" content="text/html;charset=UTF-8">
|
||||
<meta http-equiv="Content-Security-Policy" content="default-src 'none'; img-src https: data:; media-src https:; script-src 'none'; style-src vscode-core-resource: https: 'unsafe-inline'; child-src 'none'; frame-src 'none';">
|
||||
</head>
|
||||
<body>${localize('errorMessage', "An error occurred while restoring view:{0}", viewType)}</body>
|
||||
</html>`;
|
||||
}
|
||||
}
|
||||
|
|
|
@ -366,7 +366,7 @@ export interface ExtHostWebviewsShape {
|
|||
$onDidChangeActiveWeview(handle: WebviewHandle | undefined): void;
|
||||
$onDidDisposeWeview(handle: WebviewHandle): Thenable<void>;
|
||||
$onDidChangePosition(handle: WebviewHandle, newPosition: EditorPosition): void;
|
||||
$deserializeWebview(newWebviewHandle: WebviewHandle, viewType: string, state: any, position: EditorPosition, options: vscode.WebviewOptions): Thenable<boolean>;
|
||||
$deserializeWebview(newWebviewHandle: WebviewHandle, viewType: string, state: any, position: EditorPosition, options: vscode.WebviewOptions): Thenable<void>;
|
||||
$serializeWebview(webviewHandle: WebviewHandle): Thenable<any>;
|
||||
}
|
||||
|
||||
|
|
|
@ -237,10 +237,10 @@ export class ExtHostWebviews implements ExtHostWebviewsShape {
|
|||
state: any,
|
||||
position: Position,
|
||||
options: vscode.WebviewOptions
|
||||
): Thenable<boolean> {
|
||||
): Thenable<void> {
|
||||
const serializer = this._serializers.get(viewType);
|
||||
if (!serializer) {
|
||||
return TPromise.as(false);
|
||||
return TPromise.wrapError(new Error(`No serializer found for '${viewType}'`));
|
||||
}
|
||||
|
||||
const revivedWebview = new ExtHostWebview(webviewHandle, this._proxy, viewType, typeConverters.toViewColumn(position), options);
|
||||
|
|
Loading…
Reference in a new issue