Skip to content

Commit b327c1c

Browse files
committed
Merge branch 'main' into merogge/console-error
2 parents 2d62fea + c770ca6 commit b327c1c

File tree

17 files changed

+193
-96
lines changed

17 files changed

+193
-96
lines changed

package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -70,7 +70,7 @@
7070
"@parcel/watcher": "2.1.0",
7171
"@vscode/iconv-lite-umd": "0.7.0",
7272
"@vscode/policy-watcher": "^1.1.4",
73-
"@vscode/proxy-agent": "^0.17.0",
73+
"@vscode/proxy-agent": "^0.17.1",
7474
"@vscode/ripgrep": "^1.15.5",
7575
"@vscode/spdlog": "^0.13.10",
7676
"@vscode/sqlite3": "5.1.6-vscode",

remote/package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@
77
"@microsoft/1ds-post-js": "^3.2.2",
88
"@parcel/watcher": "2.1.0",
99
"@vscode/iconv-lite-umd": "0.7.0",
10-
"@vscode/proxy-agent": "^0.17.0",
10+
"@vscode/proxy-agent": "^0.17.1",
1111
"@vscode/ripgrep": "^1.15.5",
1212
"@vscode/spdlog": "^0.13.10",
1313
"@vscode/vscode-languagedetection": "1.0.21",

remote/yarn.lock

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -58,10 +58,10 @@
5858
resolved "https://registry.yarnpkg.com/@vscode/iconv-lite-umd/-/iconv-lite-umd-0.7.0.tgz#d2f1e0664ee6036408f9743fee264ea0699b0e48"
5959
integrity sha512-bRRFxLfg5dtAyl5XyiVWz/ZBPahpOpPrNYnnHpOpUZvam4tKH35wdhP4Kj6PbM0+KdliOsPzbGWpkxcdpNB/sg==
6060

61-
"@vscode/proxy-agent@^0.17.0":
62-
version "0.17.0"
63-
resolved "https://registry.yarnpkg.com/@vscode/proxy-agent/-/proxy-agent-0.17.0.tgz#e60d43e2779c07c223d3bad9b7de8eedf7ca1294"
64-
integrity sha512-p4gJ57KeWGw0CEG9R13dmsgmWmszoOQ836pf/PVbAf+ZRF27il3QcFvOhA10XE2QFHaOcRxuJnnIpUD1lSMvqQ==
61+
"@vscode/proxy-agent@^0.17.1":
62+
version "0.17.1"
63+
resolved "https://registry.yarnpkg.com/@vscode/proxy-agent/-/proxy-agent-0.17.1.tgz#00ea42fb3565c78c38bc99a73d4460db538aef4e"
64+
integrity sha512-KWQ5y2uB6547Oudx2TMV28PdcdqNzI4J7TZzhZht1kNra8spqOzQJXw6gBdoh2mMFVpNiKgVhZ9YinWR0BZHiw==
6565
dependencies:
6666
"@tootallnate/once" "^3.0.0"
6767
agent-base "^7.0.1"

src/vs/workbench/api/node/proxyResolver.ts

Lines changed: 21 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,8 @@ import { ILogService } from 'vs/platform/log/common/log';
1818
import { IExtensionDescription } from 'vs/platform/extensions/common/extensions';
1919
import { LogLevel, createHttpPatch, createProxyResolver, createTlsPatch, ProxySupportSetting, ProxyAgentParams, createNetPatch } from '@vscode/proxy-agent';
2020

