An agent REPL whose terminal went away kept running. Killing the tmux
session it ran in, or dropping the ssh connection, left read() returning
0 on stdin while select() kept reporting it readable, and isocline
treated that as "no key yet": the editor redrew and read again in a tight
loop, allocating each time. Two of them left behind by a screencast had
grown past 4 GiB each within minutes.
isocline now ends the edit on EOF or a read error, as Ctrl-D on an empty
line does, so the REPL quits. Its signal handler also stops swallowing
termination signals it has no previous handler to chain to, which is
what let the SIGHUP from that hangup go unnoticed.
SIGTERM in the REPL still behaves like Ctrl-C: that is Sighandler's
no_hard_exit, and isocline never sees it.
Normally a ~ selector has to check all if it's siblings (it doesn't just check
its immediately proceeding sibling, it checks them all). But, there are common
cases where if the first sibling doesn't match, none of them can:
If the first .b sibling doesn't match (because its parent isn't #a) then none
of the other siblings can match, because they all share the same parent.
There are common cases where a subsequent sibling selector (~)
Skip brotli test if it isn't supported (Chrome).
WritableStreamDefaultWriter: writer.close() on an errored stream now rejects
with a new TypeError, not the stored error.
Spec says a cached response's headers should be immutable, but both Chrome
and Firefox allow setting to it. I couldn't find a WPT test that enforces it
either way, so I'm changing this to copy Chrome since some sites might
reasonably expect that behavior.
I think we should start to implement this API, but returning false is a good
first step. Returning `false` for an unsupported or disabled command is the
spec-correct solution.
Marginally helps: https://github.com/lightpanda-io/browser/issues/4216
We're inconsistent in whether or not we support touch events.
navigator.maxTouchPoints is 0 and `'ontouchstart' in window` isn't in window
but it is in document.
This removes the touch handlers from document and element - we aren't emulating
a touch device.
Our range.getClientRects would *never* return more than one rect. We now walk
the range and emit the rect for each selected element whose parent isn't
selected, and a measureText rect for each selected text node.
This is just about indicating whether we know the property or not, e.g. erroring
on an unknown property correctly, better CSS.support(...) answers and, similarly
the correctness of 'x' in getComputedStyle(el).
This is largely for ~5K WPT cases though it does open the door for more advanced
CSS work, including `@support` rules.
Also, we still don't parse / understand most values, so checks are limited to
property names.
Almost all fixes are either test fixture issues (timing differences) or expected
divergences.
ImageData just changed the error message for a Float16Array (now TypeError).
Script.eval used frame.js, which is the isolated world's context while a
world call runs. Playwright's setContent writes the HTML with
document.write from its utility world, so inline scripts ran there and
their globals were missing for page.evaluate. Evaluate in frame.main_js.