fix(detector): T-222/T-224 overlay M9 Google + UC-05 spam DuckDuckGo#188
Merged
antonyblain merged 1 commit intodevelopfrom Apr 28, 2026
Merged
Conversation
TACHE-222 — Overlay M9 force-mdp activé à tort sur Google /challenge/pwd (INC-003)
(a) handleFocusOnPasswordField : désactivation M9 si isSignInContext()=true.
Google met autocomplete="new-password" à tort sur son écran de connexion.
L'overlay ne doit jamais apparaître quand l'utilisateur saisit son password existant.
(b) createStrengthIndicator : positionnement fixed via getBoundingClientRect()
(Option 1 retenue). Remplace insertAdjacentElement('afterend') qui chevauchait
la case "Afficher le mot de passe" sur le layout Google dense.
Le host est maintenant inséré dans document.body (hors flux DOM), reposé à
chaque show() + scroll/resize via positionHost(). syncM9Width() supprimée
(dead code remplacé par positionHost()).
TACHE-224 — UC-05 spam 27 logs "from=text to=text" + faux positif DuckDuckGo (INC-008)
(a) handleTypeAttributeMutation : early-return si oldType === newType.
Élimine 100% des mutations sans changement réel (cas searchbox text→text).
(b) registerPasswordInput() conditionné à oldType==="password" || newType==="password".
Un input type="search" qui n'a jamais été password ne rejoint plus _snPasswordInputs.
Tests ajoutés : T-224-01/02/03/04 (UC-05 spam + faux positif) + T-222-01/02/03/04/05/06
(isSignInContext URL patterns + positionnement fixed overlay).
Référence : TACHE-222, TACHE-224, INC-003, INC-008, PV recette 2026-04-24
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Résumé des 2 bugs corrigés
TACHE-222 — Overlay M9 force-mdp Google /challenge/pwd (INC-003, P1)
Deux sous-bugs corrigés :
(a) Activation à tort sur une page de connexion
autocomplete="new-password"sur son écran de connexion/challenge/pwd.isCreationForm()retournaittrue→ M9 s'activait alors que l'utilisateur saisit son password existant.handleFocusOnPasswordFieldcourt-circuite M9 siisSignInContext()retournetrue. Réutilise le helper post-PR#187 (TACHE-221). Comportement sur github.com/login : inchangé (M9 absent, attendu).(b) Chevauchement layout Google dense
insertAdjacentElement('afterend', host)insérait le host dans le flux DOM juste après le champ, chevauchant la case « Afficher le mot de passe » et le champ password.document.body.appendChild(host)avecposition:fixed; z-index:2147483647. FonctionpositionHost()recalculetop/left/widthviagetBoundingClientRect()à chaqueshow()+ sur les événementsscroll(capture:true) etresize.fixedest insensible au flux du formulaire parent (cas Google, layouts SPA).syncM9Width()supprimée (dead code remplacé parpositionHost()).TACHE-224 — UC-05 spam logs + faux positif DuckDuckGo (INC-008, P1)
(a) Spam 27 logs "from=text to=text"
handleTypeAttributeMutationentrait dans le bloc de traitement même sioldType === newType.if (oldType === newType) continue;en early-return au début de la boucle. Élimine 100% des mutations sans changement réel.(b) Faux positif
<input name="q">dans_snPasswordInputsregisterPasswordInput()était appelé pour toute mutationnewType === 'text', y compris les transitionstext→text,search→text, etc.registerPasswordInput()conditionné àoldType === 'password' || newType === 'password'. Un inputtype="search"qui n'a jamais été password ne rejoint plus jamais_snPasswordInputs.Tableau before/after UC-05 (DuckDuckGo searchbox)
text→text_snPasswordInputs<input name="q">dans_snPasswordInputspassword→text(toggle show)text→password(toggle hide)Tests ajoutés
TACHE-224 :
from=text to=text→ court-circuité, 0 log, non ajoutéfrom=password to=text→ handler exécuté, log émis, ajoutéfrom=text to=password→ handler exécuté, log émis, ajoutétype="search"sans mutation password → jamais dans_snPasswordInputsTACHE-222 :
isSignInContext()retournetruesur/signin/v2/challenge/pwdisSignInContext()retournefalsesur/accounts/createisSignInContext()retournetruesur/logindocument.body, pas dans le form parent (non-régression afterend)position:fixedavecz-index:2147483647show()repositionne le host viagetBoundingClientRect()Suite complète : 1165/1165 tests verts, 67/67 fichiers, 0 régression.
Fichiers touchés
src/content-scripts/detectors/password-detector.ts— 4 zones modifiéestests/unit/content-scripts/password-detector-t222-t224-m9-uc05.test.ts— nouveau fichier (10 tests)Référence : TACHE-222, TACHE-224, INC-003, INC-008, PV recette 2026-04-24
🤖 Generated with Claude Code