Skip to content

fix(renderer): reject javascript: location assignments without ghosting href - #260

Merged
ldm0 merged 2 commits into
lexmount:mainfrom
BibekPathak:main
Aug 29, 2026
Merged

fix(renderer): reject javascript: location assignments without ghosting href#260
ldm0 merged 2 commits into
lexmount:mainfrom
BibekPathak:main

Conversation

@BibekPathak

Copy link
Copy Markdown
Contributor

Assigning window.location (or location.href) to a javascript: URL on a
top-level window wrote the raw "javascript:..." string into the location
href slot and recorded a pending top-level navigation. On delegate pages
(plain Runtime.evaluate) that navigation is never published or followed, so
location.href was left in a "ghost" state showing the javascript: string
without ever navigating, and the pending record was never cleared.

Match Chromium: leave location.href unchanged and drop the navigation
cleanly. Script execution remains intentionally absent.

  • Stop syncing the location object when the resolved target scheme is
    "javascript" (top-level path already mirrored the child-frame guard), so
    the assignment is a synchronous no-op for href.
  • Clear the pending navigation and restore the top-level location/document
    state when a javascript: pending navigation is dropped on the delegate
    path, instead of silently returning None with the record left behind.

The follow path is unaffected: it executes javascript: navigations inline
via take_pending_location_navigation_with_seed and never goes through the
non-javascript filter.

Tests: add a vm-level test asserting href stays unchanged, the pending
navigation is retained until dropped, and publication clears it; add a
delegate-page CDP test asserting location.href and document.title are
unchanged after a javascript: assignment.

@BibekPathak

Copy link
Copy Markdown
Contributor Author

@ldm0 check this out

@ldm0
ldm0 self-requested a review August 28, 2026 17:50
@ldm0

ldm0 commented Aug 29, 2026

Copy link
Copy Markdown
Member

LGTM, thanks!

@ldm0
ldm0 merged commit ebe38d2 into lexmount:main Aug 29, 2026
17 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants