API feedback (WorkspaceTrustRequest -> WorkspaceTrustRequestOptions) (#119658)
This commit is contained in:
parent
3eb6fec8cd
commit
c55aff6379
9 changed files with 35 additions and 35 deletions
|
@ -49,20 +49,20 @@ export interface WorkspaceTrustRequestButton {
|
|||
type: 'ContinueWithTrust' | 'ContinueWithoutTrust' | 'Manage' | 'Cancel'
|
||||
}
|
||||
|
||||
export interface WorkspaceTrustRequest {
|
||||
export interface WorkspaceTrustRequestOptions {
|
||||
buttons?: WorkspaceTrustRequestButton[];
|
||||
message?: string;
|
||||
modal: boolean;
|
||||
}
|
||||
|
||||
export interface IWorkspaceTrustRequestModel {
|
||||
readonly trustRequest: WorkspaceTrustRequest | undefined;
|
||||
readonly trustRequestOptions: WorkspaceTrustRequestOptions | undefined;
|
||||
|
||||
readonly onDidInitiateRequest: Event<void>;
|
||||
readonly onDidCompleteRequest: Event<WorkspaceTrustState | undefined>;
|
||||
readonly onDidCancelRequest: Event<void>;
|
||||
|
||||
initiateRequest(request?: WorkspaceTrustRequest): void;
|
||||
initiateRequest(options?: WorkspaceTrustRequestOptions): void;
|
||||
completeRequest(trustState?: WorkspaceTrustState): void;
|
||||
cancelRequest(): void;
|
||||
}
|
||||
|
@ -84,7 +84,7 @@ export interface IWorkspaceTrustService {
|
|||
onDidChangeTrustState: WorkspaceTrustChangeEvent;
|
||||
getWorkspaceTrustState(): WorkspaceTrustState;
|
||||
isWorkspaceTrustEnabled(): boolean;
|
||||
requireWorkspaceTrust(request?: WorkspaceTrustRequest): Promise<WorkspaceTrustState>;
|
||||
requireWorkspaceTrust(options?: WorkspaceTrustRequestOptions): Promise<WorkspaceTrustState>;
|
||||
}
|
||||
|
||||
export interface IWorkspaceTrustFolderInfo {
|
||||
|
|
6
src/vs/vscode.proposed.d.ts
vendored
6
src/vs/vscode.proposed.d.ts
vendored
|
@ -2792,7 +2792,7 @@ declare module 'vscode' {
|
|||
/**
|
||||
* The object describing the properties of the workspace trust request
|
||||
*/
|
||||
export interface WorkspaceTrustRequest {
|
||||
export interface WorkspaceTrustRequestOptions {
|
||||
/**
|
||||
* When true, a modal dialog will be used to request workspace trust.
|
||||
* When false, a badge will be displayed on the Setting activity bar item
|
||||
|
@ -2808,10 +2808,10 @@ declare module 'vscode' {
|
|||
|
||||
/**
|
||||
* Prompt the user to chose whether to trust the current workspace
|
||||
* @param request Optional object describing the properties of the
|
||||
* @param options Optional object describing the properties of the
|
||||
* workspace trust request
|
||||
*/
|
||||
export function requireWorkspaceTrust(request?: WorkspaceTrustRequest): Thenable<WorkspaceTrustState>;
|
||||
export function requireWorkspaceTrust(options?: WorkspaceTrustRequestOptions): Thenable<WorkspaceTrustState>;
|
||||
|
||||
/**
|
||||
* Event that fires when the trust state of the current workspace changes
|
||||
|
|
|
@ -16,7 +16,7 @@ import { IInstantiationService } from 'vs/platform/instantiation/common/instanti
|
|||
import { ILabelService } from 'vs/platform/label/common/label';
|
||||
import { INotificationService } from 'vs/platform/notification/common/notification';
|
||||
import { IRequestService } from 'vs/platform/request/common/request';
|
||||
import { WorkspaceTrustStateChangeEvent, IWorkspaceTrustService, WorkspaceTrustRequest, WorkspaceTrustState } from 'vs/platform/workspace/common/workspaceTrust';
|
||||
import { WorkspaceTrustStateChangeEvent, IWorkspaceTrustService, WorkspaceTrustRequestOptions, WorkspaceTrustState } from 'vs/platform/workspace/common/workspaceTrust';
|
||||
import { IWorkspace, IWorkspaceContextService, WorkbenchState } from 'vs/platform/workspace/common/workspace';
|
||||
import { isUntitledWorkspace } from 'vs/platform/workspaces/common/workspaces';
|
||||
import { extHostNamedCustomer } from 'vs/workbench/api/common/extHostCustomers';
|
||||
|
@ -208,8 +208,8 @@ export class MainThreadWorkspace implements MainThreadWorkspaceShape {
|
|||
|
||||
// --- trust ---
|
||||
|
||||
$requireWorkspaceTrust(request?: WorkspaceTrustRequest): Promise<WorkspaceTrustState> {
|
||||
return this._workspaceTrustService.requireWorkspaceTrust(request);
|
||||
$requireWorkspaceTrust(options?: WorkspaceTrustRequestOptions): Promise<WorkspaceTrustState> {
|
||||
return this._workspaceTrustService.requireWorkspaceTrust(options);
|
||||
}
|
||||
|
||||
private getWorkspaceTrustState(): WorkspaceTrustState {
|
||||
|
|
|
@ -913,10 +913,10 @@ export function createApiFactoryAndRegisterActors(accessor: ServicesAccessor): I
|
|||
checkRequiresWorkspaceTrust(extension);
|
||||
return extHostWorkspace.trustState;
|
||||
},
|
||||
requireWorkspaceTrust: (request?: vscode.WorkspaceTrustRequest) => {
|
||||
requireWorkspaceTrust: (options?: vscode.WorkspaceTrustRequestOptions) => {
|
||||
checkProposedApiEnabled(extension);
|
||||
checkRequiresWorkspaceTrust(extension);
|
||||
return extHostWorkspace.requireWorkspaceTrust(request);
|
||||
return extHostWorkspace.requireWorkspaceTrust(options);
|
||||
},
|
||||
onDidChangeWorkspaceTrustState: (listener, thisArgs?, disposables?) => {
|
||||
return extHostWorkspace.onDidChangeWorkspaceTrustState(listener, thisArgs, disposables);
|
||||
|
|
|
@ -58,7 +58,7 @@ import { IAccessibilityInformation } from 'vs/platform/accessibility/common/acce
|
|||
import { IExtensionIdWithVersion } from 'vs/platform/userDataSync/common/extensionsStorageSync';
|
||||
import { InternalTestItem, ITestState, RunTestForProviderRequest, RunTestsRequest, TestIdWithSrc, TestsDiff, ISerializedTestResults } from 'vs/workbench/contrib/testing/common/testCollection';
|
||||
import { CandidatePort } from 'vs/workbench/services/remote/common/remoteExplorerService';
|
||||
import { WorkspaceTrustRequest, WorkspaceTrustStateChangeEvent } from 'vs/platform/workspace/common/workspaceTrust';
|
||||
import { WorkspaceTrustRequestOptions, WorkspaceTrustStateChangeEvent } from 'vs/platform/workspace/common/workspaceTrust';
|
||||
import { ISerializableEnvironmentVariableCollection } from 'vs/workbench/contrib/terminal/common/environmentVariable';
|
||||
import { IShellLaunchConfig, ITerminalDimensions, ITerminalLaunchError } from 'vs/platform/terminal/common/terminal';
|
||||
import { ITerminalProfile } from 'vs/workbench/contrib/terminal/common/terminal';
|
||||
|
@ -891,7 +891,7 @@ export interface MainThreadWorkspaceShape extends IDisposable {
|
|||
$saveAll(includeUntitled?: boolean): Promise<boolean>;
|
||||
$updateWorkspaceFolders(extensionName: string, index: number, deleteCount: number, workspaceFoldersToAdd: { uri: UriComponents, name?: string; }[]): Promise<void>;
|
||||
$resolveProxy(url: string): Promise<string | undefined>;
|
||||
$requireWorkspaceTrust(request?: WorkspaceTrustRequest): Promise<WorkspaceTrustState>;
|
||||
$requireWorkspaceTrust(options?: WorkspaceTrustRequestOptions): Promise<WorkspaceTrustState>;
|
||||
}
|
||||
|
||||
export interface IFileChangeDto {
|
||||
|
|
|
@ -563,8 +563,8 @@ export class ExtHostWorkspace implements ExtHostWorkspaceShape, IExtHostWorkspac
|
|||
return this._workspaceTrustState;
|
||||
}
|
||||
|
||||
requireWorkspaceTrust(request?: vscode.WorkspaceTrustRequest): Promise<WorkspaceTrustState> {
|
||||
return this._proxy.$requireWorkspaceTrust(request);
|
||||
requireWorkspaceTrust(options?: vscode.WorkspaceTrustRequestOptions): Promise<WorkspaceTrustState> {
|
||||
return this._proxy.$requireWorkspaceTrust(options);
|
||||
}
|
||||
|
||||
$onDidChangeWorkspaceTrustState(state: WorkspaceTrustStateChangeEvent): void {
|
||||
|
|
|
@ -72,7 +72,7 @@ export class WorkspaceTrustRequestHandler extends Disposable implements IWorkben
|
|||
|
||||
private registerListeners(): void {
|
||||
this._register(this.requestModel.onDidInitiateRequest(async () => {
|
||||
if (this.requestModel.trustRequest) {
|
||||
if (this.requestModel.trustRequestOptions) {
|
||||
this.toggleRequestBadge(true);
|
||||
|
||||
type WorkspaceTrustRequestedEventClassification = {
|
||||
|
@ -88,18 +88,18 @@ export class WorkspaceTrustRequestHandler extends Disposable implements IWorkben
|
|||
};
|
||||
|
||||
this.telemetryService.publicLog2<WorkspaceTrustRequestedEvent, WorkspaceTrustRequestedEventClassification>('workspaceTrustRequested', {
|
||||
modal: this.requestModel.trustRequest.modal,
|
||||
modal: this.requestModel.trustRequestOptions.modal,
|
||||
workspaceId: this.workspaceContextService.getWorkspace().id,
|
||||
extensions: (await this.extensionService.getExtensions()).filter(ext => !!ext.workspaceTrust).map(ext => ext.identifier.value)
|
||||
});
|
||||
|
||||
if (this.requestModel.trustRequest.modal) {
|
||||
if (this.requestModel.trustRequestOptions.modal) {
|
||||
// Message
|
||||
const defaultMessage = localize('immediateTrustRequestMessage', "A feature you are trying to use may be a security risk if you do not trust the source of the files or folders you currently have open.");
|
||||
const message = this.requestModel.trustRequest.message ?? defaultMessage;
|
||||
const message = this.requestModel.trustRequestOptions.message ?? defaultMessage;
|
||||
|
||||
// Buttons
|
||||
const buttons = this.requestModel.trustRequest.buttons ?? [
|
||||
const buttons = this.requestModel.trustRequestOptions.buttons ?? [
|
||||
{ label: localize('grantWorkspaceTrustButton', "Continue"), type: 'ContinueWithTrust' },
|
||||
{ label: localize('manageWorkspaceTrustButton', "Learn More"), type: 'Manage' }
|
||||
];
|
||||
|
|
|
@ -11,7 +11,7 @@ import { IContextKey, IContextKeyService, RawContextKey } from 'vs/platform/cont
|
|||
import { registerSingleton } from 'vs/platform/instantiation/common/extensions';
|
||||
import { IStorageService, StorageScope, StorageTarget } from 'vs/platform/storage/common/storage';
|
||||
import { IWorkspace, IWorkspaceContextService, WorkbenchState } from 'vs/platform/workspace/common/workspace';
|
||||
import { IWorkspaceTrustModel, WorkspaceTrustRequest, IWorkspaceTrustRequestModel, IWorkspaceTrustService, IWorkspaceTrustStateInfo, WorkspaceTrustState, WorkspaceTrustStateChangeEvent, IWorkspaceTrustFolderInfo } from 'vs/platform/workspace/common/workspaceTrust';
|
||||
import { IWorkspaceTrustModel, WorkspaceTrustRequestOptions, IWorkspaceTrustRequestModel, IWorkspaceTrustService, IWorkspaceTrustStateInfo, WorkspaceTrustState, WorkspaceTrustStateChangeEvent, IWorkspaceTrustFolderInfo } from 'vs/platform/workspace/common/workspaceTrust';
|
||||
import { isEqual, isEqualOrParent } from 'vs/base/common/extpath';
|
||||
import { EditorModel } from 'vs/workbench/common/editor';
|
||||
import { ITelemetryService } from 'vs/platform/telemetry/common/telemetry';
|
||||
|
@ -184,7 +184,7 @@ export class WorkspaceTrustModel extends Disposable implements IWorkspaceTrustMo
|
|||
}
|
||||
|
||||
export class WorkspaceTrustRequestModel extends Disposable implements IWorkspaceTrustRequestModel {
|
||||
trustRequest: WorkspaceTrustRequest | undefined;
|
||||
trustRequestOptions: WorkspaceTrustRequestOptions | undefined;
|
||||
|
||||
private readonly _onDidInitiateRequest = this._register(new Emitter<void>());
|
||||
readonly onDidInitiateRequest: Event<void> = this._onDidInitiateRequest.event;
|
||||
|
@ -195,22 +195,22 @@ export class WorkspaceTrustRequestModel extends Disposable implements IWorkspace
|
|||
private readonly _onDidCancelRequest = this._register(new Emitter<void>());
|
||||
readonly onDidCancelRequest = this._onDidCancelRequest.event;
|
||||
|
||||
initiateRequest(request: WorkspaceTrustRequest): void {
|
||||
if (this.trustRequest && (!request.modal || this.trustRequest.modal)) {
|
||||
initiateRequest(options: WorkspaceTrustRequestOptions): void {
|
||||
if (this.trustRequestOptions && (!options.modal || this.trustRequestOptions.modal)) {
|
||||
return;
|
||||
}
|
||||
|
||||
this.trustRequest = request;
|
||||
this.trustRequestOptions = options;
|
||||
this._onDidInitiateRequest.fire();
|
||||
}
|
||||
|
||||
completeRequest(trustState?: WorkspaceTrustState): void {
|
||||
this.trustRequest = undefined;
|
||||
this.trustRequestOptions = undefined;
|
||||
this._onDidCompleteRequest.fire(trustState);
|
||||
}
|
||||
|
||||
cancelRequest(): void {
|
||||
this.trustRequest = undefined;
|
||||
this.trustRequestOptions = undefined;
|
||||
this._onDidCancelRequest.fire();
|
||||
}
|
||||
}
|
||||
|
@ -416,17 +416,17 @@ export class WorkspaceTrustService extends Disposable implements IWorkspaceTrust
|
|||
return this.configurationService.getValue<boolean>(WORKSPACE_TRUST_ENABLED) ?? false;
|
||||
}
|
||||
|
||||
async requireWorkspaceTrust(request: WorkspaceTrustRequest = { modal: true }): Promise<WorkspaceTrustState> {
|
||||
async requireWorkspaceTrust(options: WorkspaceTrustRequestOptions = { modal: true }): Promise<WorkspaceTrustState> {
|
||||
// Trusted workspace
|
||||
if (this.currentTrustState === WorkspaceTrustState.Trusted) {
|
||||
return this.currentTrustState;
|
||||
}
|
||||
// Untrusted workspace - soft request
|
||||
if (this.currentTrustState === WorkspaceTrustState.Untrusted && !request.modal) {
|
||||
if (this.currentTrustState === WorkspaceTrustState.Untrusted && !options.modal) {
|
||||
return this.currentTrustState;
|
||||
}
|
||||
|
||||
if (request.modal) {
|
||||
if (options.modal) {
|
||||
// Modal request
|
||||
if (!this._modalTrustRequestPromise) {
|
||||
// Create promise
|
||||
|
@ -449,10 +449,10 @@ export class WorkspaceTrustService extends Disposable implements IWorkspaceTrust
|
|||
}
|
||||
}
|
||||
|
||||
this.requestModel.initiateRequest(request);
|
||||
this.requestModel.initiateRequest(options);
|
||||
this._ctxWorkspaceTrustPendingRequest.set(true);
|
||||
|
||||
return request.modal ? this._modalTrustRequestPromise! : this._trustRequestPromise!;
|
||||
return options.modal ? this._modalTrustRequestPromise! : this._trustRequestPromise!;
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -4,7 +4,7 @@
|
|||
*--------------------------------------------------------------------------------------------*/
|
||||
|
||||
import { Event } from 'vs/base/common/event';
|
||||
import { WorkspaceTrustRequest, IWorkspaceTrustRequestModel, IWorkspaceTrustService, WorkspaceTrustChangeEvent, WorkspaceTrustState } from 'vs/platform/workspace/common/workspaceTrust';
|
||||
import { WorkspaceTrustRequestOptions, IWorkspaceTrustRequestModel, IWorkspaceTrustService, WorkspaceTrustChangeEvent, WorkspaceTrustState } from 'vs/platform/workspace/common/workspaceTrust';
|
||||
import { WorkspaceTrustRequestModel } from 'vs/workbench/services/workspaces/common/workspaceTrust';
|
||||
|
||||
export class TestWorkspaceTrustService implements IWorkspaceTrustService {
|
||||
|
@ -22,7 +22,7 @@ export class TestWorkspaceTrustService implements IWorkspaceTrustService {
|
|||
return true;
|
||||
}
|
||||
|
||||
requireWorkspaceTrust(request: WorkspaceTrustRequest): Promise<WorkspaceTrustState> {
|
||||
requireWorkspaceTrust(options?: WorkspaceTrustRequestOptions): Promise<WorkspaceTrustState> {
|
||||
return Promise.resolve(WorkspaceTrustState.Trusted);
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Reference in a new issue