Skip to content

v10.10.1

@github-actions github-actions tagged this 30 Sep 21:57
, each replayed against a live Firefox
Nightly before and after the fix where the shape allowed it, plus four more
that followed them the same week, and the engine release that carries the
root-cause fix for the first of them.

- `extension-create`, `extension-develop` and `extension-install` move from
  4.1.29 to 4.1.30. That engine settles a promise before a surface relay
  replies to an eval (the root cause behind the first entry below, filed
  from this repo as extension.js 512), names a missing tab, a refused url,
  a closed surface and a browser exit on every act verb instead of a
  generic refusal, and lets `reload` resolve a surface's tab. The relay
  wrapper below stays: a project that pins an older engine in its own
  node_modules still drives that engine.

- `extension_eval` on a surface that answers through the in-bundle relay
  (every Gecko session, and Chromium MV2) never hands the relay a promise.
  The relay evaluates synchronously and passes the raw value to
  `sendResponse`; a promise is not cloneable, Firefox reports that to the
  sender as no reply, and the bridge then called the surface "not open"
  while the page was still running the expression. The wrapper now settles
  a thenable inside the page under a token, and the tool polls until it is
  done: an async expression returns its value, a rejection answers `E_EVAL`
  with the page's own message, and one that never settles answers
  `E_WAIT_TIMEOUT` naming where the result will land. The engine's "open it
  first: extension open newtab" hint is now spoken as the tool call it means.
- `extension_inspect` on Gecko reads a page inside the extension through
  its surface relay: a url that matches a declared surface document (the
  full `moz-extension://` address, the document path, or its file name)
  routes to that context instead of the tab injection, which Firefox
  refuses into extension pages with "Missing host permission for the tab".
  An extension url that matches no declared surface says so and names the
  ones the manifest declares.
- `extension_stop` reaps the browser the launcher recorded in `ready.json`
  (`browserPid`, `launcherPid`, and any process holding `profilePath`), so
  a Firefox started on a custom profile, or one whose argv never names the
  project, no longer survives a `stopped` answer with `reaped: []`.
- `extension_doctor` no longer calls a Gecko session unhealthy over a
  browser exit that the executor outlived: Firefox hands a fresh profile to
  a relaunched process and the first one exits 0, which the engine's browser
  leg reports as a failure while storage probes and evals keep answering.
  That leg becomes a warning that says so, and any other failure still
  counts.
- `extension_browsers` detect finds a managed binary as deep as the cache
  writes it (a Firefox Nightly sits six levels down inside its app bundle),
  so it no longer reports the system Firefox as available while
  `extension_dev` launches the cached Nightly. When both exist, the entry
  carries `systemBinaryPath` and a `devLaunches` line saying which one dev
  starts and how to choose the other. `extension_wait` reports `browserPid`
  and `profilePath` from the contract.
- `extension_open` with surface `sidebar` on Gecko no longer stops at the
  engine's "sidePanel not available", a Chromium API named on a Firefox
  engine. It asks the sidebar relay whether the `sidebar_action` panel is
  open and reports `status: "already-open"` when it is (Firefox opens the
  panel at install, so it usually is); when it is not, the document is
  rendered as a tab with the gesture rule stated (Firefox opens the panel
  only from the toolbar button or View > Sidebar, Bugzilla 1392624).
- `extension_eval` with context `page` and a `moz-extension://` url on
  Gecko evaluates through the surface relay of the document that url names,
  with a warning naming the context to pass next time, instead of "chrome.
  scripting is not available ... use context background". An extension url
  that matches no declared surface says which surfaces the manifest
  declares. The url-to-surface mapping now lives in one place for inspect
  and eval.
- `extension_dev` with `port: 0` no longer warns "Requested port 0 was not
  available": 0 asks the engine for any free port, so the note now says
  which port it picked, and the collision wording stays for a numbered port
  the server could not bind.
Assets 2
Loading