fix(autofill): page tenue eveillee dans le tray et au retour de veille
Premier autofill apres des heures cachee : la page mettait 3 a 5 s a repondre, alors que les drapeaux anti-gel de Chromium etaient appliques. Un ExecuteJavaScript trivial toutes les 5 min, et tout de suite a la sortie de veille ou au deverrouillage de session. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
@@ -98,6 +98,13 @@ type
|
||||
FFileSaveChunks: TDictionary<string, TStringBuilder>;
|
||||
FPendingURL: string;
|
||||
FNavTimer: TTimer;
|
||||
// REVEIL DE LA PAGE pendant que l'application dort dans le tray. Les
|
||||
// drapeaux --disable-renderer-backgrounding & co sont bien appliques, et
|
||||
// pourtant le premier autofill apres des heures cachee attendait 3 a 5 s
|
||||
// la reponse de la page (mesure : 8 ms coffre tout juste ouvert, 4907 ms
|
||||
// apres une veille). Windows laisse s'endormir un processus que personne
|
||||
// ne sollicite ; une instruction JS triviale toutes les 5 min l'en empeche.
|
||||
FKeepWarmTimer: TTimer;
|
||||
// Set once WebView2 fires OnInitialized. The nav timer only consumes
|
||||
// FPendingURL when this is True — otherwise a timer tick that lands
|
||||
// before the engine is ready would Navigate() into the void AND clear
|
||||
@@ -163,6 +170,7 @@ type
|
||||
procedure UpdateButtons;
|
||||
procedure NavigateToVault;
|
||||
procedure NavTimerTick(Sender: TObject);
|
||||
procedure KeepWarmTick(Sender: TObject);
|
||||
// JS↔Delphi bridge
|
||||
procedure WebBrowserBeforeNavigate(Sender: TObject;
|
||||
var Params: TTMSFNCCustomWebBrowserBeforeNavigateParams);
|
||||
@@ -313,6 +321,14 @@ begin
|
||||
FBridge := TPMBridge.Create(Self);
|
||||
FFileSaveChunks := TDictionary<string, TStringBuilder>.Create;
|
||||
FBridge.OnSystemLock := BridgeSystemLock;
|
||||
// Le reveil des 5 min ne tourne pas pendant la veille : on le donne tout de
|
||||
// suite au retour, avant le premier autofill.
|
||||
FBridge.OnSystemResume :=
|
||||
procedure
|
||||
begin
|
||||
LogLine('Windows resumed / unlocked — waking the page');
|
||||
KeepWarmTick(nil);
|
||||
end;
|
||||
FBridge.OnTrayRestore := BridgeTrayRestore;
|
||||
// Changement fait sur la barrette elle-meme : l'onglet se relit (fillbar/get).
|
||||
FBridge.OnFillBarChanged :=
|
||||
@@ -351,6 +367,10 @@ begin
|
||||
FNavTimer.Enabled := False;
|
||||
FNavTimer.OnTimer := NavTimerTick;
|
||||
|
||||
FKeepWarmTimer := TTimer.Create(Self);
|
||||
FKeepWarmTimer.Interval := 5 * 60 * 1000;
|
||||
FKeepWarmTimer.OnTimer := KeepWarmTick;
|
||||
|
||||
UpdateButtons;
|
||||
LogLine('Password Manager - d backend ready.');
|
||||
LogLine('Click Start to launch server + embedded web vault.');
|
||||
@@ -805,6 +825,12 @@ begin
|
||||
FNavTimer.Enabled := True;
|
||||
end;
|
||||
|
||||
procedure TMainForm.KeepWarmTick(Sender: TObject);
|
||||
begin
|
||||
if FBrowserInitialized then
|
||||
WebBrowser.ExecuteJavaScript('window.Bridge&&Bridge.active');
|
||||
end;
|
||||
|
||||
procedure TMainForm.NavTimerTick(Sender: TObject);
|
||||
begin
|
||||
FNavTimer.Enabled := False;
|
||||
|
||||
Reference in New Issue
Block a user