Make ExtHostSecrets disposable (#217619)

Also register a few disposables.

I don't have too much time to figure out how to register these properly (hence the TODO), and maybe this is more in @jrieken's territory... but wanted to have _something_ in place for now.
This commit is contained in:
Tyler James Leonhardt
2024-06-24 15:44:17 -07:00
committed by GitHub
parent 278b6a37a7
commit d681a19ddc
2 changed files with 12 additions and 4 deletions
@@ -498,9 +498,10 @@ export abstract class AbstractExtHostExtensionService extends Disposable impleme
private _loadExtensionContext(extensionDescription: IExtensionDescription): Promise<vscode.ExtensionContext> {
const lanuageModelAccessInformation = this._extHostLanguageModels.createLanguageModelAccessInformation(extensionDescription);
const globalState = new ExtensionGlobalMemento(extensionDescription, this._storage);
const workspaceState = new ExtensionMemento(extensionDescription.identifier.value, false, this._storage);
const secrets = new ExtensionSecrets(extensionDescription, this._secretState);
// TODO: These should probably be disposed when the extension deactivates
const globalState = this._register(new ExtensionGlobalMemento(extensionDescription, this._storage));
const workspaceState = this._register(new ExtensionMemento(extensionDescription.identifier.value, false, this._storage));
const secrets = this._register(new ExtensionSecrets(extensionDescription, this._secretState));
const extensionMode = extensionDescription.isUnderDevelopment
? (this._initData.environment.extensionTestsLocationURI ? ExtensionMode.Test : ExtensionMode.Development)
: ExtensionMode.Production;
@@ -10,6 +10,7 @@ import type * as vscode from 'vscode';
import { ExtHostSecretState } from 'vs/workbench/api/common/extHostSecretState';
import { ExtensionIdentifier, IExtensionDescription } from 'vs/platform/extensions/common/extensions';
import { Event } from 'vs/base/common/event';
import { DisposableStore } from 'vs/base/common/lifecycle';
export class ExtensionSecrets implements vscode.SecretStorage {
@@ -17,6 +18,7 @@ export class ExtensionSecrets implements vscode.SecretStorage {
readonly #secretState: ExtHostSecretState;
readonly onDidChange: Event<vscode.SecretStorageChangeEvent>;
readonly disposables = new DisposableStore();
constructor(extensionDescription: IExtensionDescription, secretState: ExtHostSecretState) {
this._id = ExtensionIdentifier.toKey(extensionDescription.identifier);
@@ -24,10 +26,15 @@ export class ExtensionSecrets implements vscode.SecretStorage {
this.onDidChange = Event.map(
Event.filter(this.#secretState.onDidChangePassword, e => e.extensionId === this._id),
e => ({ key: e.key })
e => ({ key: e.key }),
this.disposables
);
}
dispose() {
this.disposables.dispose();
}
get(key: string): Promise<string | undefined> {
return this.#secretState.get(this._id, key);
}