21+
const systemCertificatesV2Default = true;
22+
2123
export function connectProxyResolver(
2224
extHostWorkspace: IExtHostWorkspaceProvider,
2325
configProvider: ExtHostConfigProvider,
@@ -30,7 +32,7 @@ export function connectProxyResolver(
3032
const doUseHostProxy = typeof useHostProxy === 'boolean' ? useHostProxy : !initData.remote.isRemote;
3133
const params: ProxyAgentParams = {
3234
resolveProxy: url => extHostWorkspace.resolveProxy(url),
33-
lookupProxyAuthorization: lookupProxyAuthorization.bind(undefined, extHostLogService, configProvider, {}, {}),
35+
lookupProxyAuthorization: lookupProxyAuthorization.bind(undefined, extHostLogService, configProvider, {}),
3436
getProxyURL: () => configProvider.getConfiguration('http').get('proxy'),
3537
getProxySupport: () => configProvider.getConfiguration('http').get<ProxySupportSetting>('proxySupport') || 'off',
3638
getSystemCertificatesV1: () => certSettingV1(configProvider),
@@ -74,12 +76,12 @@ function createPatchedModules(params: ProxyAgentParams, resolveProxy: ReturnType
7476

7577
function certSettingV1(configProvider: ExtHostConfigProvider) {
7678
const http = configProvider.getConfiguration('http');
77-
return !http.get<boolean>('experimental.systemCertificatesV2') && !!http.get<boolean>('systemCertificates');
79+
return !http.get<boolean>('experimental.systemCertificatesV2', systemCertificatesV2Default) && !!http.get<boolean>('systemCertificates');
7880
}
7981

8082
function certSettingV2(configProvider: ExtHostConfigProvider) {
8183
const http = configProvider.getConfiguration('http');
82-
return !!http.get<boolean>('experimental.systemCertificatesV2') && !!http.get<boolean>('systemCertificates');
84+
return !!http.get<boolean>('experimental.systemCertificatesV2', systemCertificatesV2Default) && !!http.get<boolean>('systemCertificates');
8385
}
8486

8587
const modulesCache = new Map<IExtensionDescription | undefined, { http?: typeof http; https?: typeof https }>();
@@ -119,9 +121,9 @@ async function lookupProxyAuthorization(
119121
extHostLogService: ILogService,
120122
configProvider: ExtHostConfigProvider,
121123
proxyAuthenticateCache: Record<string, string | string[] | undefined>,
122-
pendingLookups: Record<string, Promise<string | undefined>>,
123124
proxyURL: string,
124-
proxyAuthenticate?: string | string[]
125+
proxyAuthenticate: string | string[] | undefined,
126+
state: { kerberosRequested?: boolean }
125127
): Promise<string | undefined> {
126128
const cached = proxyAuthenticateCache[proxyURL];
127129
if (proxyAuthenticate) {
@@ -130,25 +132,20 @@ async function lookupProxyAuthorization(
130132
extHostLogService.trace('ProxyResolver#lookupProxyAuthorization callback', `proxyURL:${proxyURL}`, `proxyAuthenticate:${proxyAuthenticate}`, `proxyAuthenticateCache:${cached}`);
131133
const header = proxyAuthenticate || cached;
132134
const authenticate = Array.isArray(header) ? header : typeof header === 'string' ? [header] : [];
133-
if (authenticate.some(a => /^(Negotiate|Kerberos)( |$)/i.test(a))) {
134-
const lookupKey = `${proxyURL}:Negotiate`;
135-
return pendingLookups[lookupKey] ??= (async () => {
136-
try {
137-
const kerberos = await import('kerberos');
138-
const url = new URL(proxyURL);
139-
const spn = configProvider.getConfiguration('http').get<string>('proxyKerberosServicePrincipal')
140-
|| (process.platform === 'win32' ? `HTTP/${url.hostname}` : `HTTP@${url.hostname}`);
141-
extHostLogService.debug('ProxyResolver#lookupProxyAuthorization Kerberos authentication lookup', `proxyURL:${proxyURL}`, `spn:${spn}`);
142-
const client = await kerberos.initializeClient(spn);
143-
const response = await client.step('');
144-
return 'Negotiate ' + response;
145-
} catch (err) {
146-
extHostLogService.error('ProxyResolver#lookupProxyAuthorization Kerberos authentication failed', err);
147-
return undefined;
148-
} finally {
149-
delete pendingLookups[lookupKey];
150-
}
151-
})();
135+
if (authenticate.some(a => /^(Negotiate|Kerberos)( |$)/i.test(a)) && !state.kerberosRequested) {
136+
try {
137+
state.kerberosRequested = true;
138+
const kerberos = await import('kerberos');
139+
const url = new URL(proxyURL);
140+
const spn = configProvider.getConfiguration('http').get<string>('proxyKerberosServicePrincipal')
141+
|| (process.platform === 'win32' ? `HTTP/${url.hostname}` : `HTTP@${url.hostname}`);
142+
extHostLogService.debug('ProxyResolver#lookupProxyAuthorization Kerberos authentication lookup', `proxyURL:${proxyURL}`, `spn:${spn}`);
143+
const client = await kerberos.initializeClient(spn);
144+
const response = await client.step('');
145+
return 'Negotiate ' + response;
146+
} catch (err) {
147+
extHostLogService.error('ProxyResolver#lookupProxyAuthorization Kerberos authentication failed', err);
148+
}
152149
}
153150
return undefined;
154151
}

src/vs/workbench/browser/parts/notifications/notificationsToasts.ts

Lines changed: 21 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,8 @@ import { IHostService } from 'vs/workbench/services/host/browser/host';
2525
import { IntervalCounter } from 'vs/base/common/async';
2626
import { assertIsDefined } from 'vs/base/common/types';
2727
import { NotificationsToastsVisibleContext } from 'vs/workbench/common/contextkeys';
28+
import { IKeybindingService } from 'vs/platform/keybinding/common/keybinding';
29+
import { IConfigurationService } from 'vs/platform/configuration/common/configuration';
2830

2931
interface INotificationToast {
3032
readonly item: INotificationViewItem;
@@ -83,7 +85,9 @@ export class NotificationsToasts extends Themable implements INotificationsToast
8385
@IEditorGroupsService private readonly editorGroupService: IEditorGroupsService,
8486
@IContextKeyService private readonly contextKeyService: IContextKeyService,
8587
@ILifecycleService private readonly lifecycleService: ILifecycleService,
86-
@IHostService private readonly hostService: IHostService
88+
@IHostService private readonly hostService: IHostService,
89+
@IKeybindingService private readonly _keybindingService: IKeybindingService,
90+
@IConfigurationService private readonly _configurationService: IConfigurationService
8791
) {
8892
super(themeService);
8993

@@ -187,11 +191,24 @@ export class NotificationsToasts extends Themable implements INotificationsToast
187191
const notificationList = this.instantiationService.createInstance(NotificationsList, notificationToast, {
188192
verticalScrollMode: ScrollbarVisibility.Hidden,
189193
widgetAriaLabel: (() => {
190-
if (!item.source) {
191-
return localize('notificationAriaLabel', "{0}, notification", item.message.raw);
194+
let accessibleViewHint: string | undefined;
195+
const keybinding = this._keybindingService.lookupKeybinding('editor.action.accessibleView')?.getAriaLabel();
196+
if (this._configurationService.getValue('accessibility.verbosity.notification')) {
197+
accessibleViewHint = keybinding ? localize('chatAccessibleViewHint', "Inspect the response in the accessible view with {0}", keybinding) : localize('chatAccessibleViewHintNoKb', "Inspect the response in the accessible view via the command Open Accessible View which is currently not triggerable via keybinding");
192198
}
193199

194-
return localize('notificationWithSourceAriaLabel', "{0}, source: {1}, notification", item.message.raw, item.source);
200+
if (!item.source) {
201+
if (accessibleViewHint) {
202+
return localize('notificationAriaLabelViewHint', "{0}, notification {1}", item.message.raw, accessibleViewHint);
203+
} else {
204+
return localize('notificationAriaLabel', "{0}, notification", item.message.raw);
205+
}
206+
}
207+
if (accessibleViewHint) {
208+
return localize('notificationWithSourceAriaLabelViewHint', "{0}, source: {1}, notification {2}", item.message.raw, item.source, accessibleViewHint);
209+
} else {
210+
return localize('notificationWithSourceAriaLabel', "{0}, source: {1}, notification", item.message.raw, item.source);
211+
}
195212
})()
196213
});
197214
itemDisposables.add(notificationList);

src/vs/workbench/contrib/accessibility/browser/accessibility.contribution.ts

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@ import { ToggleTabFocusModeAction } from 'vs/editor/contrib/toggleTabFocusMode/b
1212
import { localize } from 'vs/nls';
1313
import { InstantiationType, registerSingleton } from 'vs/platform/instantiation/common/extensions';
1414
import { IKeybindingService } from 'vs/platform/keybinding/common/keybinding';
15-
import { AccessibilityHelpAction, AccessibleViewAction, AccessibleViewNextAction, AccessibleViewPreviousAction, registerAccessibilityConfiguration } from 'vs/workbench/contrib/accessibility/browser/accessibilityContribution';
15+
import { AccessibilityHelpAction, AccessibilityVerbositySettingId, AccessibleViewAction, AccessibleViewNextAction, AccessibleViewPreviousAction, registerAccessibilityConfiguration } from 'vs/workbench/contrib/accessibility/browser/accessibilityContribution';
1616
import * as strings from 'vs/base/common/strings';
1717
import { IInstantiationService } from 'vs/platform/instantiation/common/instantiation';
1818
import { IWorkbenchContributionsRegistry, Extensions as WorkbenchExtensions } from 'vs/workbench/common/contributions';
@@ -36,7 +36,7 @@ class AccessibilityHelpProvider implements IAccessibleContentProvider {
3636
this._editor.focus();
3737
}
3838
options: IAccessibleViewOptions = { type: AccessibleViewType.HelpMenu, ariaLabel: localize('editor-help', "editor accessibility help"), readMoreUrl: 'https://go.microsoft.com/fwlink/?linkid=851010' };
39-
verbositySettingKey: string = 'editor';
39+
verbositySettingKey = AccessibilityVerbositySettingId.Editor;
4040
constructor(
4141
private readonly _editor: ICodeEditor,
4242
@IKeybindingService private readonly _keybindingService: IKeybindingService
@@ -118,7 +118,7 @@ class HoverAccessibleViewContribution extends Disposable {
118118
return false;
119119
}
120120
accessibleViewService.show({
121-
verbositySettingKey: 'hover',
121+
verbositySettingKey: AccessibilityVerbositySettingId.Hover,
122122
provideContent() { return editorHoverContent; },
123123
onClose() { },
124124
options: this._options
@@ -135,7 +135,7 @@ class HoverAccessibleViewContribution extends Disposable {
135135
return false;
136136
}
137137
accessibleViewService.show({
138-
verbositySettingKey: 'hover',
138+
verbositySettingKey: AccessibilityVerbositySettingId.Hover,
139139
provideContent() { return extensionHoverContent; },
140140
onClose() { },
141141
options: this._options
@@ -208,7 +208,7 @@ class NotificationAccessibleViewContribution extends Disposable {
208208
list.focusPrevious();
209209
renderAccessibleView();
210210
},
211-
verbositySettingKey: 'notifications',
211+
verbositySettingKey: AccessibilityVerbositySettingId.Notification,
212212
options: {
213213
ariaLabel: localize('notification', "Notification Accessible View"),
214214
type: AccessibleViewType.View

src/vs/workbench/contrib/accessibility/browser/accessibilityContribution.ts

Lines changed: 14 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,10 @@ export const enum AccessibilityVerbositySettingId {
1717
Chat = 'accessibility.verbosity.panelChat',
1818
InlineChat = 'accessibility.verbosity.inlineChat',
1919
KeybindingsEditor = 'accessibility.verbosity.keybindingsEditor',
20-
Notebook = 'accessibility.verbosity.notebook'
20+
Notebook = 'accessibility.verbosity.notebook',
21+
Editor = 'accessibility.verbosity.editor',
22+
Hover = 'accessibility.verbosity.hover',
23+
Notification = 'accessibility.verbosity.notification'
2124
}
2225

2326
const baseProperty: object = {
@@ -54,6 +57,14 @@ const configuration: IConfigurationNode = {
5457
[AccessibilityVerbositySettingId.Notebook]: {
5558
description: localize('verbosity.notebook', 'Provide information about how to focus the cell container or inner editor when a notebook cell is focused.'),
5659
...baseProperty
60+
},
61+
[AccessibilityVerbositySettingId.Hover]: {
62+
description: localize('verbosity.hover', 'Provide information about how to open the hover in an accessible view.'),
63+
...baseProperty
64+
},
65+
[AccessibilityVerbositySettingId.Notification]: {
66+
description: localize('verbosity.notification', 'Provide information about how to open the notification in an accessible view.'),
67+
...baseProperty
5768
}
5869
}
5970
};
@@ -118,7 +129,7 @@ export const AccessibleViewNextAction = registerCommand(new MultiCommand({
118129
menuOpts: [{
119130
menuId: MenuId.CommandPalette,
120131
group: '',
121-
title: localize('editor.action.accessibleViewNext', "Next Accessible View"),
132+
title: localize('editor.action.accessibleViewNext', "Show Next in Accessible View"),
122133
order: 1
123134
}],
124135
}));
@@ -133,7 +144,7 @@ export const AccessibleViewPreviousAction = registerCommand(new MultiCommand({
133144
menuOpts: [{
134145
menuId: MenuId.CommandPalette,
135146
group: '',
136-
title: localize('editor.action.accessibleViewPrevious', "Previous Accessible View"),
147+
title: localize('editor.action.accessibleViewPrevious', "Show Previous in Accessible View"),
137148
order: 1
138149
}],
139150
}));

src/vs/workbench/contrib/accessibility/browser/accessibleView.ts

Lines changed: 29 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -24,14 +24,16 @@ import { IOpenerService } from 'vs/platform/opener/common/opener';
2424
import { alert } from 'vs/base/browser/ui/aria/aria';
2525
import { getSimpleEditorOptions } from 'vs/workbench/contrib/codeEditor/browser/simpleEditorOptions';
2626
import { CodeActionController } from 'vs/editor/contrib/codeAction/browser/codeActionController';
27+
import { IKeybindingService } from 'vs/platform/keybinding/common/keybinding';
28+
import { AccessibilityVerbositySettingId, AccessibleViewAction, AccessibleViewNextAction } from 'vs/workbench/contrib/accessibility/browser/accessibilityContribution';
2729

2830
const enum DEFAULT {
2931
WIDTH = 800,
3032
TOP = 3
3133
}
3234

3335
export interface IAccessibleContentProvider {
34-
verbositySettingKey: string;
36+
verbositySettingKey: AccessibilityVerbositySettingId;
3537
provideContent(): string;
3638
onClose(): void;
3739
onKeyDown?(e: IKeyboardEvent): void;
@@ -47,6 +49,7 @@ export interface IAccessibleViewService {
4749
show(provider: IAccessibleContentProvider): void;
4850
next(): void;
4951
previous(): void;
52+
getOpenAriaHint(verbositySettingKey: AccessibilityVerbositySettingId): string;
5053
}
5154

5255
export const enum AccessibleViewType {
@@ -78,7 +81,8 @@ class AccessibleView extends Disposable {
7881
@IModelService private readonly _modelService: IModelService,
7982
@IContextViewService private readonly _contextViewService: IContextViewService,
8083
@IContextKeyService private readonly _contextKeyService: IContextKeyService,
81-
@IAccessibilityService private readonly _accessibilityService: IAccessibilityService
84+
@IAccessibilityService private readonly _accessibilityService: IAccessibilityService,
85+
@IKeybindingService private readonly _keybindingService: IKeybindingService
8286
) {
8387
super();
8488
this._accessiblityHelpIsShown = accessibilityHelpIsShown.bindTo(this._contextKeyService);
@@ -168,7 +172,7 @@ class AccessibleView extends Disposable {
168172
? AccessibilityHelpNLS.changeConfigToOnMac
169173
: AccessibilityHelpNLS.changeConfigToOnWinLinux
170174
);
171-
if (accessibilitySupport && provider.verbositySettingKey === 'editor') {
175+
if (accessibilitySupport && provider.verbositySettingKey === AccessibilityVerbositySettingId.Editor) {
172176
message = AccessibilityHelpNLS.auto_on;
173177
message += '\n';
174178
} else if (!accessibilitySupport) {
@@ -192,7 +196,7 @@ class AccessibleView extends Disposable {
192196
model.setLanguage(provider.options.language);
193197
}
194198
container.appendChild(this._editorContainer);
195-
this._editorWidget.updateOptions({ ariaLabel: provider.options.ariaLabel });
199+
this._editorWidget.updateOptions({ ariaLabel: provider.next && provider.previous ? localize('accessibleViewAriaLabelWithNav', "{0} {1}", provider.options.ariaLabel, this._getNavigationAriaHint(provider.verbositySettingKey)) : localize('accessibleViewAriaLabel', "{0}", provider.options.ariaLabel) });
196200
this._editorWidget.focus();
197201
});
198202
const disposableStore = new DisposableStore();
@@ -234,14 +238,26 @@ class AccessibleView extends Disposable {
234238
}
235239
return this._modelService.createModel(resource.fragment, null, resource, false);
236240
}
241+
242+
private _getNavigationAriaHint(verbositySettingKey: AccessibilityVerbositySettingId): string {
243+
let hint = '';
244+
const nextKeybinding = this._keybindingService.lookupKeybinding(AccessibleViewNextAction.id)?.getAriaLabel();
245+
const previousKeybinding = this._keybindingService.lookupKeybinding(AccessibleViewNextAction.id)?.getAriaLabel();
246+
if (this._configurationService.getValue(verbositySettingKey)) {
247+
hint = (nextKeybinding && previousKeybinding) ? localize('chatAccessibleViewNextPreviousHint', "Show the next {0} or previous {1} item in the accessible view", nextKeybinding, previousKeybinding) : localize('chatAccessibleViewNextPreviousHintNoKb', "Show the next or previous item in the accessible view by configuring keybindings for Show Next / Previous in Accessible View");
248+
}
249+
return hint;
250+
}
237251
}
238252

239253
export class AccessibleViewService extends Disposable implements IAccessibleViewService {
240254
declare readonly _serviceBrand: undefined;
241255
private _accessibleView: AccessibleView | undefined;
242256

243257
constructor(
244-
@IInstantiationService private readonly _instantiationService: IInstantiationService
258+
@IInstantiationService private readonly _instantiationService: IInstantiationService,
259+
@IConfigurationService private readonly _configurationService: IConfigurationService,
260+
@IKeybindingService private readonly _keybindingService: IKeybindingService
245261
) {
246262
super();
247263
}
@@ -258,4 +274,12 @@ export class AccessibleViewService extends Disposable implements IAccessibleView
258274
previous(): void {
259275
this._accessibleView?.previous();
260276
}
277+
getOpenAriaHint(verbositySettingKey: AccessibilityVerbositySettingId): string {
278+
let hint = '';
279+
const keybinding = this._keybindingService.lookupKeybinding(AccessibleViewAction.id)?.getAriaLabel();
280+
if (this._configurationService.getValue(verbositySettingKey)) {
281+
hint = keybinding ? localize('chatAccessibleViewHint', "Inspect the response in the accessible view with {0}", keybinding) : localize('chatAccessibleViewHintNoKb', "Inspect the response in the accessible view via the command Open Accessible View which is currently not triggerable via keybinding");
282+
}
283+
return hint;
284+
}
261285
}

0 commit comments

Comments
 (0)