From d5ca108a65488c369929cfc360b1532e953c7286 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Marco=20Trevisan=20=28Trevi=C3=B1o=29?= Date: Tue, 12 Apr 2022 16:38:40 +0200 Subject: [PATCH] gdm/util: Start fingerprint verification once it's available If fingerprint service is not replying fast enough to our async request, authentication is started but the fingerprint service is never started. So, in case the fingerprint type information is received after that the authentication has been started, let's start the service. Part-of: --- js/gdm/util.js | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) diff --git a/js/gdm/util.js b/js/gdm/util.js index 6731200f6..24593f6b5 100644 --- a/js/gdm/util.js +++ b/js/gdm/util.js @@ -366,6 +366,13 @@ export class ShellUserVerifier extends Signals.EventEmitter { ? FingerprintReaderType.SWIPE : FingerprintReaderType.PRESS; this._updateDefaultService(); + + if (this._userVerifier && + !this._activeServices.has(FINGERPRINT_SERVICE_NAME)) { + if (!this._hold?.isAcquired()) + this._hold = new Batch.Hold(); + await this._maybeStartFingerprintVerification(); + } } _onCredentialManagerAuthenticated(credentialManager, _token) { @@ -617,11 +624,14 @@ export class ShellUserVerifier extends Signals.EventEmitter { _beginVerification() { this._startService(this._getForegroundService()); + this._maybeStartFingerprintVerification().catch(logError); + } + async _maybeStartFingerprintVerification() { if (this._userName && this._fingerprintReaderType !== FingerprintReaderType.NONE && !this.serviceIsForeground(FINGERPRINT_SERVICE_NAME)) - this._startService(FINGERPRINT_SERVICE_NAME); + await this._startService(FINGERPRINT_SERVICE_NAME); } _onChoiceListQuery(client, serviceName, promptMessage, list) {