diff --git a/apps/browser/src/vault/popup/components/vault/view.component.html b/apps/browser/src/vault/popup/components/vault/view.component.html
index ff76c68464..73415c9070 100644
--- a/apps/browser/src/vault/popup/components/vault/view.component.html
+++ b/apps/browser/src/vault/popup/components/vault/view.component.html
@@ -472,7 +472,7 @@
attr.aria-label="{{ 'launch' | i18n }} {{ u.uri }}"
appA11yTitle="{{ 'launch' | i18n }}"
*ngIf="u.canLaunch"
- (click)="launch(u)"
+ (click)="launch(u, cipher.id)"
>
diff --git a/libs/angular/src/vault/components/view.component.ts b/libs/angular/src/vault/components/view.component.ts
index 4c96c10dac..2ff34ebafa 100644
--- a/libs/angular/src/vault/components/view.component.ts
+++ b/libs/angular/src/vault/components/view.component.ts
@@ -348,15 +348,13 @@ export class ViewComponent implements OnDestroy, OnInit {
}
}
- launch(uri: Launchable, cipherId?: string) {
+ async launch(uri: Launchable, cipherId?: string) {
if (!uri.canLaunch) {
return;
}
if (cipherId) {
- // FIXME: Verify that this floating promise is intentional. If it is, add an explanatory comment and ensure there is proper error handling.
- // eslint-disable-next-line @typescript-eslint/no-floating-promises
- this.cipherService.updateLastLaunchedDate(cipherId);
+ await this.cipherService.updateLastLaunchedDate(cipherId);
}
this.platformUtilsService.launchUri(uri.launchUri);
diff --git a/libs/common/src/vault/services/cipher.service.ts b/libs/common/src/vault/services/cipher.service.ts
index a7377a93ee..207a5da3cb 100644
--- a/libs/common/src/vault/services/cipher.service.ts
+++ b/libs/common/src/vault/services/cipher.service.ts
@@ -650,14 +650,11 @@ export class CipherService implements CipherServiceAbstraction {
ciphersLocalData = {};
}
- const cipherId = id as CipherId;
- if (ciphersLocalData[cipherId]) {
- ciphersLocalData[cipherId].lastLaunched = new Date().getTime();
- } else {
- ciphersLocalData[cipherId] = {
- lastUsedDate: new Date().getTime(),
- };
- }
+ const currentTime = new Date().getTime();
+ ciphersLocalData[id as CipherId] = {
+ lastLaunched: currentTime,
+ lastUsedDate: currentTime,
+ };
await this.localDataState.update(() => ciphersLocalData);
diff --git a/libs/vault/src/cipher-view/autofill-options/autofill-options-view.component.ts b/libs/vault/src/cipher-view/autofill-options/autofill-options-view.component.ts
index b7708b5aa9..2c3739dba4 100644
--- a/libs/vault/src/cipher-view/autofill-options/autofill-options-view.component.ts
+++ b/libs/vault/src/cipher-view/autofill-options/autofill-options-view.component.ts
@@ -3,6 +3,7 @@ import { Component, Input } from "@angular/core";
import { JslibModule } from "@bitwarden/angular/jslib.module";
import { PlatformUtilsService } from "@bitwarden/common/platform/abstractions/platform-utils.service";
+import { CipherService } from "@bitwarden/common/vault/abstractions/cipher.service";
import { LoginUriView } from "@bitwarden/common/vault/models/view/login-uri.view";
import {
CardComponent,
@@ -30,10 +31,15 @@ import {
})
export class AutofillOptionsViewComponent {
@Input() loginUris: LoginUriView[];
+ @Input() cipherId: string;
- constructor(private platformUtilsService: PlatformUtilsService) {}
+ constructor(
+ private platformUtilsService: PlatformUtilsService,
+ private cipherService: CipherService,
+ ) {}
- openWebsite(selectedUri: string) {
+ async openWebsite(selectedUri: string) {
+ await this.cipherService.updateLastLaunchedDate(this.cipherId);
this.platformUtilsService.launchUri(selectedUri);
}
}
diff --git a/libs/vault/src/cipher-view/cipher-view.component.html b/libs/vault/src/cipher-view/cipher-view.component.html
index b693c44815..2dd98092cb 100644
--- a/libs/vault/src/cipher-view/cipher-view.component.html
+++ b/libs/vault/src/cipher-view/cipher-view.component.html
@@ -25,7 +25,11 @@
-
+