Found in the review of the capture-live-form-state branch (live form state + secret redaction).
The CDP capture (SnapshotDom in markanywhere-browse/.../CapturePage.kt) recognises a field the page masks with -webkit-text-security only through the snapshot's computed styles, which DOMSnapshot.captureSnapshot reports for laid-out nodes only.
The in-page JS walker (ElementToSemanticEvents.kt) uses getComputedStyle, which also answers for an element without a box.
Scenario: a filled <input type="text" style="-webkit-text-security: disc"> (a PIN, an OTP) sits in a hidden wizard step, a collapsed accordion or an inactive tab panel.
It has no layout box, so masked = false in the CDP capture and its value lands in the dump, while the JS dump of the same page redacts it.
This breaks both the redaction promise and the rule that the two dump producers decide content through one shared function (FormControls.kt).
Possible fixes: read the style for not-laid-out text-entry controls separately (e.g. CSS.getComputedStyleForNode / one Runtime.callFunctionOn per such control), or treat a not-laid-out control's masking as unknown and redact conservatively when the markup gives a hint.
Found in the review of the
capture-live-form-statebranch (live form state + secret redaction).The CDP capture (
SnapshotDominmarkanywhere-browse/.../CapturePage.kt) recognises a field the page masks with-webkit-text-securityonly through the snapshot's computed styles, whichDOMSnapshot.captureSnapshotreports for laid-out nodes only.The in-page JS walker (
ElementToSemanticEvents.kt) usesgetComputedStyle, which also answers for an element without a box.Scenario: a filled
<input type="text" style="-webkit-text-security: disc">(a PIN, an OTP) sits in a hidden wizard step, a collapsed accordion or an inactive tab panel.It has no layout box, so
masked = falsein the CDP capture and itsvaluelands in the dump, while the JS dump of the same page redacts it.This breaks both the redaction promise and the rule that the two dump producers decide content through one shared function (
FormControls.kt).Possible fixes: read the style for not-laid-out text-entry controls separately (e.g.
CSS.getComputedStyleForNode/ oneRuntime.callFunctionOnper such control), or treat a not-laid-out control's masking as unknown and redact conservatively when the markup gives a hint.