Skip to content

Virtualized lists: scroll command doesn't advance the inner scroll container #35

@apireno

Description

@apireno

Symptom

Surfaced by a Claude agent scraping LinkedIn (messaging conversation list, connections list, May 25 2026):

  • Only ~5–12 rows of a virtualized list are exposed to the AX tree at any time — only what the browser has actually rendered into the DOM.
  • `scroll down` reports `Position: 0/936px (0%)` and does not advance off-screen rows into view.
  • Net effect: rows beyond the initial viewport of a virtualized list (react-window, LinkedIn's ``, similar) are unreachable.

Root cause

`scroll down` calls `cdp.scrollPage(direction, amount)` which scrolls `window` (the document scroll container). LinkedIn's conversation list is an inner scrollable container — the document itself isn't scrolling, so `window.scrollY` stays at 0 and nothing advances.

The AX tree is correct — it reflects what's actually in the DOM. The problem is the scroll target, not the snapshot.

Fix ideas (not yet designed)

  1. Implicit: detect the nearest scrollable ancestor of the AX cursor (or of the most-recently `cd`'d-into element) and scroll that container instead of `window`. Heuristic: walk up the DOM from `backendDOMNodeId`, checking `overflow: auto/scroll` and `scrollHeight > clientHeight`.
  2. Explicit: new `scroll_into ` flow — agent names the scroll container, command scrolls it. Less magic; clearer mental model.
  3. Hybrid: `scroll down` defaults to inner-container detection, falls back to window. `scroll down --window` forces document scroll.

Probably (3) — preserves existing behavior on non-virtualized pages, fixes virtualized lists by default.

Reproduction

  1. Open LinkedIn messaging or connections list in Chrome.
  2. `cd` into the conversation/connections list.
  3. `ls` — observe only ~5–12 rows visible.
  4. `scroll down` — observe `Position: 0/...` and no new rows on subsequent `ls`.

Out of scope for the navigate-bug fix (in-flight 1.3.0 Web Store review)

Filed separately so the small navigate fix can ship without dragging in a scroll-architecture change.

Reference

  • Agent diagnosis: "[secondary issue:] virtualized lists (the messaging conversation list, the connections list) only expose ~5–12 rows to the tree, and scroll down reports Position: 0/936px (0%) without advancing — so off-screen rows are unreachable."
  • Related code: `handleScroll` in src/background/index.ts:3097, `cdp.scrollPage` in src/background/cdp_client.ts.

Metadata

Metadata

Assignees

No one assigned

    Labels

    bugSomething isn't working

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions