mirror of
https://github.com/microsoft/vscode.git
synced 2026-08-04 20:36:01 +01:00
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:
committed by
GitHub
parent
278b6a37a7
commit
d681a19ddc
@@ -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);
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user