Browser: keep drag input with its page and refuse lost-channel settlement
Maintainer antworten meist innerhalb von 1 Tag
Dieses Issue hat noch niemand übernommen.
Bewertung
- Schwierigkeit
- 4/5
- Geschätzter Aufwand
- 3-5 Tage
- Anfängerfreundlichkeit
- 35/100
- Issue-Typ
- Bug
- Klarheit
- Klar beschrieben
- Aktivitätsstatus
- Aktiv
- Tech-Stack
- javascript, rust
Rechercherichtung
Start with capsules/browser/browser/browser-input-surface.js:335-460, then trace the ownership capture at browser.js:1609 and the ordering barrier at browser.js:1670; compare the channel handling with browser-remote-display.js:1384 and the caller at browser.js:1735-1741. Add regression cases at the real callback boundaries for the listed ownership and disconnect/reconnect transitions. Done means those cases refuse or retire unsafe input, and the installed Mac journey passes on the signed candidate.
Vom Indexierungsmodell aus dem Issue-Text verfasst.
Beschreibung
User impact
An active mouse drag can continue on a replacement Browser page. A related ordering check can report success after the input channel disconnects, allowing a later Runtime input to proceed without proof that the earlier selection arrived.
Found in the latest local 0.8.0 train input changes during #93's audit. Proposed priority: P1 for page ownership, P2 for the lost-channel ordering case; triage before freezing the Browser candidate under #87.
Exact candidate and evidence
Candidate 460b1888d344f52cebd1c25866be88ff4085f035, tree 17aeaf23c640e2dec8f653fd16f3771f95a55b9c. It is local and unpublished. Two reviewers independently repeated deterministic in-memory fixtures against its actual JavaScript. These are source-level reproductions, not installed media proof.
Active drag changes owner
capsules/browser/browser/browser-input-surface.js:335-460 stores pointer and drag state without the originating page/generation. A queued animation-frame move and direct release use the page current when the callback runs. browser.js:1609 captures ownership at that later invocation.
Fixture: pointerdown at x=100 on old page; queue pointermove x=120; replace current page before the animation frame; flush frame; pointerup x=140.
Both runs produced:
[
{"page":"old","type":"mouse","x":100,"y":100,"buttons":1},
{"page":"replacement","type":"mouse","x":120,"y":100,"buttons":1},
{"page":"replacement","type":"mouse","x":140,"y":100,"buttons":0}
]
Expected: later input stays bound to the original gesture owner or is retired. It cannot become a new page's gesture.
Disconnect is treated as completed drain
browser.js:1670 waits on buffer amount and elapsed time without binding the channel identity/open state. The real display getter returns zero when the channel is removed (browser-remote-display.js:1384, close at :281). The caller continues after its page check (browser.js:1735-1741); channel reconnect can occur without changing page identity.
Fixture: bufferedAmount=64; disconnect after 20 ms and return buffer=0. The helper resolved with the channel closed:
{"settled":true,"channelOpen":false,"elapsedMs":175}
The separate reviewer observed 180 ms. Elapsed time is incidental; successful settlement on a closed channel is the finding.
Acceptance
- Capture gesture page/session/generation at pointerdown; retire queued callbacks when ownership ends.
- Release the old gesture through its own valid owner, or terminate it without sending to a replacement.
- Cover page replacement, close, navigation, blur, pointer capture loss and a fresh gesture after retirement.
- Bind the input ordering barrier to the actual channel/generation and distinguish confirmed drain from disconnect/unknown delivery.
- Cover pending bytes then disconnect/reconnect with the same page ID; later input must receive a clear refusal/recovery outcome.
- Add regression cases using the real source callback boundaries, then run the installed Mac selection/paste/close/reconnect journey on the signed candidate.
Existing input/order tests and the overall 1,819-test behaviour suite pass; these transitions are absent from that evidence. Coordinate with draft PR #421 (deferred wheel/touch ownership), #439 (adapter uncertainty) and #87. This issue owns the new mouse-drag and datachannel-barrier slice; it does not duplicate those broader tasks. The exact no-file reproduction commands are retained in the audit's local evidence packet and can become the regression fixtures.
- Vorherrschende Sprache
- Rust
- Sterne
- 6
- Forks
- 2
- Ø Merge
- 1 T. 3 Std.
- Gemergte PRs (30 T.)
- 42
Entwicklungsumgebung
Dieses Projekt bietet weder Dev-Container noch Dockerfile noch Beitragsleitfaden – die Einrichtung liegt bei Ihnen. Beginnen Sie mit der README; die allgemeinen Schritte stehen in unserem Leitfaden für den ersten Beitrag.
Erste Schritte
- Lesen Sie das ganze Issue und danach den Beitragsleitfaden des Projekts.
- Schreiben Sie ins Issue, dass Sie es übernehmen — das erspart doppelte Arbeit.
- Forken Sie das Repository und arbeiten Sie in einem Branch.
- Öffnen Sie einen Pull Request, der die Issue-Nummer nennt.
Mehr aus elastos/elastos-runtime
-
Schwierigkeit 2/5 1-3 Stunden Anfängerfreundlichkeit 72/100
elastos/elastos-runtime#563 ·
Maintainer antworten meist innerhalb von 1 Tag
-
Schwierigkeit 2/5 1-3 Stunden Anfängerfreundlichkeit 76/100
elastos/elastos-runtime#508 ·
Maintainer antworten meist innerhalb von 1 Tag
-
Schwierigkeit 2/5 1-3 Stunden Anfängerfreundlichkeit 72/100
elastos/elastos-runtime#436 · 1 Kommentar ·
Maintainer antworten meist innerhalb von 1 Tag
-
Schwierigkeit 2/5 1-3 Stunden Anfängerfreundlichkeit 78/100
elastos/elastos-runtime#427 ·
Maintainer antworten meist innerhalb von 1 Tag
-
Schwierigkeit 2/5 1-3 Stunden Anfängerfreundlichkeit 78/100
elastos/elastos-runtime#405 ·
Maintainer antworten meist innerhalb von 1 Tag
Alle Issues in elastos/elastos-runtime
Ähnliche Issues
-
Unit tests use deprecated constant (part 2)Evtl. vergeben @servo-highfive hat das heute übernommen. OffenE-less-complex
Schwierigkeit 1/5 Unter einer Stunde Anfängerfreundlichkeit 84/100
servo/servo#49766 · 1 Kommentar ·
Maintainer antworten meist innerhalb von 1 Tag
-
bug good first issue help wanted linux macos testing
Schwierigkeit 2/5 1-3 Stunden Anfängerfreundlichkeit 85/100
Maintainer antworten meist innerhalb von 1 Tag
-
area: app type: test
Schwierigkeit 2/5 1-3 Stunden Anfängerfreundlichkeit 82/100
Maintainer antworten meist innerhalb von 1 Tag
-
bug priority: medium
Schwierigkeit 2/5 1-3 Stunden Anfängerfreundlichkeit 78/100
storytold/photocraft#12706 · 1 Kommentar ·
Maintainer antworten meist innerhalb von 1 Tag
-
bug priority-low to-agent
Schwierigkeit 2/5 1-3 Stunden Anfängerfreundlichkeit 68/100
Maintainer antworten meist innerhalb von 1 Tag