Skip to content

Commit d681a19

Browse files
Make ExtHostSecrets disposable (microsoft#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.
1 parent 278b6a3 commit d681a19

File tree

2 files changed

+12
-4
lines changed

2 files changed

+12
-4
lines changed

src/vs/workbench/api/common/extHostExtensionService.ts

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -498,9 +498,10 @@ export abstract class AbstractExtHostExtensionService extends Disposable impleme
498498
private _loadExtensionContext(extensionDescription: IExtensionDescription): Promise<vscode.ExtensionContext> {
499499

500500
const lanuageModelAccessInformation = this._extHostLanguageModels.createLanguageModelAccessInformation(extensionDescription);
501-
const globalState = new ExtensionGlobalMemento(extensionDescription, this._storage);
502-
const workspaceState = new ExtensionMemento(extensionDescription.identifier.value, false, this._storage);
503-
const secrets = new ExtensionSecrets(extensionDescription, this._secretState);
501+
// TODO: These should probably be disposed when the extension deactivates
502+
const globalState = this._register(new ExtensionGlobalMemento(extensionDescription, this._storage));
503+
const workspaceState = this._register(new ExtensionMemento(extensionDescription.identifier.value, false, this._storage));
504+
const secrets = this._register(new ExtensionSecrets(extensionDescription, this._secretState));
504505
const extensionMode = extensionDescription.isUnderDevelopment
505506
? (this._initData.environment.extensionTestsLocationURI ? ExtensionMode.Test : ExtensionMode.Development)
506507
: ExtensionMode.Production;

src/vs/workbench/api/common/extHostSecrets.ts

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,24 +10,31 @@ import type * as vscode from 'vscode';
1010
import { ExtHostSecretState } from 'vs/workbench/api/common/extHostSecretState';
1111
import { ExtensionIdentifier, IExtensionDescription } from 'vs/platform/extensions/common/extensions';
1212
import { Event } from 'vs/base/common/event';
13+
import { DisposableStore } from 'vs/base/common/lifecycle';
1314

1415
export class ExtensionSecrets implements vscode.SecretStorage {
1516

1617
protected readonly _id: string;
1718
readonly #secretState: ExtHostSecretState;
1819

1920
readonly onDidChange: Event<vscode.SecretStorageChangeEvent>;
21+
readonly disposables = new DisposableStore();
2022

2123
constructor(extensionDescription: IExtensionDescription, secretState: ExtHostSecretState) {
2224
this._id = ExtensionIdentifier.toKey(extensionDescription.identifier);
2325
this.#secretState = secretState;
2426

2527
this.onDidChange = Event.map(
2628
Event.filter(this.#secretState.onDidChangePassword, e => e.extensionId === this._id),
27-
e => ({ key: e.key })
29+
e => ({ key: e.key }),
30+
this.disposables
2831
);
2932
}
3033

34+
dispose() {
35+
this.disposables.dispose();
36+
}
37+
3138
get(key: string): Promise<string | undefined> {
3239
return this.#secretState.get(this._id, key);
3340
}

0 commit comments

Comments
 (0)