未验证 提交 b45ab9da 编写于 作者: L Ladislau Szomoru 提交者: GitHub

Workspace trust - multi-window improvements (#119483)

* Multi-window improvements
上级 3f511d29
......@@ -253,10 +253,10 @@ export class WorkspaceTrustService extends Disposable implements IWorkspaceTrust
this.logInitialWorkspaceTrustInfo();
this._register(this.workspaceService.onDidChangeWorkspaceFolders(() => this.currentTrustState = this.calculateWorkspaceTrustState()));
this._register(this.dataModel.onDidChangeTrustState(() => this.currentTrustState = this.calculateWorkspaceTrustState()));
this._register(this.requestModel.onDidCompleteRequest((trustState) => this.onTrustRequestCompleted(trustState)));
this._register(this.dataModel.onDidChangeTrustState(() => this.onTrustStateChanged()));
this._register(this.requestModel.onDidCancelRequest(() => this.onTrustRequestCancelled()));
this._register(this.requestModel.onDidCompleteRequest((trustState) => this.onTrustRequestCompleted(trustState)));
this._register(this.workspaceService.onDidChangeWorkspaceFolders(() => this.onWorkspaceFoldersChanged()));
this._ctxWorkspaceTrustState = WorkspaceTrustContext.TrustState.bindTo(contextKeyService);
this._ctxWorkspaceTrustPendingRequest = WorkspaceTrustContext.PendingRequest.bindTo(contextKeyService);
......@@ -271,6 +271,7 @@ export class WorkspaceTrustService extends Disposable implements IWorkspaceTrust
if (this._currentTrustState === trustState) { return; }
const previousState = this._currentTrustState;
this._currentTrustState = trustState;
this._ctxWorkspaceTrustState.set(trustState);
this._onDidChangeTrustState.fire({ previousTrustState: previousState, currentTrustState: this._currentTrustState });
}
......@@ -371,20 +372,41 @@ export class WorkspaceTrustService extends Disposable implements IWorkspaceTrust
return state ?? WorkspaceTrustState.Unknown;
}
private onTrustStateChanged(): void {
const newTrustState = this.calculateWorkspaceTrustState();
// Model changes impact the current workspace
if (this.currentTrustState !== newTrustState) {
// Resolve any pending soft requests for workspace trust
if (this._inFlightResolver) {
this._inFlightResolver(newTrustState);
this._inFlightResolver = undefined;
this._trustRequestPromise = undefined;
}
// Update context if there are no pending requests
if (!this._modalTrustRequestPromise && !this._trustRequestPromise) {
this._ctxWorkspaceTrustPendingRequest.set(false);
}
}
this.currentTrustState = newTrustState;
}
private onTrustRequestCompleted(trustState?: WorkspaceTrustState): void {
if (this._modalTrustRequestResolver) {
this._modalTrustRequestResolver(trustState === undefined ? this.currentTrustState : trustState);
this._modalTrustRequestResolver = undefined;
this._modalTrustRequestRejecter = undefined;
this._modalTrustRequestPromise = undefined;
}
if (this._inFlightResolver) {
this._inFlightResolver(trustState === undefined ? this.currentTrustState : trustState);
}
this._inFlightResolver = undefined;
this._trustRequestPromise = undefined;
this._modalTrustRequestResolver = undefined;
this._modalTrustRequestRejecter = undefined;
this._modalTrustRequestPromise = undefined;
this._inFlightResolver = undefined;
this._trustRequestPromise = undefined;
}
if (trustState === undefined) {
return;
......@@ -395,17 +417,20 @@ export class WorkspaceTrustService extends Disposable implements IWorkspaceTrust
});
this._ctxWorkspaceTrustPendingRequest.set(false);
this._ctxWorkspaceTrustState.set(trustState);
}
private onTrustRequestCancelled(): void {
if (this._modalTrustRequestRejecter) {
this._modalTrustRequestRejecter(canceled());
this._modalTrustRequestResolver = undefined;
this._modalTrustRequestRejecter = undefined;
this._modalTrustRequestPromise = undefined;
}
}
this._modalTrustRequestResolver = undefined;
this._modalTrustRequestRejecter = undefined;
this._modalTrustRequestPromise = undefined;
private onWorkspaceFoldersChanged(): void {
this.currentTrustState = this.calculateWorkspaceTrustState();
}
getWorkspaceTrustState(): WorkspaceTrustState {
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册