`anchor-scroll-to-sticky-006.html` renders the same as
`anchor-scroll-to-sticky-005`. The only difference between the two
tests is that 006 has an identity `scale: 1` added to `#sticky` to
exercise the anchor transform code path.
Differential Revision: https://phabricator.services.mozilla.com/D325535
This patch introduces `GetPositionIgnoringScrollingAndSticky()` and
`GetOffsetToIgnoringScrollingAndSticky()`, and uses the latter in all
the helpers in `AnchorPositioningUtils` instead of
`GetOffsetToIgnoringScrolling()`. As a result, an anchor positioned
element whose anchor is sticky is now laid out against the sticky
anchor's scroll-ignored position.
`GetScrollOffsetFor()` then becomes `GetScrollOffsetTo()`, which
accumulates the difference between the anchor's scroll-ignored and
actual position in a single walk of the frame tree. Because both
accessors are evaluated on the same frames, any scroll container that
moves the anchor and the absolute containing block together cancels
out.
That eliminates the need to check the stop conditions in the old code,
and it works when the absolute containing block is fragmented or has
IB-split siblings.
Differential Revision: https://phabricator.services.mozilla.com/D324789
It allows the caller to pass a lambda to accumulate a difference of
two position getters in one walk of the frame tree, which is needed by
the next part.
This patch does not change behavior.
Differential Revision: https://phabricator.services.mozilla.com/D325534
`ComputeStickyLimits()` returned its two rectangles through outparams.
Return them in a struct instead, which is easier to use at the call
sites.
Differential Revision: https://phabricator.services.mozilla.com/D324787
jxl-rs changed its dither pattern again in
https://github.com/libjxl/jxl-rs/commit/b76fd1421ed675bd35a4996fecafc124bf47f75e
I'm doing this in the .ini files instead of in the html test files themselves because bug 2070605 is pending with a merge from wpt that bumps these fuzz counts in the html files, but we need slightly more fuzz, and we need this to be green in order to land. After bug 2070605 is merged I will move these into the html files so it gets merged back to wpt.
Differential Revision: https://phabricator.services.mozilla.com/D325325
Upstream jxl-rs has a fix for upsampling the LF preview in
https://github.com/libjxl/jxl-rs/commit/760c9d636aa15d6979208ec3a6fe59d734c387cc.
Comparing the before and after directly you can see that it was wrongly
sampling pixels past the right edge and treating those as black and the new
image is a clear improvment.
This also affects testing/web-platform/tests/jpegxl/progressive-1.html because
they are based on the same image, but there is an incoming wpt merge that
touches that reference for this same reason, so I can't touch it here or else I
would cause a conflict. After it's merged I will make sure everything is
sorted out fully.
Differential Revision: https://phabricator.services.mozilla.com/D325241
large-jxl-reference.webp held libjxl's decode of large.jxl. jxl-rs changed its
dither pattern again in
https://github.com/libjxl/jxl-rs/commit/b76fd1421ed675bd35a4996fecafc124bf47f75e
and now it is different from libjxl (it used to match). I want this test case
in particular to be an exact match (or as close as we can get) so I regenerated
it from jxl-rs. webp was used because I wanted a different format decoder to
check against and because this is a big file (necessary for testing
multithreaded decoding) and webp produced the smallest lossless file from a
decoder that wasn't jxl.
Differential Revision: https://phabricator.services.mozilla.com/D325239
JxlParallelRunner gained a required num_threads method.
set_pixel_format now returns a Result, which we propagate. It only fails if the
pixel format changes after the first frame header is decoded, and we set ours
once right after basic info arrives.
Differential Revision: https://phabricator.services.mozilla.com/D325238
This re-applies the bug 2043090 macOS x86_64 workaround
These files had significant changes this update so I re-verified that the
workaround was still both needed (on affected rust versions) and worked to
avoid the problem on the new files.
Differential Revision: https://phabricator.services.mozilla.com/D325237
Mostly we're passing a bunch more tests now. The only "new" failure is because we don't implement
the ui-* generics, and therefore don't force things like (quoted) "ui-serif" to retain String syntax.
Differential Revision: https://phabricator.services.mozilla.com/D325337
The image() function is incorrectly falling back to a blob image.
Use an exclusive switch so that it doesn't happen again. The only thing
we don't support in the WR path as far as I can tell is -moz-element().
-moz-symbolic-icon() works just like url(), and all the cases for url()
where we return false there's basically nothing to draw. cross-fade() is
not implemented in either path so let's return true for now so that we
intentionally switch to false if needed.
I don't get the EffectiveAppearance() check and I don't think it's
needed. Those go through
nsDisplayThemedBackground::CreateWebRenderCommands, and any
author-specified background disables the native appearance.
While at it don't bother to create WR commands for transparent colors,
which are common in the front-end and is a one-liner check.
Differential Revision: https://phabricator.services.mozilla.com/D325399
The bailout process is modified to use bailout stub information to rebuild
the stack one frame at a time instead of the existing bulk copy.
- The bailout tail uses the bailout stub information to setup the bailout
registers, copy contents of frames (besides the return address) and jumps
to the appropriate bailout stub.
- The bailout stub is setup so that simply calling back into the bailout
tail materializes the expected return address - and the bailout tail can
continue with the next frame.
Differential Revision: https://phabricator.services.mozilla.com/D320793
The BaselineStackBuilder now adds BailoutStubInfo corresponding to each
rebuilt stack frame to the BaselineBailoutInfo. The stub info tells the
bailout tail where each frame's contents end and the bailout stub that
will materialize the return address for the frame's call into an outer
frame.
Differential Revision: https://phabricator.services.mozilla.com/D320792
Add bailout stubs to the Baseline Interpreter and the Fallback IC compiler. These
are currently a no-op - but will be jumped to by the bailout tail after copying
a single frame's contents. This allows the frame's return address, that is presently
directly copied into the stack, to be materialized with an actual call - making
bailout compatible with CET shadow stack on x86_64.
Differential Revision: https://phabricator.services.mozilla.com/D320791
test_getCandidateTabs_keepsOnlyUngroupedWebTabs already puts a grouped tab in the window and asserts it is left out, so test_getCandidateTabs_excludesAlreadyGroupedTabs asserted the same rule a second time.
Differential Revision: https://phabricator.services.mozilla.com/D324807
The fixture keeps the chat sidebar shut. Navigating a Smart Window off about:aiwindow auto-opens it, and its composer then autofocuses and takes chrome focus back out of the panel the test has just opened. On try that cost the toolbar button tests 4 of 18 runs, and none once the sidebar stayed shut. Organize Tabs does not involve the sidebar, so there is nothing to gain from racing it.
addWebTabs waits until clustering would look at every tab it added. A tab's load event can fire while the tab is still busy or has no title yet, and getCandidateTabs skips both, so a test could open the panel onto fewer tabs than it set up.
Teardown closes the window before popping the pref env, as the file did before it was split. Popping browser.smartwindow.autoTabGrouping.enabled first flips the lazy pref getter in a live window, which destroys the toolbar widget under a panel that may still be open.
Differential Revision: https://phabricator.services.mozilla.com/D316648
Sentry has a complex set of options and their defaults often change so begin to
lock down our expectations and assert them. Functionally this patch also disables
health pings, ANRs and caught-exception handling. We can revisit re-enabling them
in the future when we have been tie in to Fenix settings and more test coverage.
These changes are also applied to Focus via the shared lib-crash code.
This also removes the Sentry performance monitor ContentProvider from startup since
the feature was already disabled for us.
Differential Revision: https://phabricator.services.mozilla.com/D325521
This reverts commit 95a29fb0af.
Revert "Bug 2067218 - Stop the notification helper when the pref is disabled. r=aborondo,nrishel"
This reverts commit 476a507146.
Revert "Bug 2067218 - Add a Nimbus-controlled pref gating the notification helper. r=iholmes"
This reverts commit b71eec14bf.
Revert "Bug 2067218 - Accept a --profile argument in the notification helper. r=aborondo,nrishel"
This reverts commit 9847f37108.
This avoids the need to create the `defined_name_##arg` constants which will
let us add support for named arguments using string literals. It's also
simpler.
Differential Revision: https://phabricator.services.mozilla.com/D322682
AndroidHardwareBuffer::MergeFences() expects that sync_merge() consumes file descriptor. But It does not consume file descriptors.
Differential Revision: https://phabricator.services.mozilla.com/D325277
After the model returns a validated surface, fill in `favicon` on the
link items the catalog allows one on — SourceLink items (SourceLinks
component, Header.references, Highlights sources) and Card items — from
the favicons Places has already stored, resolving data-model bindings
the same way the validator does. The generation prompt instructs the
model never to set favicon itself; the browser supplies it here.
Security considerations:
- Hydration reads only the local Places DB; no network request is made.
- Model-supplied favicon values are dropped before hydration, so the
browser is the only favicon source. Places only has favicons for
sites the user has visited, so these images automatically count as
seen URLs and are not subject to further access control.
- Hydration runs after catalog validation and only writes a property
the catalog already allows on those items, so the surface stays
valid.
Differential Revision: https://phabricator.services.mozilla.com/D324698
- Refactors how we fetch and parse the default top sites JSON into a reusable utility function.
- The intention is that we will split initial_shortcuts.json to contain the default pinned sites such as Google and a new JSON for default sites that will be used as a backfill.
Differential Revision: https://phabricator.services.mozilla.com/D323484
Smart Form Fill's single extraction call in `SmartFormFillParent.#getPageText` passed `removeBoilerplate: false`, so menus, headers and footers were sent to the model verbatim for both the form's own page and each selected source tab. Because `MAX_PAGE_CONTENT_LENGTH` is split across the tabs and `sufficientLength` stops the DOM walk in document order, a boilerplate-heavy tab could exhaust its share of the budget before the walk reached content the model needs.
Set `removeBoilerplate: true`, matching `GetPageContent.#runExtraction` in Tools.sys.mjs. The option degrades safely: PageExtractorChild falls back to the full DOM walk when `isProbablyReaderable` fails, which is typical for the form's own page.
Differential Revision: https://phabricator.services.mozilla.com/D325057
Not a big deal but one less coverity issue
get_path constructed a std::stringstream directly from std::getenv("PATH"),
which is undefined behaviour when PATH is unset. Return an empty search path
instead.
Differential Revision: https://phabricator.services.mozilla.com/D325332
CloseButton takes its accessible name from an optional tooltip prop, and these
two panes were the only callers that never passed one. Making the prop required
stops the next caller repeating it.
The a11y_checks annotation this retires was filed as Bug 1849028.
Differential Revision: https://phabricator.services.mozilla.com/D325411
The contentAttributes facet is public, so this needs no bundle regeneration. The
name is overridable because not every consumer shows source code. The annotations
removed here were added by Bug 1849028.
Differential Revision: https://phabricator.services.mozilla.com/D325408
The XHR load and the 50ms timer the blackboxed round starts can land after its
`wait(100)`, and unblackboxing first lets the timer pause the thread. The next
round's navigation then runs "beforeunload" inside that pause, where
EnterDebuggeeNoExecute refuses the debuggee, so the breakpoint the test waits
for never hits and the test times out with the toolbox window leaked.
Bug 2070797 removed this test's macOS skips on the strength of a mechanism that
is not macOS-specific; that still wants a macOS debug rebuild push for a real
denominator.
Differential Revision: https://phabricator.services.mozilla.com/D325407
getFrameScopes dereferenced whatever getActorByID returned. ThreadFront unmanages
every frame front from before("resumed"), while the redux state learns of the
resume only once the thread state resource is notified, so paused() can reach
fetchScopes with a frame that validates against the state and has no front left.
An absent scope is the shape the rest of the pipeline already expects:
getMappedScopes documents a null, mockCommandClient resolves with one, and
buildOriginalScopes was the only place that assumed otherwise.
Differential Revision: https://phabricator.services.mozilla.com/D325044
git writes the working tree with one thread unless `checkout.workers` is set.
With one worker per core my testing shows checkouts 50% to 65% faster, both
locally and in CI. That covers the initial checkout after the clone and any
later checkout that moves HEAD across at least 100 files.
My local testing showed a switch between main and beta going from 23s to 14s.
It's possible for this setting to be a regression on niche hardware (slow hdds
or very few cores), so we only set it by default when it hasn't already been
set. A user can set `checkout.workers = 1` in the repo config or the global
config and they will opt out for good.
Differential Revision: https://phabricator.services.mozilla.com/D325266
Now that the parent identifies a child process's modules from the section
handle the child sends, and silently skips any handle it cannot identify,
we will need telemetry for how often that skipping happens. This patch
adds counters for that.
unverifiableLoads: the number of module loads in child processes where the DLL
blocklist hook reached the load but failed to duplicate the section handle.
rejectedSections: the number of module section handles a child process sent
to the parent that it refused as invalid module section handles.
The counters are per-process and are only ever incremented for child
processes, so the browser process reports zero for both. The counters are
reported by the process using the module, so their accuracy depends on
trusting the process itself. This is how the UntrustedModulesProcessor
has always worked, and is by design (for performance reasons).
Differential Revision: https://phabricator.services.mozilla.com/D324705
Check that ValidateAndResolveModuleSection rejects descriptors that are
non-IMAGE sections or are for below-medium-integrity modules.
Differential Revision: https://phabricator.services.mozilla.com/D324704
Child processes now report loaded DLLs to the parent by section HANDLE instead
of by filename. The DLL blocklist's NtMapViewOfSection hook already receives
the section a module is being mapped from, so it duplicates that section,
read-only, onto the ModuleLoadInfo for the load. The parent identifies the
module from the HANDLE.
Because the section outlives the view, this also fixes reporting for two kinds
of load: a module the blocklist rejected, which is unmapped immediately, and a
module unloaded before the parent processed the batch. Previously, either
could be deleted before the parent had a chance to consider them.
A handle cannot be forged into a reference to a different file and a child can
only send one it holds. ValidateAndResolveModuleSection sanity checks:
1. The section must map, and the view must be MEM_IMAGE. A data section can
be made over any openable file but an image section means the kernel
accepted the file as a PE and the child's image-load policy applied to it.
2. The file must not be on a remote device.
3. The file must not carry a mandatory integrity label below medium.
These checks replicate the checks of the MITIGATION_IMAGE_LOAD_NO_REMOTE and
MITIGATION_IMAGE_LOAD_NO_LOW_LABEL child sandbox behaviors. A child
can create a non-IMAGE section over any file it can open, so what it hands us
is not bounded by the image-load policy. The check avoid considering such
files at all. This currently applies to all child processes: content, gpu,
RDD, socket, utility (all kinds), and GMP. All have these sandbox mitigations.
Also fixes a couple of ways that a version resource could misuse VerQueryValueW's
output in the parent: a zero length underflowing to SIZE_MAX in
QueryStringValue and a too-short buffer dereference in GetFromImage.
Differential Revision: https://phabricator.services.mozilla.com/D324703
This reverts commit 1d22dc4916.
Revert "Bug 2070444 - Run artifact-build tasks on git-backed pushes, r=taskgraph-reviewers,jcristau" for causing build signing failures
This reverts commit 9bfd8889e8.
sqlite3_normalized_sql is only available for prepared statements, so
this specifically does not report on simple sql executions.
This does not remove the existing Legacy Telemetry reporting (yet).
Differential Revision: https://phabricator.services.mozilla.com/D321975
Use the current v4l2loopback control IDs. Repeat one green frame with GStreamer imagefreeze so the producer continues to supply frames while tests open and close the video device. The existing cleanup stops the producer.
Differential Revision: https://phabricator.services.mozilla.com/D325488
This avoids the need to create the `defined_name_##arg` constants which will
let us add support for named arguments using string literals. It's also
simpler.
Differential Revision: https://phabricator.services.mozilla.com/D322682
do_QueryFrame returns nullptr when the frame is not an nsMenuPopupFrame, but
the result was dereferenced unconditionally. The first child of a menu button
is not guaranteed to be a menupopup, so a11y state queries on such a button
could dereference null.
Differential Revision: https://phabricator.services.mozilla.com/D325329
This reverts commit df98b6d9d5.
Revert "Bug 2067259 - Update WPT metadata to reflect revised behavior. r=firefox-style-system-reviewers,emilio"
This reverts commit 2d8ea0cf9b.
Revert "Bug 2067259 - When FamilyName is used for font names in src:local(), force its syntax to be Quoted. r=firefox-style-system-reviewers,emilio"
This reverts commit 9b5381db88.
Revert "Bug 2067259 - Rework the criteria used to determine whether font-family names are quoted. r=firefox-style-system-reviewers,emilio"
This reverts commit 11750f08e2.
Record telemetry for the host of geo.provider.network.url as GLS, BeaconDB or
something else, and record that category in the geolocation.network_provider
labeled counter for every request the NetworkGeolocationProvider sends.
Differential Revision: https://phabricator.services.mozilla.com/D325201
The long line wraps over five rows on mac and Windows and six on Linux, so
browser_dbg-preview-wrapped-lines.js perma-failed on both and was turned off as
flaky. What it tests is the previews on a wrapped line, so it only needs to
know that the line wrapped; pinning the font does not make the count portable,
which D262814 measured with Ahem. The test drags the split box splitter, which
is not keyboard operable until Bug 1860733, so the fail-if that was sitting
commented out is now live and Bug 1860733 removes it.
Differential Revision: https://phabricator.services.mozilla.com/D325027
ObjectInspector turns focusable: false into onFocus: null, and Popup.js is its
only caller, so no item in the popup's tree ever becomes focused and
Tree._onKeyDown returns on its first line: a role="tree" that a click focuses and
every key ignores. Bug 2070909 names an active descendant only on a tree that
manages focus, so the popup's rows satisfy the keyboard focusability check only
once both have landed; Bug 2070909 removes the four annotations.
Differential Revision: https://phabricator.services.mozilla.com/D325022
Disabled for a `selectSource` timeout in Bug 1814093, and forward-ported as the
Bug 2028047 arm of the same skip. While it reported nothing, Bug 1911054 renamed
`getSelectedInlinePreviews` and dropped an `await`, and Bug 1843320 added a
location line to the "why paused" panel.
The test also clicks source tree and scopes rows, which are not reachable from
the accessibility API until Bug 2070909, so it is annotated for a11y_checks
until that lands and removes the annotation.
`rightClickObjectInspectorNode` waited for an object inspector node count change
that a right click never causes, so its poll ran on until shutdown holding the
toolbox window, which the window-leak check reports; it now only opens the menu.
Differential Revision: https://phabricator.services.mozilla.com/D325029
button.event-listener-expand holds only an arrow image, so it had no accessible
name and nothing exposed whether its category was open. Name it after the
category text shown beside it and add aria-expanded. head.js clicks this button
on every toggleEventBreakpoint(), which is what put "Interactive elements must
be labeled" behind the two Bug 1849028 annotations retired here. The tracer
sidebar's Bug 1924435 skip also fails on the tree defect, so Bug 2070909
retires that one.
Differential Revision: https://phabricator.services.mozilla.com/D325021
This avoids the need to create the `defined_name_##arg` constants which will
let us add support for named arguments using string literals. It's also
simpler.
Differential Revision: https://phabricator.services.mozilla.com/D322682
Mostly we're passing a bunch more tests now. The only "new" failure is because we don't implement
the ui-* generics, and therefore don't force things like (quoted) "ui-serif" to retain String syntax.
Differential Revision: https://phabricator.services.mozilla.com/D325337
Claude wrote the first draft of this quite a while ago. I went through and eyeballed that it looked mostly like the existing x86 implementation, and there are reasonable justifications for the differences. In particular, the difference between _mm_movemask_epi8 (which produces a 16-bit result with 1 bit per SIMD lane) and NeonMovemask (which produces a 64 bit result with 4 bits per SIMD lane) explains why we have (eg) `orMask & 0xf` vs `orMask & 0xffff` in Check4x4Chars. Note also that x86 support for sizeof(TValue) == 4 and sizeof(TValue) == 8 is only available in SIMD_avx2.cpp, whereas arm64 supports all sizes unconditionally.
I didn't spend much time reviewing the correctness of the underlying algorithms; I did that a lot for the initial landing, and we haven't had any problems with the x86 version, so I think we should be fine as long as the translation is right.
I also had a fresh instance of Claude review the patch. The main interesting point from its review was that our memchr implementation is competing against hand-tuned libc implementations. On x86 our primary competition is the Windows C runtime, which is (IIUC) less aggressively optimized, so Alex's benchmarking in bug 1776013 eventually convinced us that we should use our own memchr. That might not be true here. CI results were inconclusive, leaning if anything towards the default memchr being fastest. I'm conservatively disabling SIMD::memchr for now.
Codex's review didn't find anything else.
Differential Revision: https://phabricator.services.mozilla.com/D325185
Manually duplicating every task definition produced by a kind lets the copy
drift as the source changes. Test variants already avoid this for a single
test task, but a difference compiled into artifacts needs a separate build of
every task it affects.
Differential Revision: https://phabricator.services.mozilla.com/D320191
The android-gradle-build python tests run artifact builds, but
`mach artifact install` only searches the `.shippable` index for opt
builds. For each of the 50 candidate pushheads it looks up
`gecko.v2.autoland.shippable.revision.<rev>.mobile.android-<arch>-opt`.
Shippable Android builds aren't scheduled by default on autoland, so when
none of the last 50 autoland pushes ran a shippable build, the search
comes up empty, fails with "no built artifacts found", and every
artifact-build test in the suite fails at once. It passes only when one
of those 50 pushes happens to have a shippable Android build, which is
why it shows up as an intermittent.
Add a MOZ_ARTIFACT_ALLOW_NON_SHIPPABLE environment variable that makes
the index lookup fall back to the regular per-push opt build when no
shippable build is found, and set it for the android-gradle-build task.
The shippable index is still tried first, so branches that only publish
shippable builds (central, beta, release, esr) keep resolving to those.
Differential Revision: https://phabricator.services.mozilla.com/D324866
Bringing the engine up takes as long as loading the model's weights, so stop()
can land while the session is still initializing. The engine's abandoned init
then reached the page as "network", instead of the nomatch and end that
stopping a session owes it.
Differential Revision: https://phabricator.services.mozilla.com/D324937
Adds TestMFMediaSourceProtection, which builds an MFMediaSource the way
MFMediaEngineParent does and drives IMFTrustedInput against a mock CDM.
The failure this covers needs SL3000 hardware DRM and a licence server, so it
cannot be reached from a mochitest, but we can test it on gtest.
Differential Revision: https://phabricator.services.mozilla.com/D325211
The metadata log reported only the display size, and the media source summary
reported neither size, so both now carry the image and display size.
Differential Revision: https://phabricator.services.mozilla.com/D325210
When activation failed with `MF_E_TOPO_UNSUPPORTED` or
`MF_E_INCOMPATIBLE_SAMPLE_PROTECTION` we re-drove the protected pipeline
through the hardware-context-reset path, which closes every session with
reason `hardware-context-reset`. Per the EME specification that invites the
application to create new sessions and retry, so a conformant player retries
indefinitely. Netflix reported this as repeated `F7717-1273 (unexpected
hardware-context-reset)`.
Neither error is documented as transient. Microsoft publishes no guidance for
either code, and Chromium, which drives the same Media Engine and PlayReady
path, treats both as terminal and reserves hardware-context-reset for
`DRM_E_TEE_INVALID_HWDRM_STATE` alone. The retry could not have helped in any
case, because `ExternalEngineStateMachine::SetCDMProxy` does not re-send the
CDM proxy to the recreated engine, so the new engine never sets its media
source and never builds a topology.
The mechanism is left in place behind a pref so this can be flipped back on a
release branch if disabling it regresses something. Removing it belongs in a
follow-up.
Differential Revision: https://phabricator.services.mozilla.com/D325209
Bug 2022030 Part 5 (D287632) made `IsEncrypted()` return false on the clear
lead segment to reflect the real encryption status. That function also tells
Media Foundation whether the stream needs the protected media path, which a
clear lead still does because the encrypted part follows in the same stream.
The video descriptor was therefore marked `MF_SD_PROTECTED`, but the
`IMFInputTrustAuthority` Media Foundation asked for while resolving the
topology was refused with `MF_E_NOT_PROTECTED`. It cannot resolve a protected
branch without one, so the topology failed with `MF_E_TOPO_UNSUPPORTED`.
Reverting this makes clear lead PlayReady streams play on Netflix again.
Differential Revision: https://phabricator.services.mozilla.com/D325208
* Add asset property for sync error map and consolidate the getMessageCardForState logic
* Remove height and width from new svgs so they scale
Differential Revision: https://phabricator.services.mozilla.com/D321595
YAML reads a bare `no` as false, so the multilingual model's supported_locales
declared "False" instead of "no": a key the model's prompt dictionary does not
have, offered to language negotiation as if it were a tag. Requesting it
negotiated fine and then failed in parakeet_capi_stream_begin_lang. This
was failing to set an explicit language, and falling-back to
autodetection, which wasn't intended.
gen_speech_models.py now rejects a non-string locale rather than stringifying
whatever YAML handed it.
Differential Revision: https://phabricator.services.mozilla.com/D325362
The find bar's close button tooltip is only "Close find bar", so nothing in
the UI says that Escape closes the bar.
Escape is handled by a capturing keypress listener on the find bar element
itself, so it only closes the bar while focus is inside it. Following bug
1199929, the shortcut is advertised only while that holds: the tooltip
swaps between two Fluent ids as focus enters and leaves the bar.
The key name is hardcoded rather than looked up.
ShortcutUtils.getKeyString("VK_ESCAPE") would read it from
keys.properties, but that table has no per-platform variant and would
give capital "Esc" on macOS, where the existing Escape strings use
lowercase, and .properties is a legacy format. { $shortcut } does not
apply either -- there is no <key> element here, and this Escape
handling is not remappable.
This work was done with AI assistance; I have reviewed and can explain
every line.
Differential Revision: https://phabricator.services.mozilla.com/D320643
Unquoted field=value arguments break when the value contains shell glob
characters, e.g. a see_also URL with a query string.
Differential Revision: https://phabricator.services.mozilla.com/D325257
Mostly mechanical: `markdownlint-cli2 --fix` over the directories the md
linter covers (blank lines around fences and lists, list indentation, bare
URLs wrapped in angle brackets, stray spaces inside code spans).
A few spots needed to be fixed by hand because they were malformed in the
first place: reference links left dangling by the RST conversion in
ipc/docs/ipdl.md and devtools/docs/user/debugger-api/index.md, an `{image}`
directive whose options had escaped the fence in
docs/contributing/debugging/capturing_minidump.md, and text where a literal
asterisk or underscore was being parsed as emphasis.
Differential Revision: https://phabricator.services.mozilla.com/D315001
keyItem was default-constructed and only had data and len assigned, leaving
type indeterminate when it was handed to PK11_ImportSymKey. Use aggregate
initialization with siBuffer, matching the `SECItem empty = {siBuffer, nullptr,
0}` on the following line.
Differential Revision: https://phabricator.services.mozilla.com/D325327
* Add migration and enable sidebar.revamp in beta and release
* Remove show sidebar checkbox from the tab browsing section in about:preferences
* Fix sidebar bug where switcher label isn't showing if a tool isn't already saved in preferences
Differential Revision: https://phabricator.services.mozilla.com/D324600
The UI test was sometimes failing because it failed to verify that the normal tabs list is displayed.
To fix this, I've changed for waiting for the empty tabs list to not exist to waiting for the normal tabs list to exists.
I've also removed some redundant actions from the tests.
❗ This change also fixes **verifyTabsTrayGridViewTest** UI test
Both tests successfully passed 50x on Firebase ✅
Differential Revision: https://phabricator.services.mozilla.com/D325356
This reverts commit 62a4a5d638.
Revert "Bug 2062329 - Measure inference cost and init failures in the HWInference process. r=media-playback-reviewers,alwu"
This reverts commit 7783c6fb9e.
Revert "Bug 2062329 - Measure speech recognition latency in the content process. r=media-playback-reviewers,alwu"
This reverts commit 189550601a.
Revert "Bug 2062329 - Record speech recognition usage, outcomes and errors with Glean. r=media-playback-reviewers,alwu,TravisLong"
This reverts commit 39db08efe3.
Revert "Bug 2062329 - Add use counters for the SpeechRecognition API. r=dom-core-reviewers,webidl,smaug"
This reverts commit 84ede0b820.
The aarch64 task was already a cross build on the Intel b-osx-1015 workers, so neither build executes what it
compiles. build.py's --osx_arch only acts on a macOS host, so the Darwin cmake variables are passed directly,
the way build-llvm-common.sh does for compiler-rt, with linux64-clang-toolchain replacing the Mach-O
macosx64-clang and the mac cmake/ninja fetches. Deployment targets are set explicitly to Firefox's (10.15
x86_64, 11.0 arm64).
-fuse-ld=lld goes in the compile flags because cmake's try_compile checks, including the one behind
--enable_lto, don't inherit CMAKE_*_LINKER_FLAGS and would silently disable LTO. CMAKE_ASM_COMPILER_TARGET is
needed or the .S files are assembled for the host.
Differential Revision: https://phabricator.services.mozilla.com/D325157
macosx64-xz, macosx64-aarch64-xz and macosx64-aarch64-openssl never execute what they compile and already
fetch macosx64-sdk-toolchain, so they only need linux64-clang-toolchain instead of the Mach-O macosx64-clang,
plus --target/--host.
libtool picks its linker with its own PATH search rather than honoring -fuse-ld, so xz also gets LD=ld64.lld,
and -Wno-unused-command-line-argument keeps its -Werror configure probe from rejecting -fuse-ld. Both scripts
pin AR/RANLIB to llvm-ar/llvm-ranlib so the static archives get a symbol index.
pack.sh is now located via $GECKO_PATH: $(dirname $0) breaks on the Linux worker, which invokes scripts with a
path relative to the initial directory, once build-xz.sh has cd'd elsewhere.
Differential Revision: https://phabricator.services.mozilla.com/D325156
The win32 and aarch64 WindowsAppSDK repacks only unzip and re-tar an MSIX, exactly like the x86_64 one that
already runs on Linux; drop their Windows worker override.
Differential Revision: https://phabricator.services.mozilla.com/D325155
The macOS Android toolchains (JDK, SDK, arm64 AVD and arm64 system images) only download and repack upstream
archives, so they don't need a macOS worker. The JDK is downloaded for macOS/arm64 via new --os-name/--os-arch
overrides for android.py --jdk-only. sdkmanager selects packages by matching the host OS and CPU architecture,
so downloading the macOS/arm64 packages from this Linux/x86_64 host needs both REPO_OS_OVERRIDE=macosx and
-Dos.arch=aarch64. The AVD prewarm was already a no-op because arm64.json sets emulator_prewarm to false, and
system images are host-independent, so neither of those two repacks needs either override.
They were also in the TL Treeherder group despite targeting macOS arm64; move them to TMA64 to match the other
cross-built toolchains.
Differential Revision: https://phabricator.services.mozilla.com/D325154
This patch integrates the new hardware doc generation into perfdocs. It adds the ability to list all of our hardware info in the performance-infrstructure docs, and also provides links from the test documentation to it.
With this change, any new tasks with undocumented tools will trigger failures in perfdocs. Those pools will need to either be listed under an existing hardware type, or will need a new hardware section added for it.
Differential Revision: https://phabricator.services.mozilla.com/D323368
This patch adds a new class that will be used to gather, and build the documentation for hardware information across all performance tests. The existing content here is based on the platforms wiki found here: https://wiki.mozilla.org/Performance/Platforms
A new YAML file is added in the main perfdocs directory to track all the hardware along with their mapping to worker pools. The platform labels are gathered dynamically and added to these new docs so they don't need to be included in the YAML either. The new class is a singleton to make it simpler to use in multiple different places.
Differential Revision: https://phabricator.services.mozilla.com/D323367
The same-folder branch dereferenced `node` for `mBookmarkIndex` and passed it
to ReindexRange before reaching the null check that already guarded the rest of
the branch. `node` comes from FindChildById and is only known to be non-null
when it was returned, so move the existing assertion and check above the first
dereference rather than leaving them in the middle of the branch.
Differential Revision: https://phabricator.services.mozilla.com/D317484
This handles most of the directories, where the changes required do not affect tests outside of the browser/base/content/test directory.
Differential Revision: https://phabricator.services.mozilla.com/D323419
Automatic update from web-platform-tests
Mark XML fragments' scripts as already started.
HTML spec says: "If the parser was created as part of the XML fragment
parsing algorithm, then the element's already started must be set to true."
This CL does that. Also adds a test.
Bug: 542115030
Change-Id: Id3925fb343a8919d0c8f9dba7f71ccce31ec41c5
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/8356066
Reviewed-by: David Baron <dbaron@chromium.org>
Commit-Queue: Daniel Vogelheim <vogelheim@chromium.org>
Cr-Commit-Position: refs/heads/main@{#1694473}
--
wpt-commits: 56cbcaa233de2a233884ccfe07f6e626cc70a6c3
wpt-pr: 62560
Automatic update from web-platform-tests
[CSS] Support smooth text-decoration-thickness transitions
CSS Text Decoration requires `text-decoration-thickness` to animate by
computed value:
https://drafts.csswg.org/css-text-decor-4/#text-decoration-thickness-property
However, `text-decoration-thickness` was missing from both
LengthPropertyFunctions::GetLength() and `transition: all`,
so text thickness changed immediately instead of transitioning.
LengthPropertyFunctions::GetLength() extracts the value of
`text-decoration-thickness` from the computed style into a `Length`,
unless that value is `from-font`. Both `from-font` and `auto` keep
animating discretely.
Mark the property interpolable so it participates in `transition: all`.
Tests:
external/wpt/css/css-text-decor/animations/text-decoration-thickness-interpolation.html
external/wpt/css/css-text-decor/animations/discrete-no-interpolation.html
Bug: 361393675
Change-Id: Ic16c7077570ca242d61e6122a143256ad4acf242
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/8335028
Commit-Queue: Felipe Erias <felipeerias@igalia.com>
Reviewed-by: Kevin Ellis <kevers@chromium.org>
Reviewed-by: Rune Lillesveen <futhark@chromium.org>
Cr-Commit-Position: refs/heads/main@{#1694368}
--
wpt-commits: 047b14a0c3401e88571ef853942a6ea7581e4aef
wpt-pr: 62542
Automatic update from web-platform-tests
[gap-decorations] Fix crash with huge row gaps
When a row-gap offset saturated during grid fragmentation (due to a
value higher than LayoutUnit::Max), the spillover calculation could
produce an incorrect adjustment, due to the saturation hiding the true
distance past the edge. The adjustment persisted in the break token,
which corrupted later fragments and led to a null dereference.
Skip the adjustment when the gap offset is saturated. The difference
cannot be represented safely, and suppressing it avoids corrupting
subsequent fragments. Add a regression crash test.
Fixed: 542066231
Change-Id: I0489c0990f26ac3541397a90aff28790f57a0323
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/8349009
Commit-Queue: Javier Contreras <javiercon@microsoft.com>
Reviewed-by: Kurt Catti-Schmidt <kschmi@microsoft.com>
Cr-Commit-Position: refs/heads/main@{#1694366}
--
wpt-commits: 30e0b7899c8b1988d81296397413100f504d2651
wpt-pr: 62543
Automatic update from web-platform-tests
[scroll-axis-lock] Add basic tests for inheritance/animation.
Add tests to cover initial value, inheritance and discrete animation
type. Also add test for the invalid value "proximity" that was initially
considered in an early proposal.
Bug: 479472367
Change-Id: I109114965e2e312aacb263f157f73f347a722930
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/8352984
Commit-Queue: Frédéric Wang Nélar <fwang@igalia.com>
Reviewed-by: Robert Flack <flackr@chromium.org>
Cr-Commit-Position: refs/heads/main@{#1694355}
--
wpt-commits: cdba7c5a8588cfe67dfc2156704f8b074d76170b
wpt-pr: 62536
Automatic update from web-platform-tests
[compression-dictionary] Tweak server to follow RFC9842's "Vary" header requirement
Our tests currently add "Vary" headers to some resources in order to
make sure the test server fulfills the minimal requirement of
https://datatracker.ietf.org/doc/html/rfc9842#section-6.2. However, this
is not done for `compressed-data.py`, so fix that. Note that
fetch/compression-dictionary/resources/static/Makefile adds that header
but in general the script might not properly merge the headers when
a compressed output is later used as a dictionary, so add a comment about
to clarify that.
Bug: 522338661, 40255884
Change-Id: I6be14f7418cce81b4fafeecb2510dc4aaca9ade3
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/8163980
Commit-Queue: Frédéric Wang Nélar <fwang@igalia.com>
Reviewed-by: Patrick Meenan <pmeenan@chromium.org>
Cr-Commit-Position: refs/heads/main@{#1694354}
--
wpt-commits: f27884313681660c06919a389a9bba1d23bfbdd9
wpt-pr: 62531
Automatic update from web-platform-tests
[css-fonts-4] Update palette-mix() tests for recent changes spec changes (#62491)
Discussed in https://github.com/w3c/csswg-drafts/issues/14452
- Moved tests into css/css-fonts/parsing
- Updated computed value tests to include testing values with 1 and more than 2 components.
- Updated computed value tests to include testing values with interpolation method elided.
- Updated computed value tests to follow color-mix/CSS Value 5 mix function rules.
- Added specified value tests (palette-mix-valid.html)
- Added invalid value tests (palette-mix-invalid.html)
--
wpt-commits: 3a1177e6c76f1a7f854f3ae4b93a00835e171fad
wpt-pr: 62491
Automatic update from web-platform-tests
[WebAudio] Add tests and baseline failure for unaligned looping
This is Part 1 of a 2-part CL addressing crbug.com/553218226.
This CL introduces test coverage for looping AudioBufferSourceNodes
across boundary conditions, refactors the test suite using a factory
and generator paradigm to reduce boilerplate, and checks in the baseline
failure for unaligned buffer looping:
1. audiobuffersource-loop-continuous.html:
WPT test covering multi-cycle looping of unaligned buffer lengths
(65,201 frames) and grain duration boundaries.
2. audiobuffersource-loop-continuous-expected.txt:
Captures the existing trunk failure where frame 65,200 is duplicated
and frame 0 is skipped upon wrap.
3. AudioBufferSourceHandlerTest:
- Refactored test fixture to AudioBufferSourceHandlerTestBase with
shared ProcessOnAudioThread helper returning std::array.
- Introduced CreateAudioBuffer generator helper and
CreateEnvironmentWithBuffer factory helper, cutting boilerplate.
- LoopOffsetBeyondLoopEndPositiveRate: Tests clamping when
offset >= loopEnd.
- LoopOffsetBelowLoopStartPositiveRate: Tests intro playback before
loopStart.
- LoopSingleSampleBuffer: Tests 1-sample buffer looping without
division by zero.
- LoopInvertedBoundsFallbackToWholeBuffer: Tests fallback to whole
buffer when loopStart >= loopEnd per W3C §1.15.3.
- LoopNegativeRateBackwardWrap: Tests backwards looping with negative
playbackRate, including boundary wrap back to loopEnd.
- LoopingUnalignedBufferFractionalLoopEndInterpolation: Tests
fractional loopEnd interpolation.
- DISABLED_LoopingUnalignedBufferPrecision: Reproduction of
bug 553218226, to be re-enabled in Part 2.
- DISABLED_LoopingUnalignedBufferExplicitLoopEnd: Tests explicit
loopEnd = buffer.duration, to be re-enabled in Part 2.
- DISABLED_LoopingGranularityWrapPrecision: Granularity matrix
reproduction in AudioBufferSourceGranularityTest, to be
re-enabled in Part 2.
- DISABLED_VaryingRatesInterpolatedWrapPrecision: Rate 0.5 wrap
reproduction, to be re-enabled in Part 2.
TAG=agy
CONV=dcf17c2a-023a-4313-a7d5-deba45eca250
Bug: 553218226
Test: external/wpt/webaudio/the-audio-api/the-audiobuffersourcenode-interface/audiobuffersource-loop-continuous.html
Test: out/Release/blink_unittests --gtest_filter="*AudioBufferSource*"
Change-Id: I4262acd240362268b5a1dff20b8c6721e3c2d8bb
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/8333135
Reviewed-by: Michael Wilson <mjwilson@chromium.org>
Commit-Queue: Mahesh Kannan <kmaheshb@google.com>
Cr-Commit-Position: refs/heads/main@{#1694250}
--
wpt-commits: 9eac876da93ec14a01a1633087c15d4430330013
wpt-pr: 62482
Automatic update from web-platform-tests
Drop unneeded logging.basicConfig() calls, already handled within wpt.py
--
Raise on HTTP errors when downloading Android SDK cmdline-tools
download_and_extract() never checked the HTTP status code, so a 404
(or any other error) response body was written to disk and handed to
unzip, producing an opaque "End-of-central-directory signature not
found" failure instead of the actual cause.
--
Fix macOS Android SDK cmdline-tools download using wrong OS tag
`platform.system().lower()` returns "darwin" on macOS, matching the
supported OS check, but then the actual tag matching used "macosx",
causing it to silently fall through to the Linux cmdline-tools zip. To
avoid this, we rearrange the conditions to make the unsupported
platform error the fallback and not a separate branch.
The tag, had it ever been returned, was also wrong: the pinned
cmdline-tools version uses "mac".
--
Fix Android emulator setup crashing when ANDROID_USER_HOME is set
android.py previously set ANDROID_SDK_HOME, intending it as "the SDK
is installed here", but that isn't what it is: ANDROID_SDK_HOME is the
legacy (Android Studio <= 4.3) variable for the prefs/AVD root, not
the SDK install location.
This becomes even worse if ANDROID_USER_HOME is set in the user's
environemnt: if ANDROID_USER_HOME and ANDROID_SDK_HOME are both set
but point at different paths, avdmanager ends up outputting the
confusing and hard to action message "Can't locate Android SDK
installation directory for the AVD .ini file".
Thus, all we need to actually do is set ANDROID_SDK_ROOT, the variable
that actually means what its name suggests.
--
Pre-create the AVD directory before running avdmanager create avd
avdmanager only honors ANDROID_AVD_HOME as the AVD directory if that
directory already exists on disk, thus the the AVD lands somewhere
android.py does not expect, leading to start-android-emulator being
unable to find it.
--
Install a native arm64 Android image on arm64 hosts
Normalize CPU arch names to match canonical forms expected by
mozrunner and the Android emulator; mozrunner expects Firefox's
canonical build-config CPU name, and on macOS where uname returns
"arm64" and not "aarch64" it fell through to the 32-bit "arm" AVD.
The Android emulator's QEMU2 backend requires the AVD system image to
match the host architecture, thus we also add and install
AVD_MANIFEST_ARM64 (arm64-v8a system image, mozemulator-arm64 AVD) on
arm64 hosts instead.
--
wpt-commits: ed83091d791ef609b6aee574ebdf3c5a9e88409a, fd0a3fddff8490663c62b96c4cc37c08691ced24, 006e8ac86a1f56c5280eb31beb03952fc328491e, 2c53cd1bd03686cef080cdfc46c966e15869e782, 703cb532d9edd1637ceb03b7fc7c12420206c788, a7a7685c5c075830b999e1d0cd1277902abe4c0f
wpt-pr: 61730
Automatic update from web-platform-tests
Fix#51279: HTTP/2 port should be configured like any other port
This makes HTTP/2's port configuration comparable to the WebTransport
over HTTP/3 server, while still obeying the command line flags.
--
wpt-commits: 28c0e0b8a87f9d9775a3adef3ba596a30a47b98b
wpt-pr: 53779
Automatic update from web-platform-tests
make more pointerevents `touch-action` tests work with 800x600
Signed-off-by: Euclid Ye <yezhizhenjiakang@gmail.com>
--
wpt-commits: 0f3d7adfe0b0f8cebd7e911363f8810aec2a133b
wpt-pr: 62513
Automatic update from web-platform-tests
[css] Add 'before' keyword to scroll-snap-stop
Add the 'before' keyword to the 'scroll-snap-stop' property, guarded by
the CSSScrollSnapStopBefore runtime enabled feature.
Also update CSSParserFastPaths to recognize 'before' when the runtime
flag is enabled, and add a tentative web platform test for parsing.
Bug: 556233544
Change-Id: I5b14ebc68dfac83594373266f4e1c51e989553e4
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/8344868
Reviewed-by: Robert Flack <flackr@chromium.org>
Reviewed-by: Vladimir Levin <vmpstr@chromium.org>
Commit-Queue: David Liu <lcdavid@google.com>
Cr-Commit-Position: refs/heads/main@{#1694180}
--
wpt-commits: 4b2491428345116c0b4d94c5cb6b1467a1f31b81
wpt-pr: 62537
Automatic update from web-platform-tests
Fix flaky combined interest/command invoker web tests
In interestfor-command-invoker and menubar-interest-command-invoker, an
invoker element with both interestfor and command=toggle-popover was
configured with interest-delay: 100ms. When clickOn() runs in automated
tests, it first dispatches pointer moves over the element. If the
action sequence takes more than 100ms before dispatching the
pointerdown/up actions, the start delay expired and opens the popover
via interest. The subsequent click event triggered the toggle-popover
command on the already-open popover, toggling it closed and causing the
assertion to fail.
The tests only need the end delay (interest-delay-end) to be short to
quickly verify that loss of interest does not close a popover opened
via command. Fix this by setting interest-delay to "1000s 100ms",
providing a large start delay while preserving the 100ms end delay.
Fixed: 557681063, 558137248
Change-Id: I827cab079c8da5c267c0a41157af4eba4a1e9ab0
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/8373386
Commit-Queue: Mason Freed <masonf@chromium.org>
Auto-Submit: Mason Freed <masonf@chromium.org>
Reviewed-by: David Grogan <dgrogan@chromium.org>
Commit-Queue: David Grogan <dgrogan@chromium.org>
Cr-Commit-Position: refs/heads/main@{#1694179}
--
wpt-commits: 9386f5829dfcaa0988dad8c4e4813b5012ff4f4a
wpt-pr: 62539
Automatic update from web-platform-tests
[Masonry] Support row spanner fragmentation
Row spanners mostly already worked since they are only laid out in the
first lane they start in, and unlike columns, don't impact breaks in
subsequent rows.
However, row grid-lanes fragmentation used the immediately preceding
physical lane to determine whether a later row should wait for the next
fragmentainer. A row spanner adds non-start entries to every row it
covers, so that lane may appear complete even while the spanner's owning
lane still has a continuation.
Track completion only for items that start in each lane, and use the
previously processed lane when deciding whether an existing continuation
will resume later rows. This keeps row spanners associated with their
first row while allowing independent items in later rows to be processed
when their tracks begin in the current fragmentainer.
Bug: 343257585
Change-Id: I984981d27098ab42eecd7ea5df63623a04c3dbe9
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/8352700
Commit-Queue: Alison Maher <almaher@microsoft.com>
Reviewed-by: Morten Stenshorne <mstensho@chromium.org>
Cr-Commit-Position: refs/heads/main@{#1694076}
--
wpt-commits: 7ae93982098471da9c37a180dde9968166aa1a18
wpt-pr: 62538
Automatic update from web-platform-tests
[parser] Store stable element identity in adoption agency Bookmark
Previously, HTMLFormattingElementList::Bookmark stored a raw interior
Entry* pointer into the HeapVector<Entry> entries_ buffer.
During HTMLTreeBuilder::CallTheAdoptionAgency(), DOM operations (such
as reparenting the furthest-block in step 4.14) can synchronously
dispatch events when subtrees are detached, notably the pagehide event
on an iframe. An event listener could then call document.write(),
re-entering the parser and appending to active formatting elements.
This would reallocate the HeapVector and leave the Bookmark's raw
interior pointer dangling, leading to a UAF / use-after-poison write
when SwapTo() resumes.
This CL fixes the issue by:
1. Changing Bookmark to store a stable Element* reference instead of
an interior Entry* pointer into HeapVector storage.
2. Updating SwapTo() to resolve elements dynamically via ReverseFind(),
failing closed safely if re-entrant script cleared or modified the
list.
3. Removing the step 4.13.4 bookmark-regeneration workaround that
existed purely to work around Entry* vector shifts.
4. Validating that formatting_element and furthest_block remain in
OpenElements() after step 4.14 DOM insertion before continuing.
5. Adding a regression crashtest for re-entrant document.write() via
iframe pagehide.
Fixed: 557729858
Change-Id: I337a48aa7c0ad1d7fc0c08380b7df4864cb1cc39
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/8363808
Reviewed-by: Mason Freed <masonf@chromium.org>
Commit-Queue: Noam Rosenthal <nrosenthal@google.com>
Cr-Commit-Position: refs/heads/main@{#1693910}
--
wpt-commits: 7108d5cc4493efb6dc8c6b82fc3d91589e0ba9e6
wpt-pr: 62529
Automatic update from web-platform-tests
[Align] Parse `flow-start` and `flow-end` keyword
Parse the `flow-start` and `flow-end` keywords and ensure that they
evaluate to the same value as `start` and `end` when no placement
reversals are applied. The change is gated behind a separate flag from
grid lanes, since it will apply to all layout modes. We decided we
wanted those keywords in the resolution of this CSSWG issue [1].
A follow-up change will be needed to implement and test `flow-start` and
`flow-end` when `fill-reverse` and `track-reverse` are applied, as well
as for using the `kFlowStart/End` keyword in the code instead of
`kFlexStart/End`.
Copies of tests were added in both the `css-flex` and `css-align`
folders.
[1] https://github.com/w3c/csswg-drafts/issues/14052
Bug: 343257585, 555299635
Change-Id: I5dc0707fbcfeff3674d1884aaf38afa1c9e860fa
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/8307932
Reviewed-by: Alison Maher <almaher@microsoft.com>
Commit-Queue: Celeste Pan <celestepan@microsoft.com>
Cr-Commit-Position: refs/heads/main@{#1693943}
--
wpt-commits: 272061587f284327e2f620b29c6444e7a193f628
wpt-pr: 62469
Automatic update from web-platform-tests
Delete Top-Level Storage Access API Web Platform Tests
Following the deprecation and removal of document.requestStorageAccessFor
(crrev.com/c/8261139), this CL removes the obsolete Web Platform Tests
and associated test expectations and filter entries:
- Delete external/wpt/top-level-storage-access-api/
- Delete external/wpt/html/anonymous-iframe/requestStorageAccessFor.tentative.https.window.js
- Clean up skip entries in NeverFixTests
- Clean up entries in TestLists/chrome.filter and TestLists/rel-ready.blink_wpt_tests.filter
- Clean up entries in FlagExpectations/surface-embed
Bug: 551997654
TAG=agy
Change-Id: I21dbea5c42678c9cb00e98119db11e747fb29239
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/8361509
Auto-Submit: Johann Hofmann <johannhof@chromium.org>
Commit-Queue: Chris Fredrickson <cfredric@chromium.org>
Reviewed-by: Chris Fredrickson <cfredric@chromium.org>
Cr-Commit-Position: refs/heads/main@{#1693930}
--
wpt-commits: b46e71b2f22c73fbcecaf26009e3082fddbaa744
wpt-pr: 62532
Automatic update from web-platform-tests
Changed TrustedParserOptions to an empty TrustedHTMLParserOptions
As part of recent spec review.
R=vogelheim
Bug: 491743369
Change-Id: Ia03a2b1e27b40684d60f673036a4f4914c93ed16
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/8361511
Commit-Queue: Mike Taylor <miketaylr@chromium.org>
Auto-Submit: Noam Rosenthal <nrosenthal@google.com>
Reviewed-by: Mason Freed <masonf@chromium.org>
Reviewed-by: Mike Taylor <miketaylr@chromium.org>
Cr-Commit-Position: refs/heads/main@{#1693835}
--
wpt-commits: 1fad8a9882fb980dbcf9b997a899adf7b465c386
wpt-pr: 62530
Automatic update from web-platform-tests
Add tests for invalidly nested heading nodes (#43874)
* add nested heading tests
* add parity checks for parsing error correction and accname accumulations
* reset aria-utils and relocate heading-related functions
* refactor ancestor role tests to check computed role
* reorganize tests to ease parity comparisons
* identify test as tentative
* add new subtest for heading impostors
* move failing subtests into tentative test
* replicate passing subtests back into main test
* remove tentative test
--
wpt-commits: 0dc7683798d856f39fe0ade75300e4d64929a1ea
wpt-pr: 43874
Automatic update from web-platform-tests
Store container selector cache in ContainerQueryList
The selector cache maps each container selector to its resolved
container element, reducing container lookup from O(N) in tree
depth to O(1) once the cache is set.
Hold the cache on each ContainerQueryList instance and use it when
evaluating the query list. The cache is not used while the element
is in a display:none subtree.
Invalidate the cache when the resolved container may change:
- A style change affects container query evaluation
(DiffAffectsContainerQueries). This bumps a controller cache
generation, invalidating all caches.
- The element's layout tree is detached. This invalidates the caches
of the lists on that element.
A local microbenchmark reading matches on 500 lists under a 1000-deep
ancestor chain:
---Before---
Time:
avg 8.175000011920929 ms
median 8.149999976158142 ms
stdev 0.19432745050615563 ms
min 7.800000071525574 ms
max 8.600000023841858 ms
---After---
Time:
avg 1.0600000083446501 ms
median 1.0499999523162842 ms
stdev 0.1698296159003472 ms
min 0.8999999761581421 ms
max 1.6999999284744263 ms
Bug: 40887402
Change-Id: I38d4be957c61067d615046dddc41487fa97c7d1a
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/8255022
Commit-Queue: Seokho Song <seokho@chromium.org>
Reviewed-by: Rune Lillesveen <futhark@chromium.org>
Cr-Commit-Position: refs/heads/main@{#1693827}
--
wpt-commits: 7926f3ca1cd9f7f1df88db0bb0cee14f278a559b
wpt-pr: 62527
Automatic update from web-platform-tests
OOR-CORS: Avoid CorsURLLoader restart on redirect
CorsURLLoader previously restarted requests from scratch via
StartRequest() on redirects requiring CORS or preflights. This destroyed
the underlying URLRequest redirect history, causing Fetch Metadata
headers (e.g. Sec-Fetch-Site) to be incorrectly computed.
This CL introduces base::Feature kAvoidCorsURLLoaderRestartOnRedirect
(enabled by default) to handle redirects in-place via
network_loader_->FollowRedirect() and update headers directly. If a
redirect requires a CORS preflight, CorsURLLoader runs the preflight
asynchronously without tearing down the active loader.
Key changes:
- In-place redirect and preflight handling in CorsURLLoader under
kAvoidCorsURLLoaderRestartOnRedirect.
- Strict validation of redirected URLs and origin permissions via
OriginAccessList for credentials and client certificates.
- WHATWG Fetch compliant credential handling across cross-origin
redirects.
- Parameterized test coverage for both in-place and legacy restart
paths.
Bug: 513518289
Change-Id: Ic250535f64bf316df656d6cbe29e27cdbac7272a
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/8278433
Reviewed-by: Kenichi Ishibashi <bashi@chromium.org>
Commit-Queue: Takashi Toyoshima <toyoshim@chromium.org>
Cr-Commit-Position: refs/heads/main@{#1693621}
--
wpt-commits: cbe79fa305818bc3adc21500db2ded241c887aee
wpt-pr: 62515
Automatic update from web-platform-tests
Roll jxl: 0.6.0 => 0.7.1 in //third_party/rust
This CL has been created semi-automatically. The expected review process
and other details can be found at //tools/crates/create_update_cl.md.
Updated crates:
* jxl: 0.6.0 => 0.7.1; https://docs.rs/crate/jxl/0.7.1
* jxl_macros: 0.6.0 => 0.7.1;
https://docs.rs/crate/jxl_macros/0.7.1
* jxl_simd: 0.6.0 => 0.7.1;
https://docs.rs/crate/jxl_simd/0.7.1
* jxl_transforms: 0.6.0 => 0.7.1;
https://docs.rs/crate/jxl_transforms/0.7.1
Update the Chromium integration for the 0.7 API changes, including
thread-count reporting, ordered parallel task scheduling, fallible
pixel-format setup, and the new dithering table input. Update affected
JPEG XL progressive web test tolerances.
Version 0.7.1 includes https://github.com/libjxl/jxl-rs/pull/947, which
moves large static data behind boxes to avoid a binary size regression.
Bug: None
Change-Id: Ida280ae6f3d5b1050175af2d18ac22a68fd3448a
Binary-Size: Size increase is unavoidable
Fuchsia-Binary-Size: Size increase is unavoidable.
Disable-Rts: True
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/8366384
Reviewed-by: Luca Versari <veluca@google.com>
Reviewed-by: Kent Tamura <tkent@chromium.org>
SLSA-Policy-Verified: SLSA Policy Verification Service <devtools-gerritcodereview-exitgate@google.com>
Commit-Queue: Helmut Januschka <helmut@januschka.com>
Reviewed-by: Łukasz Anforowicz <lukasza@chromium.org>
Cr-Commit-Position: refs/heads/main@{#1693573}
--
wpt-commits: a5efc221a1f71f22df7e6e61c5531e93e8589e5d
wpt-pr: 62510
Automatic update from web-platform-tests
Stabilize text-combine-upright-compression reftests
These tests use a custom font. The screenshot was taken before the font
finished loading, so the page first rendered with a fallback font.
This CL adds reftest-wait so the screenshot waits until the font is
ready. A small 1px difference still remains, so this also adds a fuzzy
match.
Bug: 40527323
Change-Id: I58c2400e868b40cb3d25e770ccc62e090f365c9a
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/8357089
Commit-Queue: Hyowon Kim <hyowon@igalia.com>
Reviewed-by: Koji Ishii <kojii@chromium.org>
Cr-Commit-Position: refs/heads/main@{#1693486}
--
wpt-commits: 28380411f7ec46e8c2e5e4f8c603c51188aeeddd
wpt-pr: 62509
Automatic update from web-platform-tests
Check is_shutting_down_ in PipeToEngine::ReadRequestChunkStepsBody
When a WritableStream errors during pipeTo with preventCancel: true,
WritableError schedules a microtask that shuts down the pipe and
releases the writer lock. If a chunk is enqueued to the ReadableStream
in the same tick, ReadRequestChunkStepsBody runs in a subsequent
microtask. Without checking is_shutting_down_, it attempts to write to
the released writer, triggering a CHECK(stream) crash.
Bail out early from ReadRequestChunkStepsBody if is_shutting_down_ is
true, matching the Streams Standard requirement that no writes be
initiated after shutdown has begun.
TAG=agy
CONV=ed3e939c-7110-4854-b07e-e1c1faad30db
Bug: 556160930
Change-Id: Ic86ca5f52534e349076c8dfde93a70524439f958
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/8351108
Reviewed-by: Nidhi Jaju <nidhijaju@chromium.org>
Commit-Queue: Adam Rice <ricea@chromium.org>
Cr-Commit-Position: refs/heads/main@{#1693472}
--
wpt-commits: 27c8d8bee624b851f2ab7cd6c32ad07fc19f3007
wpt-pr: 62497
Automatic update from web-platform-tests
[CE[ Use HasTagName for tag checks in HTMLCapabilityElementBase
HTML elements created with an XML namespace prefix (such as via
createElementNS) retain a prefix in their QualifiedName. Direct equality
comparisons using TagQName() == html_names::kInstallTag evaluate to
false due to the prefix difference, preventing tag-specific logic from
matching.
Replace direct QualifiedName comparisons with HasTagName() across
HTMLCapabilityElementBase. This ensures subframe and sandbox state
validation correctly handles prefixed install elements.
Fixed: 517366426
Change-Id: Ib1a96940975207c5d23ec789745d0fdc7e8f9550
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/8364205
Reviewed-by: Rune Lillesveen <futhark@chromium.org>
Commit-Queue: Thomas Nguyen <tungnh@chromium.org>
Cr-Commit-Position: refs/heads/main@{#1693416}
--
wpt-commits: cb3918a1725342ff9e0876558383723833ee6e5b
wpt-pr: 62507
Automatic update from web-platform-tests
[Sanitizer] Fix initialization of default PI allow/remove lists.
Observe the |allowCommentsPIsAndDataAttributes| flag when initializing
a Sanitizer config with neither allow- nor remove-lists for PIs.
Also fix the test case which had malformed test data. This caused the
test to silently fail and hide the bug.
Ref: https://html.spec.whatwg.org/multipage/dynamic-markup-insertion.html#canonicalize-the-configuration, step 3.*
Fix: 556213916
Change-Id: I80950f53de418f4d2478dfc795fa7364d1435c08
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/8352664
Commit-Queue: Daniel Vogelheim <vogelheim@chromium.org>
Reviewed-by: Noam Rosenthal <nrosenthal@google.com>
Cr-Commit-Position: refs/heads/main@{#1693355}
--
wpt-commits: 47287651c23621ce276cae0dc1a437ab705fb92a
wpt-pr: 62477
Automatic update from web-platform-tests
[PEPC] Disallow container-type, container-name, and contain-intrinsic*
container-type: size enables size containment, which causes the
element's fit-content width to resolve from contain-intrinsic-width
instead of the user-agent controlled shadow-DOM label. The width bounds
applied in AdjustStyle() are expressed as calc-size(fit-content, k *
size), so an author-supplied intrinsic width can replace the label width
those bounds are meant to track, allowing clickjacking boundaries to be
bypassed.
Since contain is already disallowed, remove
valid_for_permission_element: true from container-type, container-name,
and contain-intrinsic-* (width, height, inline-size, block-size, size)
as well.
Fixed: 514061289
Change-Id: I09daff39d72a39da4ebe687bd33b0a9d37fae9dc
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/8363545
Reviewed-by: Rune Lillesveen <futhark@chromium.org>
Commit-Queue: Thomas Nguyen <tungnh@chromium.org>
Cr-Commit-Position: refs/heads/main@{#1693346}
--
wpt-commits: 6a9ec55672f8bdda04f8ae619d52c2f798ab9eeb
wpt-pr: 62506
Automatic update from web-platform-tests
Revert "Fix WebAssembly.Module messaging with AudioWorklet"
This reverts commit 4b8042b1960f0fdc9eafb3ace18fb951628bb8c3.
Reason for revert: Causing CI failure
Failure Link: https://ci.chromium.org/ui/p/chromium/builders/ci/Win10%20Tests%20x64%20(dbg)/55231/overview
Original change's description:
> Fix WebAssembly.Module messaging with AudioWorklet
>
> Worklets have opaque origins but share their creator's agent cluster.
> Use the creator document's origin for Chromium's additional same-origin
> check when an AudioWorklet message requires it only for WebAssembly
> modules.
>
> Keep strict same-origin checks for File System Access handles, including
> mixed messages, and retain the agent-cluster check. Add WPT and unit
> coverage for the global and processor ports and rejection cases.
>
> Bug: 40210558
> Change-Id: I556705cbd7491eec71e7e6a060eada9b77ace87d
> Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/8334848
> Reviewed-by: Hongchan Choi <hongchan@chromium.org>
> Commit-Queue: Aaron Teo <hocheung@chromium.org>
> Reviewed-by: Jeremy Roman <jbroman@chromium.org>
> Cr-Commit-Position: refs/heads/main@{#1692867}
Bug: 40210558
Change-Id: I8920bffbd1ccb61564c7a312eb18a98da47a4654
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/8365744
Owners-Override: Jiacheng Guo <gjc@google.com>
Bot-Commit: rubber-stamper@appspot.gserviceaccount.com <rubber-stamper@appspot.gserviceaccount.com>
Commit-Queue: Jiacheng Guo <gjc@google.com>
Cr-Commit-Position: refs/heads/main@{#1693158}
--
wpt-commits: 0312887a72b0592da8fa7a2244256e5da96d5e30
wpt-pr: 62499
Automatic update from web-platform-tests
[CSS] Handle color-mix() and palette-mix() percentages adding up to zero
When the two percentages of color-mix() add up to zero, CSS Color 5
specifies a progress percentage of 0.5 and an alpha multiplier of 0,
so the result is transparent.
https://www.w3.org/TR/css-color-5/#color-mix-resulthttps://github.com/w3c/csswg-drafts/issues/14013
CSS Fonts 4 applies the same rules to palette-mix().
https://www.w3.org/TR/css-fonts-4/#font-palette-prop
Blink rejected color-mix() and palette-mix() at parse time when both
percentages were literally `0%`. When the zero sum came from calc()
instead, the values parsed but percentage normalization reported
failure. Then color-mix() went on with a progress percentage of 0,
and palette-mix() was replaced by the normal palette, as if the value
had not been specified.
Remove the parse-time rejection. Make
CSSColorMixValue::NormalizePercentages() always produce a progress
percentage and an alpha multiplier, using 0.5 and 0 for a zero sum. Keep
a palette mix with equal endpoints when the alpha multiplier is not 1,
as collapsing it into a single palette would drop the multiplier.
Tests:
external/wpt/css/css-color/parsing/color-valid-color-mix-function.html
external/wpt/css/css-color/parsing/color-computed-color-mix-function.html
StyleBuilderConverterTest.ResolveColorValue_ZeroCombinedPercentage
StyleBuilderConverterPageTest.PaletteMix_ZeroCombinedPercentage
Bug: 445726759
Change-Id: I79682e00f313722a09f3a9a337aac4eabd0cb0c6
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/8337347
Commit-Queue: Felipe Erias <felipeerias@igalia.com>
Reviewed-by: Anders Hartvoll Ruud <andruud@chromium.org>
Reviewed-by: Kevin Babbitt <kbabbitt@microsoft.com>
Reviewed-by: Rune Lillesveen <futhark@chromium.org>
Cr-Commit-Position: refs/heads/main@{#1693091}
--
wpt-commits: 16cc06485392b22d0c96dc54d290480dfac2d695
wpt-pr: 62494
Automatic update from web-platform-tests
[webdriver] Test same-URL navigation replaces the current history entry
See https://github.com/whatwg/html/pull/12824
--
wpt-commits: e6d42a5ffcc6d6a4f66401ecaadd21f2c688ddbe
wpt-pr: 62160
Automatic update from web-platform-tests
Test an SVG image with a height of 0 and no width
See https://github.com/WebKit/WebKit/pull/73144.
--
wpt-commits: 92054a74d0c6a1ed2e9024d71ebf2880f2af02e2
wpt-pr: 62512
Automatic update from web-platform-tests
script: Return actual placeholder container element if it exists.
Signed-off-by: Josh Matthews <josh@joshmatthews.net>
--
wpt-commits: 4e8c9d131c21e82e33547583336bded759c4a5bd
wpt-pr: 62416
Automatic update from web-platform-tests
script: Fix crash when first child of head is selected for delete
Fixes a crash observed when combined with keybinding support. This
is also tested in various ways in
`delete-in-child-of-head.tentative.html`, but requires quite a bit
of machinery. The new test is more straightforward and uses fewer
features, in line with WPT philosophy.
Part of #25005
Testing: new WPT crash test
Signed-off-by: Tim van der Lippe <tvanderlippe@gmail.com>
--
wpt-commits: 54a8e7cf9336b35f3153e04c10aa5586db69e2ee
wpt-pr: 62432
Automatic update from web-platform-tests
make a few `touch-action` pointerevents tests work under 800x600
Signed-off-by: Euclid Ye <yezhizhenjiakang@gmail.com>
--
wpt-commits: 243110c04f0911a6dbaaac6f537780bd522641f3
wpt-pr: 62498
Automatic update from web-platform-tests
Add test to ensure that different calls don't modify the baseline configuration (#62484)
--
wpt-commits: 0968c868d8095217d18d86b34c7f21dccae58768
wpt-pr: 62484
Automatic update from web-platform-tests
Add parser tests for the form element pointer and template
See https://github.com/whatwg/html/issues/12257
--
wpt-commits: 17d68806f7be968ed38196f068db03fb3a5dff2a
wpt-pr: 62488
Automatic update from web-platform-tests
Add parser tests for template and the frameset-ok flag
See https://github.com/whatwg/html/issues/3178.
--
wpt-commits: bc92608bb08e48ca548ada1a31dbdcad71478b94
wpt-pr: 62485
Automatic update from web-platform-tests
Fix WebAssembly.Module messaging with AudioWorklet
Worklets have opaque origins but share their creator's agent cluster.
Use the creator document's origin for Chromium's additional same-origin
check when an AudioWorklet message requires it only for WebAssembly
modules.
Keep strict same-origin checks for File System Access handles, including
mixed messages, and retain the agent-cluster check. Add WPT and unit
coverage for the global and processor ports and rejection cases.
Bug: 40210558
Change-Id: I556705cbd7491eec71e7e6a060eada9b77ace87d
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/8334848
Reviewed-by: Hongchan Choi <hongchan@chromium.org>
Commit-Queue: Aaron Teo <hocheung@chromium.org>
Reviewed-by: Jeremy Roman <jbroman@chromium.org>
Cr-Commit-Position: refs/heads/main@{#1692867}
--
wpt-commits: b89af32bc8f42d678f444eb0703bca015ddcf240
wpt-pr: 62470
Automatic update from web-platform-tests
[layout] Don't compute borders for sections/rows.
Internal table elements (rows, row groups, header/footer groups)
shouldn't have borders on their fragments.
When an out-of-flow positioned descendant inside a fragmented context
queried the containing block's fragment borders, it would contract a
potentially 0-sized table row/section fragment by these borders,
resulting in a negative containing block size.
Fixed: 514535250
Change-Id: I04ff07e99380effdb5735b4a3e947bbf3588cf7b
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/8355633
Reviewed-by: Alison Maher <almaher@microsoft.com>
Commit-Queue: Ian Kilpatrick <ikilpatrick@chromium.org>
Cr-Commit-Position: refs/heads/main@{#1692857}
--
wpt-commits: b09f5cdca2bec4e3095a0dedc2e5d62102252de3
wpt-pr: 62479
Automatic update from web-platform-tests
Add regression test for crbug.com/552159676
Add a web platform test that verifies that the expression `new
WebSocket(url, undefined, {})` does not throw.
The change https://crrev.com/c/8197225 changed the behavior of this
expression even though it was intended to preserve existing behavior
when the flag was not set. So the test is also added to the
virtual/stable configuration to stop the same regression happening
again.
Modify the "protocol_array" WebSocket handler to not crash when no
subprotocol is specified so that the test will still pass even with the
WebSocketOptionBag Blink feature enabled.
No behavior change.
BUG=552159676
Change-Id: Id83238ada57d5d48bf21880546fa86df19a3e3c9
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/8317547
Reviewed-by: Dominic Farolino <dom@chromium.org>
Commit-Queue: Adam Rice <ricea@chromium.org>
Reviewed-by: Nidhi Jaju <nidhijaju@chromium.org>
Cr-Commit-Position: refs/heads/main@{#1692775}
--
wpt-commits: e207ce80ef256418e5b6b3c7f184dc427d1d8575
wpt-pr: 62454
Automatic update from web-platform-tests
Make coord-box offset-path follow corner-shape
ApplyMotionPathTransform() built the path for offset-path: border-box
(and other coord-box values) from a BasicShapeInset using only the
containing block's border-radius, so corner-shape was ignored and the
motion path always traced rounded corners. Build the path from
ContouredBorderGeometry::ContouredBorder() instead, which produces the
identical rounded-rect path when the corner curvature is round and the
contoured (bevel/scoop/notch/squircle) path otherwise, matching the
painted border contour.
Bug: 525581076
Change-Id: I91ab6bf2b122397b122e3223fd7fcf44a998aac3
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/8346030
Commit-Queue: Helmut Januschka <helmut@januschka.com>
Reviewed-by: Noam Rosenthal <nrosenthal@google.com>
Auto-Submit: Helmut Januschka <helmut@januschka.com>
Cr-Commit-Position: refs/heads/main@{#1692754}
--
wpt-commits: eee69bd6491969fcbce67cf22f467ab9a5b285b1
wpt-pr: 62458
Automatic update from web-platform-tests
[html-in-canvas] Fire paint events in reverse document order
Canvas paint events need to fire on descendant canvases before their
ancestors. The explainer has been updated to state that "`paint` events
fire in reverse document order, and in reverse tree order within each
document", and this patch implements this new behavior.
See: https://github.com/WICG/html-in-canvas/pull/164
Fixed: 556304549
Change-Id: I3d74eedb413d862cc35c7cc3c930de1f213898b9
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/8351250
Reviewed-by: Stefan Zager <szager@chromium.org>
Commit-Queue: Stefan Zager <szager@chromium.org>
Auto-Submit: Philip Rogers <pdr@chromium.org>
Cr-Commit-Position: refs/heads/main@{#1692750}
--
wpt-commits: bffb67c057d61153a89c2a6d76fd6f6a98fd00fb
wpt-pr: 62478
Automatic update from web-platform-tests
Avoid precision loss when encoding linear float16 canvases
When encoding images from a linear float16 canvas (using toBlob,
toDataURL, or convertToBlob), converting directly to 8-bit linear
integers produces quantization artifacts at dark values (e.g. an
sRGB-value gradient with 256 stops will only produce 183 unique output
values).
Add ImageEncoderUtils::GetColorInfoForEncoder to select an
appropriate non-linear encoding color space (sRGB transfer function)
when serializing linear float16 canvases, and ensure premultiplied alpha
is converted to unpremultiplied alpha upfront. Include a gfx::HDRMetadata
parameter which we can use, in the future, to select between sRGB and PQ.
Apply this conversion in CanvasAsyncBlobCreator and ImageDataBuffer's
StaticBitmapImage constructor. Log a warning in ImageDataBuffer(SkPixmap)
if callers higher in the stack have not already performed any necessary
conversion.
Add WPT tests for toBlob, toDataURL, and convertToBlob with both JPEG
and PNG formats across HTMLCanvasElement and OffscreenCanvas.
TAG=agy
CONV=6afb9a4e-b9e1-4c5a-9273-c80de68abad8
Bug: 454152417
Change-Id: Ifb6a25195e0cb39c80cabf00fab2ee39f6db8fcf
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/8342747
Reviewed-by: Florin Malita <fmalita@chromium.org>
Commit-Queue: ccameron chromium <ccameron@chromium.org>
Cr-Commit-Position: refs/heads/main@{#1692722}
--
wpt-commits: 9b965429d81f9f0eab13f47c20c0e6a4f88c67b3
wpt-pr: 62475
Automatic update from web-platform-tests
Do not close command-invoked popovers on loss of interest
When an invoker has both command and interest invoker attributes (e.g.
commandfor and interestfor), opening the popover via the command
invoker should not cause the popover to close when the button or
popover subsequently loses interest.
Previously, Element::InterestLost unconditionally hid the target
popover on loss of interest, regardless of how it was opened.
This CL introduces a PopoverInvokedVia enum to PopoverData to track how
the popover was invoked (kNone, kInterest, or kCommand).
Element::InterestLost now only hides popovers that were invoked via
interest.
If a popover opened via interest is subsequently invoked via a command
(such as show-popover or menu activation), its invocation status
upgrades to kCommand and its invoker is updated so that it persists
when interest is lost.
Fixed: 556283651
Bug: 406566432
Change-Id: Ibf92fa4c837b9a4640b66aca6febdd1d35fb04fe
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/8344388
Reviewed-by: David Baron <dbaron@chromium.org>
Commit-Queue: Mason Freed <masonf@chromium.org>
Auto-Submit: Mason Freed <masonf@chromium.org>
Cr-Commit-Position: refs/heads/main@{#1692665}
--
wpt-commits: d6328700c6601806db16fc87bfe37bf32514f972
wpt-pr: 62473
Automatic update from web-platform-tests
Fuzzy matching for corner-shape tests
Increase maxDifference to make tests match in Chrome.
Numbers based on wpt.fyi results.
Bug: 555826997, 557075192
Change-Id: Iada20c7b0303f6d3de3a94bd7285ae729c86c78e
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/8352705
Auto-Submit: Rune Lillesveen <futhark@chromium.org>
Commit-Queue: Philip Rogers <pdr@chromium.org>
Reviewed-by: Philip Rogers <pdr@chromium.org>
Cr-Commit-Position: refs/heads/main@{#1692606}
--
wpt-commits: 21420d4c0d4b260cc110cbfe350eebb3395d92d7
wpt-pr: 62474
Automatic update from web-platform-tests
[Masonry] Support fragmented column spanners
Column grid-lanes fragmentation previously walked each lane
independently. A spanner could therefore be visited before earlier items
in all of its occupied lanes had been processed, or be treated as
unstarted again after resuming from a child break token. Breaks inside a
spanner also only blocked its start lane, allowing later content from
another occupied lane into the current fragmentainer.
Make the iterator defer column spanners until all preceding items across
their span have been visited. Resumed spanners advance each occupied
lane past its shared entry, and a fragmented spanner defers later
content in its complete span. Row spanners will be handled in a follow
up.
There is a new crashing test, but this should be fixed once we support
break rule handling in grid lanes.
Bug: 343257585
Change-Id: I36ab0ecaa1eb8d2cb70062609cb2bd8f3112def3
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/8349061
Reviewed-by: Morten Stenshorne <mstensho@chromium.org>
Commit-Queue: Alison Maher <almaher@microsoft.com>
Cr-Commit-Position: refs/heads/main@{#1692557}
--
wpt-commits: c9b23530118915a2eaa34cbe9c33fc3fefb7ae41
wpt-pr: 62461
Automatic update from web-platform-tests
Adopt webvtt-test.css and webvtt-ref.css in more webvtt wpt tests (#61482)
--
wpt-commits: c29bd2aeeb937753c3b946a3670b24e5dfb62f88
wpt-pr: 61482
Automatic update from web-platform-tests
Update several WebVTT tests to use shared css files and fix any tests that do not match spec (#61740)
--
wpt-commits: d451b2ba2000b1ec27de64318bcbc3c6254c1c16
wpt-pr: 61740
Automatic update from web-platform-tests
[Proofreader] Re-enable Proofreader WPT tests (#62029)
Unskips external/wpt/ai/proofreader/* across AIExpectations_Manifest*
and re-enables the includeCorrectionTypes test case now that the
dedicated small expert model component is configured.
Follows https://crrev.com/i/9691777.
Bug: 446717936
Change-Id: I5cdabe0acd916ca307faad0b4c5a5bd8f8c8e5f5
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/8262246
Reviewed-by: Reilly Grant <reillyg@chromium.org>
Commit-Queue: Isaac Ahouma <iahouma@google.com>
Cr-Commit-Position: refs/heads/main@{#1681719}
Co-authored-by: Isaac Ahouma <iahouma@google.com>
--
wpt-commits: 972e0e100fa754629cd00e549d6fa20a243af2bd
wpt-pr: 62029
Automatic update from web-platform-tests
Do RuleSet invalidation before ResetStyle
The RuleSet invalidation does selector matching which will reject
rules in implicit @scopes when an element has not seen an implicit
scope. When we do not simply append sheets, we call ResetStyle() in
order to rebuild metadata properly, including the information on
Elements whether it has seen an implicit @scope.
The problem is that we need that information when doing the selector
matching when invalidating for removed stylesheets. Otherwise, we will
not invalidate for selectors inside implicit scope rules for any removed
stylesheets.
Effectively, we need to have the implicit scopes for both the added and
removed stylesheets. Add the implicit scopes for the new active
stylesheets before doing RuleSet invalidation. Then, if the change is
not an append, we reset style and rebuild everything as necessary,
including implicit scopes.
Bug: 555286423
Change-Id: I08a32b546ca75d22ce47a383c1bb3508d35d11d0
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/8352487
Reviewed-by: Anders Hartvoll Ruud <andruud@chromium.org>
Commit-Queue: Rune Lillesveen <futhark@chromium.org>
Cr-Commit-Position: refs/heads/main@{#1692379}
--
wpt-commits: 0a399602563b82d26b1fd869ae6253ec3e6da3b5
wpt-pr: 62452
Automatic update from web-platform-tests
streamHTML: Use the adopted element's execution context for TT check
Trusted Types essentially applies to a node tree. Consistently
use the ContainerNode's ExecutionContext, rather than the ScriptState's (which is the ExecutionContext of the currently executing JavaScript thread). Those are mostly the same, but would differ e.g. a document can reach into an iframe (or vice versa).
Bug: 556013783
Change-Id: I0c8eed185aa12d335ea0f1c287bd751817e66be4
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/8339912
Reviewed-by: Daniel Vogelheim <vogelheim@chromium.org>
Commit-Queue: Noam Rosenthal <nrosenthal@google.com>
Cr-Commit-Position: refs/heads/main@{#1692368}
--
wpt-commits: 4a5da312b17ceb66e4c4f6fbf2664d700d261ce8
wpt-pr: 62450
Automatic update from web-platform-tests
[HiC] Allow negative width and height for src and dest rects
The spec says drawElementImage() should use the bounding rect
when given negative width or height. Implement this and add tests.
We need to check WebGL and WebGPU to see what they expect.
Bug: 512509721
Change-Id: Ieb41221d6e30a0daf53fe9cbcd463ef2a6a87807
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/8265530
Commit-Queue: Stephen Chenney <schenney@chromium.org>
Reviewed-by: Stefan Zager <szager@chromium.org>
Reviewed-by: Philip Rogers <pdr@chromium.org>
Cr-Commit-Position: refs/heads/main@{#1692361}
--
wpt-commits: c922a747efb68fd9bbeba2741cab1715f5c384c6
wpt-pr: 62434
Automatic update from web-platform-tests
Omit firing change events synchronously on removal
This is still under the same OmitBlurEventOnElementRemoval flag, as
those events are fired together with blur/focusout events.
Also use an enum instead of a boolean for this behavior.
Bug: 41484175
Change-Id: Ib7e6d9c0b3f4b10e20e30328674ab8af1832de37
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/8313948
Reviewed-by: Mason Freed <masonf@chromium.org>
Commit-Queue: Noam Rosenthal <nrosenthal@google.com>
Cr-Commit-Position: refs/heads/main@{#1692334}
--
wpt-commits: af50fa206c0effac2fea2f81c0cf797376938bbe
wpt-pr: 62368
sqlite3_normalized_sql is only available for prepared statements, so
this specifically does not report on simple sql executions.
This does not remove the existing Legacy Telemetry reporting (yet).
Differential Revision: https://phabricator.services.mozilla.com/D321975
Thunderbird's compose window was the last consumer outside this repo; it moved off in bug 2066237, which has landed in comm-central.
The urlbar's a11y-checks exemption goes with it, since the wrapper no longer carries the combobox role that the check keyed on; the old searchbar still does.
Differential Revision: https://phabricator.services.mozilla.com/D321477
The AI window's document had no text context menu of its own, so it now loads editMenuOverlay.js. The smartbar reaches it through the document hosting the input, which in smartbar mode is not this.document.
EditContextMenu grows two things the smartbar needs: an anchor for a menu opened from a keyboard contextmenu event, and the input it was opened on, so the ProseMirror paste workaround only fires for the smartbar's own input.
Differential Revision: https://phabricator.services.mozilla.com/D321475
For bug 2008110 I added the --llvm flag in codecoverage.py but missed
it here.
This aims to fix lots of errors like:
```
[ERROR] Error when running gcov: gcov execution failed on uniffi-40f9f7591a3b9d67_1.gcno
gcov stdout:
gcov stderr: uniffi-40f9f7591a3b9d67_1.gcno:version 'B11*', prefer 'B22*'
```
on Android CCov builds
and
```
[ERROR] Error when running gcov: Failed to execute gcov process
```
on Linux/Windows CCov builds.
grcov should never call gcov because our CCov builds are always built
with Clang.
Differential Revision: https://phabricator.services.mozilla.com/D324372
This commit distinguishes the target-language fluent string label
in the main view of the FullPageTranslationsPanel from the target-language
fluent string label in the revisit view of the panel. These strings are
the same in English, but may not be the same in every language, so we
should not reuse the same string across these two different contexts.
https://github.com/projectfluent/fluent/wiki/Good-Practices-for-Developers
Differential Revision: https://phabricator.services.mozilla.com/D321756
neqo drops the session while processing the close, so by the time we drain
the SessionClosed event webtransport_session_stats() fails and we fell back
to Http3WebTransportSession's default-constructed mCachedStats: getStats()
after a server-initiated close reported zeros for every field.
Everything in WebTransportStatsData other than the session's datagram
counters comes from connection-level neqo counters, which are still
available at that point, so fall back to those rather than to zeros.
Differential Revision: https://phabricator.services.mozilla.com/D318359
Since findTabToBlurTo would select an unloaded tab when closing the active tab, even if a loaded tab was right next to it, I opted to add a filter on the visible tabs for just loaded(pending) tabs (as long as theres at least one) before running the rest of the adjacent-tab/MRU selection logic. If everything left is unloaded, falls back to the old behaviour since we have to pick something.
For a possible case where the MRU tab is unloaded and that pref is on, this will also fall back to the next loaded tab instead of reloading it, since that case seemed more likely to be expected based on this bug report and also like an edge case but open to other opinions on that!
This also should not impact the successor/owner selection, those should still take precedence.
Added a few tests as well - these tests unload the tab using a discardTab helper that calls discardBrowser and handles a race condition I came across with browserLoaded. Otherwise this looked to be the same path that unloading a tab takes but let me know if I'm missing anything there.
- the basic case from the bug report (adjacent tab unloaded skips to loaded one)
- same thing through the MRU path when MRU pref is on
- multiple unloaded tabs in a row, to make sure it keeps walking past all of them
- a test confirming successor still wins even when unloaded
Differential Revision: https://phabricator.services.mozilla.com/D324747
This does deliberately decrease the frequency of
environment-change-reason "main" pings for when private browsing mode
has a separate search engine and that search engine's data changes.
This is not a currently-shipping configuration and search counts are
determined by events not by this configuration, so we're fine.
Differential Revision: https://phabricator.services.mozilla.com/D323062
`environment.build` has the honour of being the only section of the
Environment that has required fields. And some of those required fields
must be of specific types and/or specific patterns.
This means that "removing" the seven unused fields results in:
* 2 set to "" to satisfy required strings
* 2 set to "00." to satisfy required strings with version patterns
* 1 set to null as vendor is required but can be null or string
* 2 actually removed (displayVersion and updaterAvailable)
And it only results in one decrement of the count, for updaterAvailable,
as the rest weren't ever mirrored in Glean inside the Environment
(because they were either already instrumented in client_info, or they
weren't useful data to mirror).
Differential Revision: https://phabricator.services.mozilla.com/D323061
This task has a dependency that requires a secret, so don't schedule it
in L1 contexts. We exempt try from this because reviewbot is already
restricted to trusted users there.
Differential Revision: https://phabricator.services.mozilla.com/D324984
MLModelHubService used the constant "ml-model-hub-service" as the feature ID for every native caller, so the existing firefox_ai_runtime.model_download events could not be selected by feature.
Pass the caller-provided task name as featureId, matching getModelBlob(). The browser test downloads through nsIMLModelHub and checks that every lifecycle event is attributed to speech-recognition.
Remove an attribute that was wrongly added and causes this to fail.
Differential Revision: https://phabricator.services.mozilla.com/D322658
Recorded in the utility process, where inference happens:
- model_load_time measures reading the GGUF into memory. Like
session_init_time it only has a sample on success, which its description
now says.
- inference_realtime_factor records one per-session mean of per-chunk
throughput as audio duration divided by compute time, times 100 (400 means
4x faster than real time). Recognition happens continuously on chunks of
similar size, so getting the average is meaningful here. The range reaches
100x rather than 20x, because hardware that runs this model comfortably
sits above 20x and would otherwise land entirely in the top bucket; the
bounds also put a bucket boundary exactly at 100, so falling behind real
time is a clean cut.
- init_failure gains the inference-process labels, one per step that can
fail, so a spike says where init broke rather than only that it did. The
previous model_load_failed covered six unrelated steps, two of which were
not model loads at all, and other covered four.
The tests verify that starting without an installed model reaches the
corresponding failure label and run real recognition end-to-end. They check
that the timing metrics have one session-level sample and log values rather
than asserting timings, since those depend on the machine.
Differential Revision: https://phabricator.services.mozilla.com/D319566
Two timing distributions are recorded content-side:
- session_init_time measures the page-visible wait between start() and the
model becoming ready for recognition. It only has a sample when init
succeeded, so its description says to read it against init_failure: a
regression turning slow inits into failures would otherwise look like an
improvement.
- result_latency records one sample per session: the mean capture-to-JS
latency of its results, using the capture timestamps already plumbed end to
end by AudioCaptureTiming.h.
Differential Revision: https://phabricator.services.mozilla.com/D319565
session_ended is recorded from Reset(), the one path every teardown goes
through. No transcript text or audio is recorded.
A session_id on both events pairs them, so a start and its outcome can be
joined instead of subtracted as two populations across a day boundary.
session_started also reports the model and locale the session negotiated to,
not just the tag the page asked for: en, en-US and en-us all run the same
model, and only the negotiated locale can be grouped on.
init_failure records the start failures whose cause content knows, because
the error codes the spec makes us fire are coarser: service-not-allowed alone
covers four distinct causes. The unsupported-language one is rejected before
[[started]], so it records no session events at all and would otherwise be
invisible; it is also exactly why error and session_ended do not add up.
Differential Revision: https://phabricator.services.mozilla.com/D319564
Visibility space is now always a surface's raster space, so the transitional
VisPixel unit and the parallel "visibility spatial node" naming no longer
describe anything distinct. VisPixel, VisRect and LayoutToVisTransform become the
existing RasterPixel, RasterRect and LayoutToRasterTransform, which already carry
exactly this meaning in the quad code: the raster node's local space, unscaled,
with RasterPixel * device_pixel_scale = DevicePixel.
SurfaceInfo::visibility_spatial_node_index was a copy of
raster_spatial_node_index, so it goes, along with the visibility_node() function
that had become an identity. DirtyRegion's field and doc comment, and the
remaining locals and parameters, are renamed to match.
Pure rename plus field removal; no behaviour change.
Differential Revision: https://phabricator.services.mozilla.com/D322981
Integer workspace ID causes conflicts on session restore so use uuid everywhere and ignore integer ones to avoid protocol errors.
Differential Revision: https://phabricator.services.mozilla.com/D324871
InitCtx used the ICD hardware queueCount, which can exceed the queues actually passed to vkCreateDevice (limit_queues, NVIDIA caps). vkGetDeviceQueue2 then fails and Cleanup waits on uninitialized fences.
Differential Revision: https://phabricator.services.mozilla.com/D324797
devtools.browsertoolbox.enable-test-server reaches the browser toolbox only
through #initProfile copying this profile's prefs.js, so it took effect only
when the write happened to win the race against the task's startup. Without it
installTestingServer() is never called and initBrowserToolboxTask's connect
loop spins until the test times out.
preferences.allow.omt-write cannot serve here: Preferences.cpp caches it on
first use, so flipping it in a test is a no-op.
Differential Revision: https://phabricator.services.mozilla.com/D325045
browser_dbg-keyboard-navigation.js pressed shift+tab as soon as .cm-content
existed. CodeMirror only renders a fold button for a line its syntax tree says
is foldable, and that parse is incremental, so on a slow run focus went to the
source header's end pane toggle instead - what the test expected when
CodeMirror 5 had no fold gutter (Bug 1924829).
The expected side of that assertion was already a constant: the fold gutter
always contains a visibility: hidden spacer button, so the lookup matched
whether or not any button was focusable.
Differential Revision: https://phabricator.services.mozilla.com/D325043
Only browser_dbg-breakpoints-sourcemap-with-sections.js needs xbundle.js's
uncleared throwing setInterval; the nine other tests that load
doc-sourcemaps.html inherit it. Its output keeps lastOutputTime fresh, so
browser-test.js reads a hung test as merely slow and grants it every
MAX_UNEXPECTED_TIMEOUTS extension instead of failing it after one window.
Differential Revision: https://phabricator.services.mozilla.com/D325041
Pausing focuses the toolbox frame, which blurs the content browser and makes the
parent process commit the composition in progress while the content process is
stopped in the debugger and cannot finish it. Starting the next composition on
top of that leaves the two processes disagreeing, and the parent can then assert
in ContentCacheInParent::OnCompositionEvent.
Committing explicitly is not open to the test: once it resumes,
nsITextInputProcessor.commitComposition already fails with NS_ERROR_FAILURE, so
it can only avoid Bug 2070926.
Differential Revision: https://phabricator.services.mozilla.com/D325039
The hold suspended nothing: !mDebuggerReady && !mRemoteDebuggerReady can never
both be true, since the two flags are cleared on mutually exclusive
UseRemoteDebugger() branches. So no debuggee runnable has been queued since
Bug 1899503.
Restoring the hold means the three flush sites drop the mDebuggerRegistered term,
which a remote worker never sets, and which RegisterDebuggerMainThread has
normally already set for a local one.
Differential Revision: https://phabricator.services.mozilla.com/D325036
EnableRemoteDebugger waited for the worker thread to bind its
PRemoteWorkerDebugger child endpoint with a bare if rather than a while
(Bug 1899503), so an early wake returned without registering, leaving the
worker invisible to nsIWorkerDebuggerManager and DevTools with no target actor
for it.
Looping on mRemoteDebugger alone would hang when the worker thread never binds
at all, the case the bare if was written for, so the predicate is a separate
flag, cleared whenever a new endpoint pair is armed: a worker frozen into the
bfcache unregisters its debugger and binds again on thaw.
Differential Revision: https://phabricator.services.mozilla.com/D325035
ToolboxController renders no tab and no command button until its canRender state
is set, and open() only schedules that from an idle callback, which can be
starved past the end of open(). The tracer tests then hand a null
command-button-jstracer to synthesizeMouseAtCenter.
Bug 1399548 added the gate to stop the component rendering before the toolbar
buttons were built, when #buildButtons() was asynchronous; it is synchronous now,
so no intermediate render is left to prevent. Awaiting the idle callback instead
would leave open() pending once its window is gone.
Differential Revision: https://phabricator.services.mozilla.com/D325033
See also bug 2045958. The generator-return implementation is very different now
after bug 2063576 but still good to have a test case for this.
Differential Revision: https://phabricator.services.mozilla.com/D325056
This is building on bug 2057638 part 1.
Instead of materializing `0x1p52` in `ScratchDoubleReg`, we can OR/subtract it
using the constant pool. This gives us a single implementation of `convertUInt32ToDouble`
on x86. The overload taking a `ScratchDoubleScope` (and clobbering the input) existed
only for `MacroAssembler::boxUint32` after bug 2057638.
Assembly before, when a scratch register was available (version added in bug 2057638 part 1):
```
vmovq <pool>, %xmm7 8 bytes
vmovd %ecx, %xmm1 4
por %xmm7, %xmm1 4
subsd %xmm7, %xmm1 4
```
Assembly before, when no scratch register was available (only `boxUint32` after bug 2057638):
```
subl $-2147483648, %edx 6 bytes
xorpd %xmm7, %xmm7 4
cvtsi2sd %edx, %xmm7 4
addsd <pool>, %xmm7 8
```
Assembly after, used in all cases:
```
vmovd %ecx, %xmm1 4 bytes
por <pool>, %xmm1 8
subpd <pool>, %xmm1 8
```
The `Uint32Array`-to-double path is 3-4% faster on a micro-benchmark. The two
Baseline paths that call `boxUint32` are ~2% faster. Wasm `f64.convert_i32_u` and
atomics on a `Uint32Array` are neutral. Wasm `f32.convert_i32_u` is ~0.5% slower.
Differential Revision: https://phabricator.services.mozilla.com/D324864
NS_ERROR_NET_RESET and NS_ERROR_NET_INTERRUPT on an https URI are not evidence
of TLS version intolerance: the heuristic applies only during the handshake,
insecure fallback was disabled in bug 1479501, and genuine TLS failures reach
nssFailure2 by their own path.
Give netReset and NS_ERROR_NET_EMPTY_RESPONSE distinct error-page configs, and
test the empty-response case with an actual empty response.
Differential Revision: https://phabricator.services.mozilla.com/D323597
The metrics show that URL fixup is actively used via
each of the `fixup`, `urlbar`, and `smartbar` call sites,
a bit under 1 million times a day.
The vast majority (over 99%) use the default `.com` suffix,
but the localized regional variants `.cz`, `.sk`, `.dk`, and `.no`
are also each used at least 1000 times a day.
This reverts commit e79790d0b7.
Differential Revision: https://phabricator.services.mozilla.com/D324959
Raise::Yes did nothing while Firefox was not the active application, where GTK
activates through gtk_window_present_with_time. Only nsFocusManager::RaiseWindow
reaches this on macOS, after BrowsingContext::CanFocusCheck grants the raise,
and mozilla.widget.raise-on-setfocus is a kill switch. The mac arms un-skipped
here are the browser-chrome harness waiting forever for a focus event once the
Browser Toolbox has taken activation: Bug 1937229, Bug 1937315, Bug 1767721,
Bug 1781499.
Differential Revision: https://phabricator.services.mozilla.com/D325018
The mmap of the compositor-provided keymap succeeds before xkb_context_new is
called. The failure path closed the fd but returned without munmap, leaking the
mapping every time xkb_context_new fails in a handler the compositor can call
repeatedly.
Differential Revision: https://phabricator.services.mozilla.com/D325330
Bug 2070774 pinned both mermaid themes to the light one because the page could not follow. A classDef or style that hardcodes a fill keeps that color in either scheme, so those nodes need an explicit color too, or the dark theme's label color lands on a light fill at 1.4:1.
Differential Revision: https://phabricator.services.mozilla.com/D325248
sphinx-rtd-theme has no dark mode and no custom properties to re-point, so the override is derived from the theme's own stylesheets at build time rather than checked in.
Differential Revision: https://phabricator.services.mozilla.com/D325247
The added rule only declares color-scheme, which is what makes light-dark() resolve; nothing competes with the context-fill in the presentation attribute, so the chrome consumers that supply one are unaffected. The fallback is what a web embed paints, since context paint is restricted to chrome://, resource:// and a short allowlist.
Differential Revision: https://phabricator.services.mozilla.com/D325246
StoreName only ever controlled whether the name passed to an individual
marker call is emitted as an extra MarkerName field on the ETW event; the
profiler's own marker storage always records the name. The old name did not
convey that, so rename it to ETWStoreName.
Also rewrite its documentation, in BaseMarkerType and in markers-guide.md,
to explain when to set it: leave it false when every marker of the type is
recorded with the same name, since the name then carries no per-marker
information, and set it to true only when callers pass a distinct name per
marker and the duplication cost of a copy of that string in every recorded
ETW event is acceptable.
Differential Revision: https://phabricator.services.mozilla.com/D325300
kChunkSize is an int32_t and the chunk index is a uint32_t, so
`aIndex * kChunkSize` is evaluated in 32 bits and wraps once the index reaches
16384, i.e. for entries larger than 4GB. Both results feed int64_t offsets.
CacheFile::BytesFromChunk already casts before multiplying; do the same at the
two remaining sites.
Differential Revision: https://phabricator.services.mozilla.com/D325296
The note on MarkerSchema::Format::Hexadecimal claimed values wider than a
32-bit unsigned integer might get truncated. The actual limit is JS
Number.MAX_SAFE_INTEGER (2^53-1) and it applies to every integer format,
so say that, and point at the supported way to display a 64-bit value:
convert it to a hexadecimal string in StreamJSONMarkerData and use the
String format.
Differential Revision: https://phabricator.services.mozilla.com/D324988
Automate the changelog step of the nightly development cycle by adding a
regex-replacement to the bump-main behaviour, so landoscript opens a new
'In Development' section for the upcoming version and demotes the
current one when main is bumped. This replaces the manual changelog edit
previously done by mobile/android/beta-cut.py.
Differential Revision: https://phabricator.services.mozilla.com/D324635
Now that the checks no longer run from `mach build`, mozlint is their only
consumer, so keep them next to the linter that drives them instead of in
config/.
check_js_opcode.py derived topsrcdir from its own depth in the tree, so bump
it to match the new location.
Since /config/** was packaged wholesale into the standalone SpiderMonkey
source tarball but /tools/ is cherry-picked, add an explicit filter so the
checks stay available there.
Differential Revision: https://phabricator.services.mozilla.com/D323630
The SpiderMonkey style, opcode and MacroAssembler checks ran from `mach build`,
so every build paid for a lint pass unrelated to compilation. Expose them
through mozlint as the `spidermonkey` linter instead, which is what CI already
schedules, and drop the build-time invocation.
Differential Revision: https://phabricator.services.mozilla.com/D323629
The shader already conflates the two with code that like 'world_pos = mix(device_rect.xy, device_rect.zw, aPosition.xy);'. For the compositor, device space and world space happen to be the same because we only composite at the root, however device space is a more useful concept (a space that lines up with the pixel grid of the destination texture) while world space tends to be a bit of a trap (the hard-coded root of the spatial tree) that is best avoided.
Differential Revision: https://phabricator.services.mozilla.com/D324881
World space is the root coordinate space. The coordinate space in shaders that is a device scale away from device space is actually raster space.
Differential Revision: https://phabricator.services.mozilla.com/D324880
This makes the scroll event handling more per-spec, and I think it's a
much simpler approach than bug 2015089.
Note that this subtly changes behavior around the edges, which I'm not
totally happy about: With this patch, if you reframe, you might end up
with two scroll events in the same frame, while pre-patch you end up
just with one. However, pre-patch has a separate set of issues, e.g. you
might end up with _zero_ scroll events rather than one if you scroll and
then go display: none or reframe.
With this setup it is very easy to fix tho, by keeping mWeakFrame in
ScrollEvent and refusing to fire if the frame is dead. So if this causes
trouble it is trivial to go back to the previous behavior. But I think
it's better to incorrectly fire one more event than incorrectly not
firing any event...
Differential Revision: https://phabricator.services.mozilla.com/D324919
No failure on try. Bug 1607636, cited by one of them, is a general intermittent
rather than a tsan defect; Bug 1591064 is a task about enabling ToolboxTask
tests on asan.
Bug 1959062's mac skip can never apply on macosx1470-64, whose test set is
cppunittest only, and Bug 2028047 mirrored it onto macOS 15 across every test
carrying it, without evidence for this file.
Differential Revision: https://phabricator.services.mozilla.com/D325019
Four original sources on the ember quickstart page are named router.js, three of
them from vendor.js, and findSource() returns the first one in insertion order.
When vendor.map is processed before quickstart.map the test picks
ember-routing/services/router.js, whose line 13 is a comment, so addBreakpoint()
never dispatches SET_BREAKPOINT and the helper waits until the test times out.
Naming a source by its full URL is the case Bug 1755736 kept URL support for
when it narrowed findSource() to an exact file-name match.
Differential Revision: https://phabricator.services.mozilla.com/D325040
Left enabled, this one pauses the debuggee once more after the textInput step, so
the smooth scrollTo of the scrollend step never resolves and the test hangs there.
Bug 2001947 comment 0 is that hang.
Differential Revision: https://phabricator.services.mozilla.com/D325038
SpecialPowers.focus() takes a window, and its windowGlobalChild lookup does not
apply to a browser element, so every call logged a TypeError. The element was
focused regardless, which is all this helper wanted.
Differential Revision: https://phabricator.services.mozilla.com/D325037
waitForElement polls through waitUntil, which re-arms a timeout on the top
level browser window for as long as its predicate is false. Racing it against
a timeout and then taking the timeout branch leaves that poll running, and its
closure retains dbg, and with it the debugger, webconsole and toolbox
documents, until shutdown. Asserting on findElement after a plain wait leaves
nothing behind, so the flush hover added by Bug 1767711 is no longer needed
and the debug skip added by Bug 1958748 can go.
Differential Revision: https://phabricator.services.mozilla.com/D325023
Bug 1528855 removed the pause points that kept stepping on original statement
boundaries, and the loop that stepped past a position the previous step already
reported. It disabled this test in the same landing. Neither came back, so the
expectations here are the positions the debugger reports today rather than the
pre-2019 ones.
Three changes passed the test by while it was off: Bug 1755736 made `findSource`
match a filename or a full URL, so its `input.` URL stopped matching `input.js`;
Bug 1849998 made test-facing columns 1-based; and Bug 1856270 added
`shouldWaitForLoadedScopes` for pausing in original sources.
Differential Revision: https://phabricator.services.mozilla.com/D325030
The test named its source by a partial path, which stopped matching when
Bug 1755736 narrowed `findSource` from a substring search to an exact file-name
match; that bug kept full-URL support for pages like this one, where several
original sources share a file name, so the narrow match stays as it is. The
reloads also waited on the document's path, which never named a source.
Abandoning a reload leaks the toolbox window: the last one cannot settle until
the page load the breakpoint holds completes, so `navigateTo` stays suspended
with `dbg` in its frame until shutdown. Resuming at the end settles all three.
Differential Revision: https://phabricator.services.mozilla.com/D325032
`newGeneratedSources` checks that a source actor's target is alive when the
resource comes in, but not after awaiting the source maps, and then dispatches
`checkPendingBreakpoints` without awaiting it. A target destroyed in that window
leaves an unhandled `targetFront.getSourceContentForResource failed: TypeError:
this.commands is undefined` rejection, which fails
sourcemaps/browser_dbg-sourcemaps-reloading.js and browser_dbg-reloading.js.
Differential Revision: https://phabricator.services.mozilla.com/D325031
smart_window.model, smart_window.memories_optin and smart_window.set_default_optin are current-state mirrors of prefs, set once per session in SmartWindowTelemetry.init() and re-set on change by the pref observers. They used the default `ping` lifetime, so the value was cleared after the first metrics ping of a session and was absent from every later ping. Reading any of them off a client's most recent ping reported the `unset` sentinel for most clients that actually have a value.
This gives all three `lifetime: application`, matching the already-correct smart_window.enabled. `application` clears on restart but init() re-sets the value each session, so it stays current without going stale, and it is now carried on every metrics ping.
This also closes the updateModelMetric race: because the value now persists rather than being cleared after the first ping, a value that resolves too late for the first ping is still reported on subsequent pings instead of being lost for the whole session.
Note for data stewards: this changes how often these existing metrics are transmitted, not what is collected.
Differential Revision: https://phabricator.services.mozilla.com/D325133
C++23 P2448R2 [1] relaxed the requirements for constexpr destructors.
C++23 makes UniquePtr's destructor constexpr. Clang instantiates
constexpr function templates when they are first referenced. The
'= nullptr' default argument for aProfileBufferStorageOrNull creates
a temporary UniquePtr<ProfileBuffer>, so callers may instantiate its
destructor while parsing ProfilerBacktrace.h.
The destructor requires a complete class definition for ProfileBuffer,
but ProfilerBacktrace.h only forward declares ProfileBuffer.
Include ProfileBuffer.h so ProfileBuffer is complete at the point of
instantiation.
[1] https://www.open-std.org/jtc1/sc22/wg21/docs/papers/2022/p2448r2.html
In file included from mozglue/baseprofiler/core/ProfilerBacktrace.cpp:7:
...
MacOSX26.1.sdk/usr/include/c++/v1/__memory/unique_ptr.h:76:19: error: invalid application of 'sizeof' to an incomplete type 'mozilla::baseprofiler::ProfileBuffer'
76 | static_assert(sizeof(_Tp) >= 0, "cannot delete an incomplete type");
| ^~~~~~~~~~~
mozglue/baseprofiler/core/ProfilerBacktrace.h:45:62: note: in instantiation of member function 'std::unique_ptr<mozilla::baseprofiler::ProfileBuffer>::~unique_ptr' requested here
45 | UniquePtr<ProfileBuffer> aProfileBufferStorageOrNull = nullptr);
| ^
mozglue/baseprofiler/core/ProfilerBacktrace.h:21:7: note: forward declaration of 'mozilla::baseprofiler::ProfileBuffer'
21 | class ProfileBuffer;
| ^
Differential Revision: https://phabricator.services.mozilla.com/D323891
C++23 P2448R2 [1] relaxes the requirements for constexpr functions.
A defaulted destructor is now constexpr when it meets the general
constexpr function requirements. This makes the affected test object
types eligible for constant initialization, so the global-variable
initialization checker rejects their MOZ_RUNINIT annotations.
To resolve the checker warnings, make the immutable JSClass,
external-string callback, and proxy-handler objects constexpr. Make the
callback and proxy-handler constructors constexpr as required.
TestJSPrincipals must remain mutable because its reference count changes.
Mark system_principals constinit and directly initialize the JSPrincipals
base with RefCount. Define the constexpr TestJSPrincipals constructor in
the header so its definition is available when system_principals is
constant-initialized.
[1] https://www.open-std.org/jtc1/sc22/wg21/docs/papers/2022/p2448r2.html
js/src/jsapi-tests/testSetPropertyIgnoringNamedGetter.cpp:42:1: error: Global variable flagged as MOZ_RUNINIT but actually has constant initialisation. Consider removing the annotation or (as a last resort) flagging it as MOZ_GLOBINIT.
42 | MOZ_RUNINIT const CustomProxyHandler customProxyHandler;
| ^
/builds/worker/checkouts/gecko/js/src/jsapi-tests/tests.cpp(421,19): error: non-constexpr declaration of 'TestJSPrincipals' follows constexpr declaration
421 | TestJSPrincipals::TestJSPrincipals(int rc)
| ^
/builds/worker/checkouts/gecko/js/src/jsapi-tests/tests.h(303,22): note: previous declaration is here
303 | constexpr explicit TestJSPrincipals(int rc = 0);
| ^
Differential Revision: https://phabricator.services.mozilla.com/D323894
C++23 P2448R2 [1] relaxed the requirements for constexpr destructors.
In C++23, Clang makes UniquePtr's destructor automatically constexpr.
Clang eagerly instantiates its body for the local UniquePtr<Encoder>
and UniquePtr<Decoder> variables in Encoding's inline factory methods.
Encoder and Decoder are only forward-declared at that point, so the
deleter's complete-type check fails.
To resolve this, move the NewDecoder() and NewDecoder factory methods
after the Encoding class definition so they have complete class
definitions for Encoder and Decoder.
[1] https://www.open-std.org/jtc1/sc22/wg21/docs/papers/2022/p2448r2.html
MacOSX26.1.sdk/usr/include/c++/v1/__memory/unique_ptr.h:76:19: error: invalid application of 'sizeof' to an incomplete type 'mozilla::Encoder'
76 | static_assert(sizeof(_Tp) >= 0, "cannot delete an incomplete type");
| ^~~~~~~~~~~
MacOSX26.1.sdk/usr/include/c++/v1/__memory/unique_ptr.h:300:7: note: in instantiation of member function 'std::default_delete<mozilla::Encoder>::operator()' requested here
300 | __deleter_(__tmp);
| ^
MacOSX26.1.sdk/usr/include/c++/v1/__memory/unique_ptr.h:269:71: note: in instantiation of member function 'std::unique_ptr<mozilla::Encoder>::reset' requested here
269 | _LIBCPP_HIDE_FROM_ABI _LIBCPP_CONSTEXPR_SINCE_CXX23 ~unique_ptr() { reset(); }
| ^
obj-aarch64-apple-darwin25.0.0/dist/include/mozilla/Encoding.h:736:24: note: in instantiation of member function 'std::unique_ptr<mozilla::Encoder>::~unique_ptr' requested here
736 | UniquePtr<Encoder> encoder(encoding_new_encoder(this));
| ^
obj-aarch64-apple-darwin25.0.0/dist/include/mozilla/Encoding.h:28:7: note: forward declaration of 'mozilla::Encoder'
28 | class Encoder;
| ^
Differential Revision: https://phabricator.services.mozilla.com/D323890
C++23 P2448R2 [1] relaxed the requirements for constexpr destructors.
C++23 makes UniquePtr's destructor, move constructor, and null
assignment operator automatically constexpr.
Clang defines PromiseHandler's virtual destructor inline when the
enclosing AsyncCallbackMethodHandlerBase class is still incomplete.
This instantiates the destruction path for
UniquePtr<AsyncCallbackMethodHandlerBase>, whose default deleter
requires AsyncCallbackMethodHandlerBase to be complete.
To resolve this, move PromiseHandler's destructor definition to
Callbacks.cpp where AsyncCallbackMethodHandlerBase is complete.
[1] https://www.open-std.org/jtc1/sc22/wg21/docs/papers/2022/p2448r2.html
MacOSX26.5.sdk/usr/include/c++/v1/__memory/unique_ptr.h:75:19: error: invalid application of 'sizeof' to an incomplete type 'mozilla::uniffi::AsyncCallbackMethodHandlerBase'
75 | static_assert(sizeof(_Tp) >= 0, "cannot delete an incomplete type");
| ^~~~~~~~~~~
toolkit/components/uniffi-js/Callbacks.h:137:5: note: in instantiation of member function 'std::unique_ptr<mozilla::uniffi::AsyncCallbackMethodHandlerBase>::~unique_ptr' requested here
137 | ~PromiseHandler() = default;
| ^
toolkit/components/uniffi-js/Callbacks.h:137:5: note: in defaulted destructor for 'mozilla::uniffi::AsyncCallbackMethodHandlerBase::PromiseHandler' first required here
toolkit/components/uniffi-js/Callbacks.h:75:7: note: definition of 'mozilla::uniffi::AsyncCallbackMethodHandlerBase' is not complete until the closing '}'
75 | class AsyncCallbackMethodHandlerBase {
| ^
Differential Revision: https://phabricator.services.mozilla.com/D324858
C++23 P2448R2 [1] relaxed the requirements for constexpr destructors.
In C++23 mode, Clang makes RenderSourceNLRS's defaulted destructor
automatically constexpr. Clang defines that destructor in NativeLayer.h
with only a forward declaration of gl::MozFramebuffer.
Defining RenderSourceNLRS's destructor instantiates the destructor of
its UniquePtr<gl::MozFramebuffer> member. Its default deleter requires
MozFramebuffer to be complete, so libc++'s completeness check fails.
To resolve this, move RenderSourceNLRS's destructor to NativeLayer.cpp,
where MozFramebuffer.h provides the complete type. This avoids adding
its GL header dependencies to NativeLayer.h.
[1] https://www.open-std.org/jtc1/sc22/wg21/docs/papers/2022/p2448r2.html
MacOSX26.4.sdk/usr/include/c++/v1/__memory/unique_ptr.h:75:19: error: invalid application of 'sizeof' to an incomplete type 'mozilla::gl::MozFramebuffer'
75 | static_assert(sizeof(_Tp) >= 0, "cannot delete an incomplete type");
| ^~~~~~~~~~~
obj-macos/dist/include/mozilla/layers/NativeLayer.h:264:7: note: in instantiation of member function 'std::unique_ptr<mozilla::gl::MozFramebuffer>::~unique_ptr' requested here
264 | class RenderSourceNLRS : public profiler_screenshots::RenderSource {
| ^
obj-macos/dist/include/mozilla/layers/NativeLayer.h:264:7: note: in implicit destructor for 'mozilla::layers::RenderSourceNLRS' first required here
obj-macos/dist/include/mozilla/layers/NativeLayer.h:22:7: note: forward declaration of 'mozilla::gl::MozFramebuffer'
22 | class MozFramebuffer;
| ^
Differential Revision: https://phabricator.services.mozilla.com/D323893
C++23 P2448R2 [1] relaxed the requirements for constexpr destructors.
In C++23, UniquePtr's destructor, move constructor, and null assignment
operator constexpr.
FileSystemDatabaseManagerVersion001's inline destructor destroys
UniquePtr<FileSystemFileManager> while FileSystemFileManager is only
forward declared. LSWriteOptimizerBase's inline constructors and Reset()
can destroy or reset UniquePtr<WriteInfo> before the nested WriteInfo
definition.
Move these definitions to the corresponding .cpp files, where the
UniquePtr pointee types are complete.
[1] https://www.open-std.org/jtc1/sc22/wg21/docs/papers/2022/p2448r2.html
obj-aarch64-apple-darwin25.3.0/dist/include/mozilla/dom/LSWriteOptimizer.h:43:3: note: in instantiation of member function 'std::unique_ptr<mozilla::dom::LSWriteOptimizerBase::WriteInfo>::~unique_ptr' requested here
43 | LSWriteOptimizerBase() : mLastSerialNumber(0), mTotalDelta(0) {}
| ^
obj-aarch64-apple-darwin25.3.0/dist/include/mozilla/dom/LSWriteOptimizer.h:31:9: note: forward declaration of 'mozilla::dom::LSWriteOptimizerBase::WriteInfo'
31 | class WriteInfo;
| ^
Differential Revision: https://phabricator.services.mozilla.com/D323892
llvmorg-24-init-8185-gbe215a25f001.patch and llvmorg-24-init-8187-gbc6c76a4d4f8.patch are the upstream
extract_symbols.py fixes for the clang::interp exports and the Registry<T> accessors, so
filter-symbols_clang_23.patch shrinks back to the Mozilla-specific size reductions. That also keeps it
applying to clang-trunk, which already has both fixes. llvmorg-24-init-7807-g651d01e873c6.patch cherry-picks
the upstream fix for a TypePrinter infinite recursion on FullyQualifiedName template parameters, which the
mozsearch plugin hits on UniquePtr<T[N]>.
libdispatch trips the new -Wunused-but-set-global (backport of the upstream fix the tpoechtrager fork lacks),
cctools-port's configure needs to copy LLVM 23's new llvm-c/Visibility.h and llvm-config.h next to lto.h, and
pe-parse's unused to_string template fails the /W4 /WX build whenever clang has -Wunused-template in -Wall
(23.1.0 did, 23.1.1 backed it out pending a libc++ cleanup), so keep it off explicitly.
Differential Revision: https://phabricator.services.mozilla.com/D325225
Node.ownerGlobal was renamed to documentGlobal, so browser?.ownerGlobal
evaluated to undefined rather than throwing. The
getMostRecentBrowserWindow() fallback therefore ran on every call: with a
single window open that is the same window, so the bug was invisible, but
with several open the certificate tab could land in a window other than
the one showing the PDF.
Added a browser test for the multi-window case.
Differential Revision: https://phabricator.services.mozilla.com/D323803
deb13-toolchain-build is now the default image for toolchain tasks, so the explicit setting on the wasi
compiler-rt and sysroot tasks is redundant. openh264-plugin isn't a toolchain task and has no default,
so move it from deb12 to deb13 explicitly.
Differential Revision: https://phabricator.services.mozilla.com/D325224
We switched how we're selecting theme foreground and background colors to make the profile avatars look the best for Nova specific themes. It turns out this causes contrast issues with some legacy/user generated themes, so this patch adds a check to determine which color selection logic we should follow.
Differential Revision: https://phabricator.services.mozilla.com/D324415
Now that we (sometimes) handle interrupts, a bunch of code can be updated. The biggest change here is error handling in RegExpShared::execute. Prior to this change, we assumed that returning RegExpRunStatus::Error from a regexp implied stack overflow unless there was an interrupt pending. Now that we support handling interrupts, we also have to consider the case where we invoke an interrupt handler and it returns false. To ensure that we properly disambiguate between that case and stack overflow, I've added a flag to the context that can be used to signal that we would like to throw a stack overflow error (which we can't do because we're generally in a context where we can't GC). That flag is now checked in RegExpShared::execute, and in each of the four JIT entry points that are used as fallbacks from regexp stub code. (Previously, if we hit stack overflow when called via a regexp stub, I think we would just fall back to a VM call and invoke the regexp again, which would presumably eventually overflow again. It seems better to fail early.)
(I also squashed a few clang-format changes that didn't absorb properly into this patch.)
Differential Revision: https://phabricator.services.mozilla.com/D324679
This is fiddly code, so (using rr) I manually verified that:
- interrupt-regexp-with-gc.js covers the case where the string is promoted from the nursery while interrupted
- the AutoInterruptingRegExp in HandleRegExpInterrupt is necessary; without it, interrupt-regexp-with-gc.js will free the jitcode and segfault
- interrupt-regexp-with-regexp.js covers the case where we reallocate the backtrack stack while interrupted
- interrupt-regexp-with-nested-regexp.js covers the case where we interrupt an interrupted regexp (the interrupt depth in the JitZone goes to 5)
Differential Revision: https://phabricator.services.mozilla.com/D324678
Currently, we sometimes backtrack by emitting the `Backtrack()` code inline, and sometimes by jumping to a shared backtrack handler. Given that we are emitting the backtrack handler, we might as well use it consistently to reduce code size, particularly since interrupt handling will make it a bit bigger. This matches what V8 already does. This also makes it a little easier to implement backtrack stack elision (bug 2061826).
Differential Revision: https://phabricator.services.mozilla.com/D324677
The backtracking stuff gets somewhat complicated, so I wrote up an SMDOC to help pin down the details. This comment is currently not entirely accurate (in that we don't support interrupts yet) but it will be accurate at the end of the patch stack.
Differential Revision: https://phabricator.services.mozilla.com/D324676
In preparation for being able to handle GC in interrupted regexps execution, the jitcode needs direct access to the string, so that it can be rooted when necessary. This patch changes InputOutputData to pass in a string directly, and stores it in the FrameData. While we're here, we also add the canResume flag; eventually, the regexp will use this to determine that it's safe to handle interrupts because everything is rooted in the caller.
Differential Revision: https://phabricator.services.mozilla.com/D324675
Bug 2050150 added a stride check to ConvertToNV12 after the WMF encoder
passed a chroma stride that was too small. ConvertToI420 had the same
missing check, so I added it too, with a gtest covering the Y, U and V
stride cases.
Differential Revision: https://phabricator.services.mozilla.com/D321954
Give the stale form-history entry in check_recentSearchCount a safety
margin past the recency window, instead of landing exactly on the
28-day cutoff, since the test's cutoff and the recentSearchCount
getter's own Date.now()-based cutoff could land on either side of the
boundary on loaded/virtualized CI hardware, intermittently counting it
as recent.
Differential Revision: https://phabricator.services.mozilla.com/D311643
On macOS 27, when the default data directory (~/Library/Application
Support/Firefox) can not be read, warn the user and provide workaround
instructions.
Differential Revision: https://phabricator.services.mozilla.com/D322802
Issue: the jump to bottom chat button stops working after we send a second message.
Solution: it was behind the blur and needed a z-index to come to the top layer.
Differential Revision: https://phabricator.services.mozilla.com/D324437
windows CaR builds fail on //v8:metagen_isntance_types_h
the cause is the header search order in the new v8 tools/metagen
only our build fails as our MSVC is newer
Differential Revision: https://phabricator.services.mozilla.com/D325107
Record in the newtab ping when the Customize panel opens, when one of
its subpanels opens and which one, and when "Explore more themes" is
clicked in the themes subpanel. The CustomizeMenu component records the
two open events at the point where the panel becomes visible, so every
way of opening it counts the same way, whether from the customize
button, a message, or the widgets context menu. The "Explore more
themes" button reports its click as a user event, the way the other
New Tab clicks reach the TelemetryFeed module.
The panel open reuses the `SHOW_PERSONALIZE` user event name, so the
seven entry points that already sent that event are changed to stop
sending it. Nothing was listening for the event before this patch, and
now that the TelemetryFeed module is aware of it, leaving those
dispatches in place would count every open twice.
Differential Revision: https://phabricator.services.mozilla.com/D324869
Refactor how the customize panel tracks which subpanel is open. Part 3 of
this stack adds telemetry for the customize panel, and that telemetry
needs one value that names the open subpanel. The Base component now
holds that value as `activeSubpanel`, so at most one subpanel is open at
a time, and the CustomizeMenu component derives each subpanel's open
state and its own styling from `activeSubpanel`. This removes the four
booleans and the callback each subpanel used to report its state back
up. The subpanel props are unchanged.
This also fixes the panel styling itself as if no subpanel were open
after one subpanel replaced another, which Dre noted on D324515.
The Jest tests for the Base component now cover the new state: opening,
toggling and closing subpanels, one subpanel at a time, and the panel
taking its styling from the open subpanel. These replace the Enzyme
tests deleted in this patch.
Differential Revision: https://phabricator.services.mozilla.com/D324868
New Tab now calls the toolkit theme picker's `shown()` whenever one of
its pickers comes into view, so the `theme_picker.shown` event is
recorded for about:newtab: for the compact picker when the Customize
panel opens, and for the full picker when the "See more themes" subpanel
opens. The picker element loads lazily, so the call waits for the element
to be defined and is skipped if the panel has moved on by then, or if the
Firefox build is too old to have `shown()`.
Note that toolkit's `ThemePickerChild` actor records `shown` at most once
per document, whichever layout reports first. The Customize panel always
opens on its root panel, so the compact picker reports first and the full
picker's event from about:newtab is currently dropped. New Tab still
calls `shown()` every time either picker appears, so if toolkit later
records one event per layout, the full picker's events will start
arriving without any change on the New Tab side.
Differential Revision: https://phabricator.services.mozilla.com/D324867
The shouldCreateInstance option for MockRegistrar, which is true by default,
makes it so that every time you call createInstance on the mock component it
calls createInstance on the real component, and sticks the real instance on
a property _genuine. This can be used for things like forwarding calls you
don't want to change to the real component.
Unfortunately, in order to support the full generality of MockRegistrar, this
is implemented in terms of a low-level XPCOM component manager feature called
getClassObject, which gets a handle to the underlying factory. I am trying to
get rid of it.
However, this feature is only used in two specific places, in FakeCertDB and
in telemetry. Both of them only forward a few property lookups to the real
component, and the actual real component doesn't seem to change, so we can
manually snapshot it when we create the mock component and then remove this
feature from MockRegistrar entirely.
Removing this option means that there are no options, so I merged registerEx
into register.
Another non-obvious thing is that there's a try-catch around the starting part
of the function where we check for an existing component. I found at least one
test, browser_downloads_taskbar.js, that relies on this. It registers a mock
component for some OS-specific things, across every OS, so we need to be able to
handle this gracefully. Now that this can only fail in one place, I tightened
up the try-catch.
Differential Revision: https://phabricator.services.mozilla.com/D320276
The `dnsNotFound` Search CTA built its query as the path's keywords followed by the host's, so the site the user was trying to reach trailed the query. We want to lead with the host's tokens instead.
Differential Revision: https://phabricator.services.mozilla.com/D324814
getClassObject is used in unregisterFactory to determine what the current
factory is so that we can unregister it, but the only caller is already
tracking it, so pass it in rather than recomputing it.
getClassObject is an odd API I am trying to eliminate, and this is really
my entire goal of this patch series.
Differential Revision: https://phabricator.services.mozilla.com/D320609
In this patch, I carry out the simplification enabled by the previous patch.
registerFactory
* The first argument is always null, so drop it and simplify the code.
* currentFactory is now dead so remove it.
* Remove a comment that no longer applies.
unregisterFactory
* cid is always non-null. I added a null check for cid, but this is mostly for
documentation purposes, because its caller has already done the same check.
* The only caller only passes in two arguments, so newFactory will always be
undefined. Replace it with null in the place that it is used.
* The caller does not use the return value, so don't bother with it.
I think the split version is easier to understand, and it enables a further
simplification in the next patch.
Differential Revision: https://phabricator.services.mozilla.com/D320608
swapFactoryRegistration is only called by MockObjectRegisterer, in two places.
When we're initially registering the factory, cid is null and newFactory is
non-null. When we're unregistering the factory, cid is non-null and newFactory
is null.
As a first step towards simplifying this method, in this patch I change
swapFactoryRegistration into two identical methods, registerFactory
and unregisterFactory, to cover these two roles. Later patches will
carry out simplifications, but splitting out this intermediate patch
makes it easier to see what actually changed.
Differential Revision: https://phabricator.services.mozilla.com/D321536
This only ever returns an object with an originalCID field, so just return the value
and get rid of the unnecessary error handling code in MockObjectRegisterer.
Differential Revision: https://phabricator.services.mozilla.com/D320607
Bug 2052033 passed the spread as the clip snap outset on both zero-blur
box-shadow arms. Only inset needs it, where the ClipOut is the element
deflated by the spread. An outset shadow's ClipOut is already the element,
and anchoring it to snap(element.inflate(spread)) inset by the spread
differs from snap(element) whenever spread * device_scale is fractional,
so a border or background the element paints in the same colour no longer
meets the shadow and a partial-coverage seam flickers as the element moves.
The reftest fills the element in the shadow colour so the correct result is
the snapped shadow rect, solid. It uses spread 10.5 at scale 1, and no
scale(*), because an integral spread * scale is the one case the bug cannot
show in.
Differential Revision: https://phabricator.services.mozilla.com/D324811
AutoEnterOOMUnsafeRegion::crash has an overload that annotates the crash with information about the size of the allocation, but it's been broken for a while. Fix it and use it here.
Drive-by: rewrite some math to be more careful about overflow
Differential Revision: https://phabricator.services.mozilla.com/D324766
Regexp modifiers and named capture groups were shipped ~2 years ago. V8 removed the flag in irregexp to disable them, so these JitOptions no longer do anything.
Differential Revision: https://phabricator.services.mozilla.com/D324804
Irregexp now stores flags inside nodes (to improve handling of regexp flag modifiers), so AnalyzeRegExp no longer needs the flags to be passed in.
Differential Revision: https://phabricator.services.mozilla.com/D324803
Add browsertime-benchmark-jetstream3 to the android-em-14-arm64 test set at tier 3, and schedule it on autoland for fenix, matching what speedometer3
already does on that platform. Jetstream3 produces many more alerts than speedometer3(none since we landed the sp3 emulator change) so it makes sense
to use this benchmark in addition to sp3 because of its ability to show long term trends for alerting.
Also raise that emulator's RAM from 3GB to 6GB, which was the culprit behind the jetstream3 job permafailing previously.
Differential Revision: https://phabricator.services.mozilla.com/D324733
Extending these pkcs11 module metrics for another year. Knowing the
code signing and usage statistics is important for future work in
this area.
Differential Revision: https://phabricator.services.mozilla.com/D325009
Manually duplicating every task definition produced by a kind lets the copy
drift as the source changes. Test variants already avoid this for a single
test task, but a difference compiled into artifacts needs a separate build of
every task it affects.
Differential Revision: https://phabricator.services.mozilla.com/D320191
- When Homepage as New Tab is enabled, starting a search from the search widget will add a new homepage tab in the current browsing mode before navigating home with the address bar focused, so the widget lands on the zero search state in its own tab.
Differential Revision: https://phabricator.services.mozilla.com/D321966
`MapCallback`, `BufferUnmap`, `ReadbackPresentCallback` and
`ReadbackSnapshotCallback` all read a buffer's mapped range while
assuming it is still mapped. `MapCallback` is not invoked by wgpu-core
directly but from a task, so content can destroy or unmap the buffer, or
its device, before it runs. And once a device is lost or destroyed
wgpu-core destroys all of its buffers in `release_gpu_resources`, at the
end of whichever poll drains the device's queue; that poll is driven by
the GPU process, with no content involvement and no ordering against
content's messages.
Return a null ptr for `DestroyedResource` and `NotMapped` rather
than panicking, and handle that at each call site: send a map error to
content, skip the write-back flush, or skip the readback. `MapCallback`
also has to tolerate the parent's `mapData` for the buffer being gone,
which can be caused by content destroying or dropping the buffer.
Related fixes:
- moved `MapCallback`'s `get_mapped_range` call out of the read-only
branch so every map is checked.
- `Buffer::Unmap` previously cancelled a pending map without telling the
GPU process, so content saw the buffer as unmapped while wgpu-core
still
had it mapped. Forwarding that unmap is what makes the `NotMapped`
race
above reachable.
Differential Revision: https://phabricator.services.mozilla.com/D324946
CFRPageActions exists only to render these three templates, so it is removed
along with CFRMessageProvider, the CFR schemas, the
contextual-feature-recommendation popupnotification, the urlbar chiclet and their
stylesheets, plus MILESTONE_MESSAGE_87 now that the felt-privacy milestone
experiment detected no effect. ASRouter.observe() now calls
RemoteL10n.reloadL10n() directly instead of going through CFRPageActions, which
means the useRemoteL10n pref actually invalidates the l10n cache where the old
CFR-gated path never fired.
Differential Revision: https://phabricator.services.mozilla.com/D318365
Bug 2052547 landed the `theme_picker.shown` event and left each surface
to add its own caller. Profiles needs that caller so
`profiles.existing.theme` and `profiles.new.theme` have an impression
count to compare against.
`EditProfileCard.maybeRecordThemePickerShown()` records after the Nova
picker is rendered, initialized, and visible. `NewProfileCard` inherits
this flow, so the same logic covers about:newprofile.
`ThemePickerInitialState` handles readiness completing after visibility,
while `visibilitychange` handles visibility completing after readiness.
Successful recording removes both listeners. A final check after both
render waits prevents hidden or disconnected cards and overlapping calls
from recording.
The visibility check is tab-level rather than viewport-level, which
keeps the impression denominator comparable to about:welcome, New Tab,
and about:addons.
Nova renders `theme-picker` independently of legacy `this.themes`. The
legacy picker keeps its existing `this.themes` availability check.
The focused browser test covers active loading, background-tab deferral,
visibility changes during rendering, and per-document recording.
Differential Revision: https://phabricator.services.mozilla.com/D324463
Record each appearance and native-theme change with its selected value,
source, and layout.
Record direct updates locally. Record remote updates after the parent
applies them.
Keep theme selection in ThemesList and preserve its per-source
attribution.
Differential Revision: https://phabricator.services.mozilla.com/D324462
Remove shared client-side deduplication so every ThemePicker.shown()
call records one event with source and layout.
Consumers still decide when a picker is shown. Reporting can aggregate
repeated events later.
Differential Revision: https://phabricator.services.mozilla.com/D324461
This patch adds new helpers to handle register shuffling when AVX is not available. The choice between commutative vs non-commutative for each op was copied from WasmIonCompile.cpp.
The FMA code uses ScratchSimd128Scope and then calls helpers that now need it themselves, so I rewrote it to use the underlying instructions directly. This is more consistent with other code that uses the scratch register in this file (eg reverseInt16x8).
Differential Revision: https://phabricator.services.mozilla.com/D303160
Claude wrote a prototype of this patch, then I rewrote it by hand and polished up a bunch of stuff.
V8 has two other ops that it implements using SIMD (SkipUntilOneOfMasked and SkipUntilOneOfMasked3), but the latter was disabled because it regressed TodoMVC-jquery, and despite my best efforts, I can't write a single testcase that triggers the former in V8.
Differential Revision: https://phabricator.services.mozilla.com/D301944
Based on Element discussions with Ryan and Yury, I am removing the outdated wasm-no-experimental dependency. Wasm SIMD is no longer experimental.
This also changes ENABLE_WASM_AVX to ENABLE_JIT_AVX, and updates the two uses. I didn't change ENABLE_WASM_RELAXED_SIMD, because relaxing strict determinism is wasm-specific, and it isn't used outside of wasm code.
Differential Revision: https://phabricator.services.mozilla.com/D301943
blob: and data: documents inherit their creator's CSP, which can block
chrome: modules loaded by the pdf.js viewer. Scripts under resource://pdf.js/
are already exempt.
Apply the same exemption to chrome: script loads whose loading principal is
pdf.js.
Differential Revision: https://phabricator.services.mozilla.com/D324064
A window opened maximized is laid out at its persisted *restored*
size: AppWindow::UpdateWindowStateFromMiscXULAttributes applies the sizemode
attribute from xulstore before initial layout, but the size persisted alongside
it is the un-maximized one (MaybeSavePersistentPositionAndSize stores
GetRestoredBounds()), and the widget only learns its real size from the OS
afterwards. gUIDensity.init() runs at browser-window-load in between, so
_shouldAutoCompact() measures that smaller size and latches uidensity="compact".
The window is then reflowed and painted at its real size while still carrying
compact, and only the DOM resize event that follows corrects the density: a
visible jump in toolbar height, corner rounding and content offset.
Measure the area such a window is about to fill instead. It is known up front
and gives the same answer before and after the maximize transition, so there is
nothing left to correct after the first paint. Unlike exempting a non-normal
sizemode from auto-compact outright, this keeps compact mode for users whose
screen is genuinely small enough to warrant it.
Differential Revision: https://phabricator.services.mozilla.com/D324960
This commit makes two changes
1. Adds reset() - to handle updating the state to what would indicate that sync values have been reset. This includes resetting the last synced time, "is sync connected", and "persisted sync state"
Reset is different from clear because clear removes the entries from the storage. Reset merely sets them back to a default state.
2. SyncStateStorage.syncEnabled becomes SyncStateStorage.syncConnected, is now nullable, and has an observable variant. `null` indicates that the value has never been set.
It also adds a `storeSyncConnected` for setting that value.
"Connected" rather than "enabled" because this preference records whether sync was connected on this device through an explicit action, which kinda sounds better with the planned `connect()` / `disconnect()` APIs on `SyncManager`.
The resolution of `SyncStateStorage.syncConnected` to true/false falls outside the storage layer, and this only tells us if any value has been set or not.
Differential Revision: https://phabricator.services.mozilla.com/D324593
Provide `--font-size-small` in chrome documents and target its relative
font size to be >= 11px. On macOS this means using 1rem, on Windows it's
(11 / 12)rem and Linux is left unchanged at expected 12.72px (14.6719 * 0.867)
Differential Revision: https://phabricator.services.mozilla.com/D319833
The Windows toolchain has been building libonnxruntime with exceptions enabled, unlike every other
platform. --disable_exceptions is inert at the cmake level: onnxruntime_DISABLE_EXCEPTIONS is a
dependent option that cmake forces off without onnxruntime_MINIMAL_BUILD, so the explicit
-fno-exceptions and *_NO_EXCEPTIONS flags this script passed were the only thing turning exceptions
off on Linux, macOS and Android, and nothing did the MSVC equivalent. A flags-only fix cannot work on
MSVC either, since cmake appends /EHsc after the caller's flags whenever the option is off.
The local patch that already lets build.py accept --disable_exceptions on its own now does the same
for cmake by making the option plain. Upstream's own handling then applies everywhere: -fno-exceptions
on clang, dropping /EHsc and setting _HAS_EXCEPTIONS=0 on MSVC, and the ORT, ONNX, MLAS and json
no-exception defines, so the script stops passing them itself. The patch also keeps unwind tables,
which upstream drops alongside exceptions. Firefox builds with -funwind-tables so the crash reporter
can walk stacks, and frames inside libonnxruntime should stay walkable too.
Differential Revision: https://phabricator.services.mozilla.com/D325059
onnxruntime has a --use_binskim_compliant_compile_flags option that turns on the hardening flags it
uses for its own compliance builds. Most of those overlap with what Firefox already applies to its own
code, but two gaps had gone unnoticed: macOS was the only platform building libonnxruntime without
-fstack-protector-strong, and _FORTIFY_SOURCE was missing everywhere.
Rather than passing the upstream option, set the flags directly. The option also replaces
CMAKE_CXX_FLAGS wholesale, which would collide with the flags this script passes, and it
gates -fstack-clash-protection on the host architecture rather than the target, which is wrong for
cross-compiled builds.
Added, following both upstream and Firefox:
macOS -U_FORTIFY_SOURCE -D_FORTIFY_SOURCE=2
Linux the same, plus -Wp,-D_GLIBCXX_ASSERTIONS and -Wl,-Bsymbolic-functions
Linux -fcf-protection, on x64 only since CET is x86-specific
Windows /guard:cf, at both compile and link
MSVC already gives us the rest of what Windows would want: /GS, /DYNAMICBASE and /NXCOMPAT are on by
default, so Control Flow Guard was the only gap. Passing it at link puts a space in the shared linker
flags, which the unquoted extra_args string could not carry, so extra_args becomes an array.
CMAKE_SHARED_LINKER_FLAGS stays unset on the other platforms because cmake seeds it from $LDFLAGS,
which the Linux build relies on for -fuse-ld=lld.
The compile-time flags go into the C flags as well as the C++ flags. cpuinfo is C and is linked into
the library, and upstream's option sets both languages.
They are passed as CMAKE_C_FLAGS_INIT and CMAKE_CXX_FLAGS_INIT rather than CMAKE_C_FLAGS and
CMAKE_CXX_FLAGS. A cache value for the latter replaces whatever the toolchain file would have
supplied, and the Android NDK supplies its hardening that way, so libonnxruntime.so on Android has
been built without the NDK's -D_FORTIFY_SOURCE=2, -funwind-tables, -fdata-sections or
-Wformat -Werror=format-security for as long as the script has set CMAKE_CXX_FLAGS. The _INIT form
is prepended to those defaults instead. On MSVC it also restores cmake's default /EHsc, which is
what upstream's exception-disabling code rewrites to /EHs-c-, and the /DWIN32 /D_WINDOWS defines
that upstream's own compliance flags add by hand. For the same reason the Linux sysroot moves from a
--sysroot flag in CMAKE_C_FLAGS and CMAKE_CXX_FLAGS to CMAKE_SYSROOT: a cache value for CMAKE_C_FLAGS
would make cmake ignore the _INIT flags for C, and CMAKE_SYSROOT applies to every language and to the
link step anyway.
On Windows, nothing this script passed through CMAKE_CXX_FLAGS had ever reached the compiler. With
--parallel, build.py appends its own -DCMAKE_C_FLAGS=/MP -DCMAKE_CXX_FLAGS=/MP after the extra
defines, and cmake keeps the last definition of a variable. /MP does nothing under Ninja, so that
block is disabled, which is also what lets the _INIT values take effect there: a cache value for
CMAKE_CXX_FLAGS makes cmake ignore them.
Deliberately not taken:
-Wp,-D_GLIBCXX_ASSERTIONS is libstdc++ only, so it is set for Linux and not for Android or macOS,
which use libc++. Upstream passes it there too, where it does nothing.
/Qspectre is skipped. The ONNX interface is gated on InferenceSession::InInferenceProcess, so it
only exists inside the dedicated inference process, and its callers are chrome features rather than
web content. A speculative read there exposes model data the caller already holds, which does not
justify the code size and speculation barriers on a compute library. This reasoning depends on that
process staying single-purpose and chrome-only.
-fstack-clash-protection is not added for macOS, which Firefox excludes along with Windows, OpenBSD
and iOS.
Android gets nothing beyond its existing flags now covering C too. Upstream excludes it from these
flags entirely and the NDK fortifies by default, which the _INIT change lets it do again.
Differential Revision: https://phabricator.services.mozilla.com/D317820
The task already fetched a sysroot but never used it: build-breakpad-injector.sh
writes a mozconfig with no --with-sysroot, and the bootstrapped sysroot only
applies when bootstrap is enabled, which it isn't under MOZ_AUTOMATION. So the
build used the docker image's libstdc++ headers and the library's ABI floor
followed the image, going from GLIBCXX_3.4.29 to GLIBCXX_3.4.31 on Debian 13.
Debian 12 provides GLIBCXX_3.4.30, so the resulting libbreakpadinjector.so
could not be dlopen'd there, and every jit-test that injects it failed with
MOZ_CRASH(Failed to load library).
Use sysroot-x86_64-linux-gnu rather than linux64-toolchain-sysroot: the
injector is built as C++20 and the latter only has libstdc++ 8. That also
matches the sibling minidump-stackwalk task and ordinary Firefox builds.
The resulting library needs GLIBC_2.14 and GLIBCXX_3.4, i.e. rather better
than the GLIBC_2.34 and GLIBCXX_3.4.29 it needed before Debian 13.
Differential Revision: https://phabricator.services.mozilla.com/D324562
xar was built with the docker image's headers and libraries even though
its task already fetched clang and a sysroot. Moving to Debian 13 took
the shipped binary from GLIBC_2.34 to GLIBC_2.38 and added a
libzstd.so.1 dependency, by way of deb13's openssl pulling zstd into
pkg-config --static --libs libcrypto. It is a local-toolchain, so mach
bootstrap hands it to developers on arbitrary distributions.
xar's configure can only locate libxml2 through xml2-config, which
sysroots do not ship because they contain no /usr/bin. Left alone it
combines the host's libxml2 headers with the sysroot's library, so pass
a small shim backed by pkg-config.
The sysroot's openssl is 1.0.1t, which does not pull in zstd, so
libzstd-dev is no longer needed in the image; bug 2010574 only added it
for xar. Dropping it also stops gcc autodetecting zstd, which was
silently adding a libzstd.so.1 dependency to the gcc toolchains. The
explicit -DLLVM_ENABLE_ZSTD=OFF and --without-zstd stay: they pin
autodetection that would otherwise vary with the image's contents.
Other consequences worth knowing:
- the statically linked libcrypto becomes the sysroot's openssl 1.0.1t.
xar only uses the EVP digest functions, no TLS or certificate code.
- that libcrypto.a is not built PIC, so the binary can no longer be a
PIE.
- the sysroot has lzma.h where the image did not, so xar gains lzma
support and a liblzma.so.5 dependency.
Measured locally: GLIBC_2.38 -> GLIBC_2.14, configure resolves libxml
2.9.1 with no host/sysroot split, and create/extract roundtrips pass for
sha1, sha256 and md5 with gzip, bzip2 and no compression.
Differential Revision: https://phabricator.services.mozilla.com/D324249
gn was built with the docker image's gcc, so the shipped binary's glibc
floor followed the image: moving to Debian 13 took it from GLIBC_2.18 to
GLIBC_2.38. That broke source-test-vendor-verify-gfx, which runs gn to
re-vendor gfx/angle on the static-analysis-build image; bug 2065412
worked around it by moving that image to Debian 13, but the binary is
also a local-toolchain handed to developers on arbitrary distributions.
The symbols pulling in GLIBC_2.38 are the __isoc23_str* redirects glibc
applies to strtol and friends for __cplusplus >= 202302L, and gn is
built as C++23. Building against older headers removes the redirect
rather than papering over it.
gn needs linux64-toolchain-sysroot-gcc10 rather than
linux64-toolchain-sysroot: it uses <concepts> and <ranges>, which the
libstdc++ 8 in the latter does not have. cctools-port and node-22
already use the gcc10 sysroot for the same reason.
build/gen.py bakes CXX, CFLAGS+CXXFLAGS and LDFLAGS into build.ninja at
generation time and has no cxx-vs-cc distinction, so the environment
variables have to be set before it runs. The mac and win64 gn builds set
their own and are unaffected; build-gn-common.sh is untouched.
Differential Revision: https://phabricator.services.mozilla.com/D324248
winchecksec was built with the docker image's headers and libraries, so
the shipped binary's glibc floor followed the image: moving to Debian 13
took it from GLIBC_2.14 to GLIBC_2.34. It is a local-toolchain, so mach
bootstrap hands it to developers on arbitrary distributions.
The task fetched neither clang nor a sysroot, and build-winchecksec.sh
had no case for x86_64-unknown-linux-gnu, so the linux build fell
through with no cmake flags at all. Add the fetches and a linux case
mirroring build-msix-packaging.sh.
win64-winchecksec shares the script and is unaffected. Measured locally:
GLIBC_2.34 -> GLIBC_2.14, and pe-parse's -Werror block still compiles
clean under clang with the sysroot.
Differential Revision: https://phabricator.services.mozilla.com/D324247
mkbom was built with the docker image's compiler, so the shipped
binary's glibc floor followed the image: moving to Debian 13 took it
from GLIBC_2.34 to GLIBC_2.38. It is a local-toolchain, so mach
bootstrap hands it to developers on arbitrary distributions.
bomutils assigns CXXFLAGS and LDFLAGS with = rather than ?= in its
Makefile, so overriding them on the make command line would drop its
own hardening flags. The sysroot flags go into CXX instead.
The task already fetched clang and the sysroot; it just wasn't using
them. Measured locally: GLIBC_2.38 -> GLIBC_2.14.
Differential Revision: https://phabricator.services.mozilla.com/D324246
upx was built with the docker image's headers and libraries, so the
shipped binary's glibc floor followed the image: moving to Debian 13
took it from GLIBC_2.14 to GLIBC_2.38, which excludes Ubuntu 22.04,
Debian 12 and Rocky 9. It is a local-toolchain, so mach bootstrap hands
it to developers on arbitrary distributions.
upx links nothing externally -- UCL and zlib are vendored and built
static, and bzip2, zstd and threads are disabled in its CMakeLists --
so pointing cmake at the sysroot is enough. Follows the same pattern as
build-dmg-hfsplus.sh.
win64-upx shares the script and is unaffected: the new flags are in the
non-Msys branch.
Differential Revision: https://phabricator.services.mozilla.com/D324245
libcody is a bootstrapped host module, and POSTSTAGE1_CXX_EXPORT does not
pass the build sysroot's flags, so it is compiled against the image's
headers. c++tools is not bootstrapped and is built in the post-bootstrap
pass, where TARGET_FLAGS_TO_PASS sets CXX to the target compiler with
--sysroot, so g++-mapper-server links against the sysroot's libc.
With glibc >= 2.38 the image's stdlib.h redirects strtoul to
__isoc23_strtoul, which the jessie sysroot's glibc 2.19 doesn't provide,
and linking g++-mapper-server fails.
Nothing uses the standalone C++ module mapper server: gcc defaults to the
in-process mapper. libcody itself is still built and linked into cc1plus,
which is consistent since that link also happens without the sysroot.
Differential Revision: https://phabricator.services.mozilla.com/D320157
libcrypto in Debian 13 pulls in libzstd, so xar fails to link without
libzstd-dev in the image.
Installing it in turn makes LLVM and binutils pick up the system zstd,
which isn't in the sysroots they link against, so turn it off explicitly.
This covers both build-clang.py and build-llvm-common.sh; the latter
configures llvm proper for llvm-symbolizer. build-cctools-port.sh already
passes -DLLVM_ENABLE_ZSTD=OFF for the same reason.
LLVM_ENABLE_ZSTD=ON really means autodetect, so this only pins behaviour
we already had: no image shipped libzstd-dev until now.
Eventually we should either build xar against the sysroot or link
statically, but this is the smaller fix for now.
Differential Revision: https://phabricator.services.mozilla.com/D320156
Backport llvm-project c294bdd64768 and bf07de38b05e.
LTODisassembler.cpp only forces the target disassembler registries into
the link; the LLVMCreateDisasm* entry points themselves live in
LLVMMCDisassembler. With LLVM_LINK_LLVM_DYLIB, which we enable
everywhere but Windows, they end up in libLLVM-14.so, so lto.exports
names six symbols libLTO.so.14 does not define. lld defaults to
--no-undefined-version since llvm D135402 and rejects that.
libRemarks.so has the same problem, more so: Remarks.exports lists 25
symbols and libremarks.cpp defines exactly one.
Both upstream fixes landed for LLVM 16, so clang 19 and later already
have them.
Differential Revision: https://phabricator.services.mozilla.com/D320155
Implemented aria-grabbed to AXGrabbed mapping in accordance with existing implementations (e.g. AxExpanded, AXVisited).
Getter reads the aria-grabbed DOM attribute as a string and compares it against "true"; any other value is "false", or the attribute being absent falls through to NO (0), so removing the attribute degrades safely instead of returning an unhandled value.
Added a browser test that queries the native accessibility interface for AXGrabbed and checks it returns YES (1) when aria-grabbed="true" is set, correctly flips to NO (0) after the attribute is mutated to "false", and stays NO (0) after the attribute is removed outright.
Manually tested with both Firefox's Accessibility Inspector and Xcode's Accessibility Inspector, AXGrabbed doesn't surface in either tool's UI even with the mapping in place, consistent with reporter's note that VO doesn't appear to expose this attribute in Safari either. Non-appearance looks like an inspector display limitation rather than a bug in this patch.
Differential Revision: https://phabricator.services.mozilla.com/D322694
This patch is adding only an additional test assertion to verify that
the aboutaddons-themes-mode moz-segmented-control does have the expected
fluent id (which is something that the parent patch, D323767, is taking care of).
Differential Revision: https://phabricator.services.mozilla.com/D323037
The light/dark/device group in the theme picker had no accessible name for screen readers, and its buttons had their role and selected state on a wrapper element instead of the button that gets focused.
Differential Revision: https://phabricator.services.mozilla.com/D323767
When "androidIntentArguments" was set via the capabilities, geckodriver
only used the client's values and skipped the default arguments
required to launch a GeckoView based application into a blank Gecko
window ("-a android.intent.action.VIEW", "-d about:blank", and for
the Fenix-family "--ez automationtest true" from bug 2064609).
The defaults are now merged in front of the client arguments, and each
default is only added when the client did not already provide the
corresponding flag, so explicit client values are never overridden.
Differential Revision: https://phabricator.services.mozilla.com/D322851
This reverts commit d5867b788e.
Revert "Bug 2068046 - Ensure avatar background color is set when picking default theme with Nova enabled r=mkennedy,mossop"
This reverts commit fd00da6176.
When Metal is used, the tensors are uploaded to the device in use. We don't
Need to keep the host copy.
This does wonder to RSS (roughly divides by two).
Differential Revision: https://phabricator.services.mozilla.com/D324041
The HWInference process' footprint was more or less entirely unaccounted for.
The size comes from the loader, through a new parakeet_capi_weights_bytes(),
and is kept in one process-wide number: only one session runs at a time. We'll
need to do something similar for llama.cpp, but it's clearer labeled as such, tying
the memory usage to the feature.
Differential Revision: https://phabricator.services.mozilla.com/D324040
Reports engine-ready, time to first word, end-of-stream flush latency,
real-time factor, and HWInference RSS, with the first session separated out as
it pays for the process starting up. Boot time is very small, cold vs. hot isn't
very large, but we want to know if we regress.
Audio is fed in real time over a MediaStreamTrack, so the real-time factor
comes from the engine's counters, not a wall clock the feed rate caps at 1.
Differential Revision: https://phabricator.services.mozilla.com/D324039
It was called directly from InitializeParakeetContext() and runs until the
session ends, so a profile showed a multi-second "Initialize parakeet
context" covering everything.
The thread isn't busy, this is just cosmetics, we don't expect more latency
because of this.
Differential Revision: https://phabricator.services.mozilla.com/D324037
SpeechRecognition.getPerfStats(), ChromeOnly, for perf tests: start() to the
engine being ready, to the first result, stop() to the end event, and the
audio fed to the model against the wall clock spent inside it.
The data is sent back on session end, which is enough for our purpose here.
Differential Revision: https://phabricator.services.mozilla.com/D324036
It opened on a roll call of proper nouns at -36dB mean, which the recognizer
mostly dropped. It now starts at "I am delighted to be here", and is
transcribed word for word.
test_parakeet_e2e.html fetched transcript.txt from the model server root,
which resolves to the repository root rather than here, so it never found it.
Differential Revision: https://phabricator.services.mozilla.com/D324035
browser.search.separatePrivateDefault is renamed to
browser.search.separatePrivateDefault.enabled, and its default is
intentionally changed from true to false as part of this rename. This
does not change behaviour: the feature remains gated behind
browser.search.separatePrivateDefault.featureGate (renamed from
.ui.enabled), which defaults to false, so .enabled is only consulted
once the feature gate is turned on.
Differential Revision: https://phabricator.services.mozilla.com/D321634
We switched how we're selecting theme foreground and background colors to make the profile avatars look the best for Nova specific themes. It turns out this causes contrast issues with some legacy/user generated themes, so this patch adds a check to determine which color selection logic we should follow.
Differential Revision: https://phabricator.services.mozilla.com/D324415
Issue: the jump to bottom chat button stops working after we send a second message.
Solution: it was behind the blur and needed a z-index to come to the top layer.
Differential Revision: https://phabricator.services.mozilla.com/D324437
VectorImpl's POD specialization copies appended ranges with a per-element
loop, on the grounds that append is usually given small ranges. It is also
how JSStringBuilder copies string segments: a samply profile of a
60000-char str.replaceAll spends 57.9% of the call in copyConstruct at
roughly 1.4 GB/s, against about 20 GB/s for the equivalent rope flatten.
Use PodCopy when T and U are the same type, which is the patch proposed in
comment 2 of this bug in 2012. PodCopy already carries the size and platform
heuristic measured in bug 933149 and bug 1967062, so ranges under 128
elements on Linux keep the loop they have today.
No caller can pass overlapping ranges to PodCopy's new assertion: every
moveConstruct site targets a fresh allocation or the opposite of inline and
heap storage, and an append whose source lies in the vector's own live range
ends at or before the destination, since the source must end by mLength and
the destination starts there.
Suppress a GCC 10 -Werror=stringop-overflow= false positive in PodCopy's
memcpy call. When Vector<char,32>::convertToHeapStorage inlines through
copyConstruct, GCC's value range propagation cannot prove mLength is bounded
by the 64-byte heap allocation, and _FORTIFY_SOURCE's __builtin___memcpy_chk
reports a spurious overflow. A diagnostic pragma on the memcpy call site is
the narrowest fix.
Differential Revision: https://phabricator.services.mozilla.com/D323825
On the previous commit, I swapped the pixel count vs max diff. We get
very few pixels but with a bit more fuzz than WebKit.
I guess I could also just remove some of the font dependencies here,
they seem unfortunate and not the point of the test.
Differential Revision: https://phabricator.services.mozilla.com/D324910
The dynamic theme task assumed a light system theme and failed on systems
using a dark theme. Pin ui.systemUsesDarkTheme with pushPrefEnv and run the
task once per system color scheme, per the suggestion in bug 2007944 comment 3.
Differential Revision: https://phabricator.services.mozilla.com/D324900
Selecting text inside a dialog drew a large opaque rectangle over the dialog and was hiding its content. The rectangle only appears when the text selection toolbar doesn't have enough space to display all actions, and draws an overflow menu at the end of the toolbar.
`BaseDialogStyle` sets `android:background` property, which is a View attribute. So every view created with the dialog's theme that does not set its own background inherits this background property. This has two visible effects:
- It paints the views inside the dialog and actually gives the dialog its expected color. It does not paint the dialog window background though, it looks like it does, because colored views are drawn on top of that background
- It paints the popup content view of the text selection toolbar. `LocalFloatingToolbarPopup` builds the popup content view as a LinearLayout and expects it to stay transparent. This view is drawn on top of the dialog and its size depends on how the toolbar overflows. It's the unexpected rectangle
It looks like the issue started with Bug 1974873 which changed `android:colorBackground` to `android:background` in both `BaseDialogStyle` and `BaseDialogStyle.Private`. With that change, every view in the dialog that doesn't have its own background color inherits this `android:background` value.
This patch moves the background color logic to a separate `alertDialogStyle`, which sets `backgroundTint`. Material 3 dialogs read this property and apply the color to the dialog window background only. No view inherits it, so this fixes the rectangle issue while preserving the dialog color.
- Light and dark modes rely on `BaseDialogStyle`, which is based on `ThemeOverlay.Material3.MaterialAlertDialog`. This theme sets a style (`alertDialogStyle`) whose `backgroundTint` defaults to `colorSurfaceContainerHigh`, so it is not needed to override the background tint in that case
- Private navigation mode (`BaseDialogStyle.Private`) must set `layer2` as the background color, which differs from the default color so an override (`MaterialAlertDialog.App.Private`) is needed
Differential Revision: https://phabricator.services.mozilla.com/D324623
The timeseries state keeps whatever a day's first run produced:
build_timeseries fills a window day only when it is absent from state.
That is right for the daily cron, where each day is seen once, but it
means re-running a day never reaches the roll-up -- the artifact is
replaced and the chart keeps the old numbers.
Add refill_dates, naming days to recompute from their artifacts, and
--timeseries-refill-dates on the task script to go with it. Those days'
artifacts are not local to the run, so the script fetches each from the
index first, preferring the build-date route a backfill publishes under
and falling back to the cron's pushdate routes. A day it cannot fetch is
skipped with a note rather than failing the run, leaving its state as it
was.
Exposed on the action as refill_dates. That run keeps the cron's index
routes and its timeseries step, since recomputing shared state is only
meaningful from a run that publishes it, and is refused alongside a
pinned date: a run for a past build date must not publish a roll-up
ending at that date.
Differential Revision: https://phabricator.services.mozilla.com/D323654
A run triggered through the bhr-aggregate action inherits the index
routes of the push it was triggered from, which include
gecko.v2.mozilla-central.latest.firefox.bhr-aggregate and that day's
pushdate route. The first is the build the dashboard shows by default
and the artifact the next cron run reads its timeseries state from; the
second is how the dashboard resolves a build date. Backfilling a past
day would therefore displace the real run for the day it was triggered
on. Strip the index routes and, when a date was given, publish under
gecko.v2.mozilla-central.bhr-aggregate.build.<YYYYMMDD> instead.
The roll-up is worse: build_timeseries ends the 365-day window at the
build date and deletes every state day outside it, so aggregating
20260802 today would drop three weeks of days from the state the cron
publishes, with no way to refill them -- those days' artifacts are not
local to the run. Custom-date runs now always set BHR_SKIP_TIMESERIES,
leaving the roll-up to a deliberate separate step.
Differential Revision: https://phabricator.services.mozilla.com/D323653
This function will be used in later parts. Keep AssemblerRISCVI::mv()
intact since it corresponds to an actual RISC-V pseudo-instruction.
Differential Revision: https://phabricator.services.mozilla.com/D324640
According to LoongLint, this elides ~2500 instructions (excluding
ma_liPatchable sites) on JetStream 3 and ~100 on Octane.
Differential Revision: https://phabricator.services.mozilla.com/D324823
This simplifies the implementation of the Imm32 variant with the new
ma_move, then add special-casing for ImmWord variant.
Differential Revision: https://phabricator.services.mozilla.com/D324822
Routing the padding and margins through variables computes to the values they had, except that the Windows menu icon's block margin is now split evenly across both sides so that a single variable can carry it, which leaves the item height alone and centers the icon in the line box.
Differential Revision: https://phabricator.services.mozilla.com/D324636
Behavior-neutral: every site that set the shorthand now sets the pair, and the shorthand is gone, so an override can no longer set padding that the block value doesn't see.
Differential Revision: https://phabricator.services.mozilla.com/D324633
This reverts commit fe1a8df6cc.
Revert "Bug 2042565: Improve non-AVX support in simple three-operand SIMD operations r=yury"
This reverts commit 97f332ce43.
Revert "Bug 1929128: Use SIMD for SkipUntilBitInTable r=jandem"
This reverts commit cbebf91f76.
Revert "Bug 2040802: Rename ENABLE_WASM_SIMD to ENABLE_JIT_SIMD r=yury"
This reverts commit f785e771e7.
This reverts commit 118bf6e068.
Revert "Bug 2069065 - Part 1: Move notification showing out of NotificationParent. r=saschanaz"
This reverts commit 64f3a67033.
ggml_metal_library_get_pipeline_mul_mv asks for a _short kernel variant when
ne00 < 32. On the macOS 15 machines the Metal compiler does not emit those
specializations from the vendored shader source, so the lookup fails with
MTLLibraryErrorDomain Code=5 "Function kernel_mul_mv_f32_f32_short was not
found in the library"
get_pipeline_mul_mv returns a null pipeline and the caller encodes it without
checking.
llama.cpp doesn't use this path, parakeet.cpp does, we can simply use the general
kernel, which lives in the same source, it is emitted everywhere, and handles any size.
Differential Revision: https://phabricator.services.mozilla.com/D324025
The Metal files were taken from an older llama.cpp than the revision moz.yaml
pins, which is why they had to be in "keep" rather than revendored.
This vendors the backend at 74ade527 instead, matching llama.cpp. At that rev,
it is split into a few files. The embedding of the shader source is unchanged: the
.metal file still has the __embed_ggml-common.h__ and ggml-metal-impl.h
placeholders generate_metal_embed.py substitutes. etc.
ggml-metal-device.m and ggml-metal-device.cpp would compile to the same object
name, so run_parser.py renames the former to ggml-metal-device-m.m, like it
already does for ggml.c and ggml-cpu.c.
Two patches are needed on top: <memory> for std::unique_ptr in ggml-metal.cpp,
and a guard around -[MTLSharedEvent waitUntilSignaledValue:timeoutMS:], which
is macOS 12 while we deploy to 10.15 (11.0 on aarch64).
`mach vendor --patch-mode check` now reproduces the tree.
Differential Revision: https://phabricator.services.mozilla.com/D322929
Several SupportsCodec/StrictSupportsCodec call sites duplicated the same
H264/VP8 hardware-support pref-gating logic inline, each paired with its own
MozPromise::Then() reject continuation that did nothing but forward the
error. Extract the gating into named, codec-dispatched functions and use
MozPromise::Map(), which forwards the reject value automatically, so the
promise continuation machinery is specialized once per function-pointer type
instead of once per near-identical inline lambda.
This may help reduce the binary size somewhat.
Differential Revision: https://phabricator.services.mozilla.com/D323393
Add async support queries through the encoder stack (PlatformEncoderModule,
RemoteEncoderModule, PEMFactory) and convert the WebRTC decode/encode glue
(WebrtcMediaDataDecoder, WebrtcVideoCodecFactory, MediaDataCodec, CodecInfo) to
resolve once the relevant remote process has reported accurate hardware
support. The MediaCapabilities WebRTC decode and encode paths and the
TestWebRTCCodecInfo gtests now use these; the superseded synchronous WebRTC
support paths are removed. WebRTC decode support reuses the cached
PDMFactorySupport singleton.
Differential Revision: https://phabricator.services.mozilla.com/D304787
fetch-onnxruntime-deps.sh ran curl without --fail, so an HTTP error body could be written to disk
in place of an archive while the task still exited zero. A try run hit exactly that: abseil-cpp
arrived as a 107 byte error page, the corrupt tarball was published as the onnxruntime-deps
artifact, and every onnxruntime toolchain then failed at configure time on the SHA1 that cmake
verifies anyway. deps.txt already carries a SHA1 for every entry, so the download loop now checks
it, and curl fails on HTTP errors and retries. The source tarball download gets the same curl
treatment.
The cached_task digest covered only the repo, revision and artifact name, so neither a fix to this
script nor a fresh push at the same revision could displace a bad artifact once it was indexed.
Hashing the script into the digest ties the artifact to the code that produced it. Fetch artifacts
are kept for a thousand years on level 3, so a silent corruption there would otherwise be
permanent.
Differential Revision: https://phabricator.services.mozilla.com/D318366
When both sides of a split view's margin or padding are subpixel values, there is no guarantee that both sides will round to the same value when painted on-screen.
To avoid such a scenario, (e.g. having 6px of margin on the left, and 5px on the right), round off the spacing calculations before passing them off to their respective CSS properties.
Removed margins from `.tab-background`, as these caused horizontal paddings to grow longer than the vertical paddings.
Differential Revision: https://phabricator.services.mozilla.com/D322338
`#pinned-tabs-container` was mistakenly using `--tab-pinned-min-width-expanded` to size its items, even for the non-expanded case.
Differential Revision: https://phabricator.services.mozilla.com/D322336
Watch() runs for every new geolocation request while the provider stays
started. While the portal has not delivered a position yet, each call
replaced the MLSFallback without shutting the previous one down, so its
NetworkGeolocationProvider stayed alive with its repeating timer and wifi
listener for the rest of the session.
Reuse the existing fallback instead, and add a gtest that counts the armed
fallback timers across repeated Watch() calls.
Differential Revision: https://phabricator.services.mozilla.com/D324916
Masking an int32 to its low byte or word with a constant bitwise AND is a
zero-extension: and r32, 0xff and and r32, 0xffff keep only the low bits and
clear everything above. movzbl / movzwl compute the identical value in three
bytes (four with a REX prefix); the AND needs five or six, since neither 0xff
nor 0xffff fits a sign-extended imm8 and the immediate is emitted as a full
imm32. visitModPowTwoI already lowers its power-of-two remainder masks this
way.
Fold the two masks in visitBitOpI's constant path, guarding the byte case on
single-byte registers exactly as visitModPowTwoI does (a source register with
no byte encoding on 32-bit x86 keeps the AND). The AND's flags are dead here:
a bitwise-AND feeding a branch lowers to a fused LBitAndAndBranch, so a plain
LBitOpI never has its flags read, and movzx -- which sets no flags -- is a
safe substitution.
An x86lint survey of a full JetStream 3 run counts 390 such sites before this
change and none after: every constant low-byte or low-word mask Ion emits is
now a movzx. A deterministic gbemu+crypto workload shows the same, 184 -> 0.
Found via x86lint.
Differential Revision: https://phabricator.services.mozilla.com/D324751
NurseryCellHeader::MakeValue packs an allocation site pointer and a trace
kind into one word, and since the site is aligned well enough to leave the
low two bits free the pack is an OR. JS::TraceKind::Object is zero, so for
object allocations that OR contributes nothing: the Baseline nursery
allocation path emits a dead "or rsi, 0x0", four bytes on x64. Every other
nursery-allocated kind has a non-zero tag and still needs it.
Guard the orPtr on the trace kind, matching the constant-header path a few
lines above, which already special-cases Object.
This is the register path, reached only from Baseline; Warp and the other
callers build the header word at compile time and store it whole.
An x86lint survey of a full JetStream 3 run counts 2,517 "redundant
OR/XOR zero" sites before this change and none after, all of them in
Baseline. On x86-64 this drops four bytes each although the the guard
removes it on every backend.
Found via x86lint.
Differential Revision: https://phabricator.services.mozilla.com/D324863
ensureToolbarOverflow() resized the window to kForceOverflowWidthPx and moved
four palette widgets into the navbar. That no longer leaves any slack now that
Nova is enabled on all channels (bug 2056186): Nova's chrome is narrower, and
the default navbar outside Nightly has one widget fewer, since sidebar-button
is only placed there when sidebar.revamp is enabled, which is Nightly-only.
The navbar then never overflows and callers waiting on its overflowing
attribute time out. DevEdition escaped this because developer-button takes the
place of that missing widget.
Move three more widgets so the helper overflows the narrowest default navbar
of any channel.
Differential Revision: https://phabricator.services.mozilla.com/D324632
What is left after the ones worth changing are changed: a bar whose visibility the transitions drive by id,
a sheet that paints its own background over the scrim, and a banner that sizes its own background. Each has
its reason written next to it.
The suppressions sit on the elements reported rather than on anything above them, so a ConstraintLayout
added later is still reported, and neither baseline carries this check any more.
Differential Revision: https://phabricator.services.mozilla.com/D318982
Every real cost this bug turned up had the same shape: a view that extends ConstraintLayout inflating a
layout rooted in another ConstraintLayout into itself, two where one would do, on every instance. Four
views did it, the earlier patches fix them, and nothing stops the next one being written, because the
check that counts ConstraintLayouts reads one file at a time and the two halves of this live in two.
So read both. When a view that extends ConstraintLayout inflates a layout into itself, whether through a
view binding, View.inflate or LayoutInflater.inflate, look the layout up and report if its root is a
ConstraintLayout. A binding is named after its layout, so the name says which file to open; the other two
forms name the resource directly. Only an inflation attached to the view itself counts, since that is the
one that nests.
The crash reporter is the one view left doing this, for the reason given when the others were fixed, and
carries a suppression saying so.
Differential Revision: https://phabricator.services.mozilla.com/D323265
The category is a title with a description under it, which was a ConstraintLayout holding a two-view
vertical chain. Seven of them sit in the panel, so the check reported six, and none of them was going to
be flattened into anything: they are siblings in a list, not nested.
What made them ConstraintLayouts was the component, not the screen, so change that instead. The two views
were already full width and stacked, and the horizontal bias they carried does nothing at that width.
The class needed the documentation detekt had been told to overlook, which it can have now rather than a
baseline entry that only matched while it extended what it used to.
Differential Revision: https://phabricator.services.mozilla.com/D318981
A message with a button under it does not need constraints, and the ConstraintLayout holding them was the
second one in the file. It is a sibling of the other one rather than nested inside it, so there was never
anything to flatten here, only a container that had been reached for out of habit.
The only thing that reads it sets isVisible, which does not care what kind of view it is.
Differential Revision: https://phabricator.services.mozilla.com/D318980
The three views were wrapped in a ConstraintLayout that did nothing but hold them, which the check counts
as a second one in the file. Nothing referred to the wrapper from code, and only the divider below it
referred to it at all, so the views move up a level unchanged.
The wrapper was as tall as the tallest of the three, and no single view reproduces that, so the divider
now follows a barrier across them instead. The two on the right centre on the label rather than on the
row, which is the same thing while the label is the tallest, and it is: it sets the minimum height the
row used to get.
Removing the wrapper's id is what turned up the rest of this. A test walking the add-ons list was finding
its rating bar by asking Fenix for an id named rating, which resolved only because this layout, which has
nothing to do with that list, happened to define the same name. The right numbers for the wrong reason,
and no longer any number at all once the name went. It asks the add-ons component now.
The same test reaches four more of that component's views the same way, through ids named title,
review_count and add_button that Fenix also happens to define. Those still work and would break the same
way, so they are pointed at the component too. Other views the robots find by an id named title really
are Fenix's own and are left alone.
Differential Revision: https://phabricator.services.mozilla.com/D318979
Each of these is a ConstraintLayout that inflates a layout rooted in a ConstraintLayout into itself, so
every one of them costs two where it needs one. The library row pays it on every row of every history and
bookmarks list. Every android-components view that does this was already written as a merge; these were
the ones left.
The check cannot see any of this, because the two halves live in different files, so neither of these is
a finding. They are the same mistake the delete browsing data row had.
The minimum height and the background the library row's discarded root carried move onto the view, which
makes the two rows that were setting the same minimum height themselves redundant.
The crash reporter has the same mistake and keeps it. Binding against a merge means binding against the
view itself rather than against a root of its own, and its tests hand it a copy of itself, which then has
nothing to find. It inflates once, when a tab crashes, so it is not worth the surgery.
Differential Revision: https://phabricator.services.mozilla.com/D318978
Two of the collection creation layouts are never shown. They are handed to ConstraintSet.clone(), which
inflates the whole file, keeps the constraints, visibility and alpha of the root's direct children, and
throws the rest away. The bottom bar in each was written out in full, three children and all, so that a
transition could read one view's constraints off it. Leave the one view.
The delete browsing data row is a ConstraintLayout that inflates a ConstraintLayout into itself, so every
row in the list carries two of them. The layout already had the tools:parentTag that only means anything
on a merge, and the tracking protection row three files over was already written that way, so follow it.
The minimum height moves onto the row itself, which is where it has to live once the root it was written
on is gone.
Neither changes what any of it looks like. The rows lose a view each and the two transitions lose four,
and the check that had been reporting the collection layouts has nothing left to report there.
Differential Revision: https://phabricator.services.mozilla.com/D318977
The check had two halves. The strict one counts the framework's ConstraintLayouts in a file, from a list of
two names that has not needed to change. The other warned whenever a view of ours that extends
ConstraintLayout shared a file with any other one, from a list written out by hand in 2020 that had drifted
the way such lists do: one entry named a class that has never existed under that package, another one that
has since moved to Compose, and four views added since were invisible to it.
Fixing the list is the wrong repair, because the warning is unactionable where it fires. It points at a
screen for using a shared component, and the screen can do nothing about what that component extends. Every
one of its fourteen baselined findings is that shape. Where the component itself was the problem, the fix
was in the component, in a file the warning never pointed at. So the warning goes, and its baseline entries
with it.
What is left is the strict check, unchanged, and tests for it, which it never had.
Differential Revision: https://phabricator.services.mozilla.com/D318976
Present the AutofillRecords credit card interface over the Application Services
autofill Store, so it can later back FormAutofillStorage.getCreditCards().
Nothing constructs it yet.
Most of that interface does not depend on the collection behind it, so it lands
in a new RustAutofillAdapterBase and the address adapter is converted to it --
19 of its 24 methods were identical bar the type name. Address behaviour is
unchanged.
The number is stored encrypted with only its last four digits in the clear, so
cc-number is a mask on read and the ciphertext is derived on write. A stored
record is therefore decrypted before it can be merged from, and the merged
record validated afterwards, because a number the caller did not restate
arrives from the stored side.
Encrypting a mask would store it in place of the card, so #encryptNumber
refuses one: every path that stores a number comes through it, including the
bulk import, which does not reach _validateRecord.
_recordForMigrationExport refuses one too, for the direction where the
receiving store does the encrypting.
The encryption is interim: OSKeyStore, the same mechanism and key as the JSON
store's cc-number-encrypted, so no new key is introduced. The bulk half has no
caller until the migration in bug 2068982.
Differential Revision: https://phabricator.services.mozilla.com/D323229
SelectVulkanDecoderPhysicalDevice used to vkCreateInstance and
vkDestroyInstance on every cache miss. Keep a process-wide instance
instead so later selects skip that cost. FFmpeg still creates its own
instance and device.
sMutex is per-LIBAV_VER and cannot guard these statics.
EnsureSharedVulkanInstance takes a file-local mutex and copies
instance and vkGetInstanceProcAddr out under it.
Differential Revision: https://phabricator.services.mozilla.com/D323687
Automatic update from web-platform-tests
Test that javascriptURLs is in the sanitizer config (#62421)
--
wpt-commits: 5a6adac4380ffc7a8592a9ce9b4b17b43bb13838
wpt-pr: 62421
Automatic update from web-platform-tests
Implement ::highlight(*) (#62235)
CSSWG decided to allow '*' as the argument of the ::highlight(); that
can style every registered custom highlight [1].
Parse the '*' delimiter token as the ::highlight() argument, store it as
CSSSelector::UniversalSelectorAtom(), which contributes 0 specificity.
Therefore, named custom highlights win conflicting declarations
regardless of source order.
Make ::highlight(*) match every named custom highlight under the normal
cascade algorithm. A new HasCustomHighlightUniversalSelector field in
computed_style_extra_fields records whether an element has a universal
selector, and StyleHighlightData stores the resolved related style.
Handle some extra cases explicitly:
- When the parent has no style for the named highlight but does have
::highlight(*), inherit from that.
[1] https://github.com/w3c/csswg-drafts/issues/9091
Spec PR: https://github.com/w3c/csswg-drafts/pull/14301
Intent to Prototype: https://groups.google.com/a/chromium.org/g/blink-dev/c/hEy4cr4iowU/m/ZW5l_bikAwAJ
Feature Entry: https://chromestatus.com/feature/5174965228929024
Bug: 408003366
Change-Id: I9c77fef6710a2450084d2cfcb70caceaeda8b988
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/8235619
Commit-Queue: Seokho Song <seokho@chromium.org>
Reviewed-by: Rune Lillesveen <futhark@chromium.org>
Reviewed-by: Stephen Chenney <schenney@chromium.org>
Cr-Commit-Position: refs/heads/main@{#1689587}
Co-authored-by: Seokho Song <seokho@chromium.org>
--
wpt-commits: 336915ca98b55be589fe4b61812f2c205cbb84f7
wpt-pr: 62235
Automatic update from web-platform-tests
HTML: img width/height when not rendered are density-corrected
See https://github.com/whatwg/html/pull/12840
--
wpt-commits: 18be932359511b7ad1c97e1af6b87997b25cbc4e
wpt-pr: 61080
Automatic update from web-platform-tests
Add more `<template for>` web features mappings (#62433)
* Create WEB_FEATURES.yml
* Rename html/semantics/scripting-1/the-template-element/template-for/html/dom/partial-updates/tentative/WEB_FEATURES.yml to html/semantics/scripting-1/the-template-element/template-for/html/dom/partial-updates/WEB_FEATURES.yml
* Rename html/semantics/scripting-1/the-template-element/template-for/html/dom/partial-updates/WEB_FEATURES.yml to html/semantics/scripting-1/the-template-element/template-for/WEB_FEATURES.yml
--
wpt-commits: e7122b73fb2a5a1bf3a6070033a76656a57baaeb
wpt-pr: 62433
Automatic update from web-platform-tests
Reland "Scroll anchor-positioned fixed boxes into view on focus"
This is a reland of commit a960d664cc91883da1ae77f1c27196cacc51c82b
The original CL was reverted due to flaky failures only in
virtual/fragmented-oof-in-cb. Added TestExpectations entries for those
tests.
Original change's description:
> Scroll anchor-positioned fixed boxes into view on focus
>
> Anchor-positioned fixed boxes still need to move with the anchor when
> the frame scrolls. scroll-into-view stopped bubbling as soon as it hit a
> position:fixed box, so the frame never got scrolled. This CL excludes
> anchor-positioned fixed boxes from that check.
>
> Bug: 469481151
> Change-Id: I01cc730bd029b58af43857b35749d39aba42ea6f
> Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/8123394
> Reviewed-by: David Bokan <bokan@chromium.org>
> Commit-Queue: Hyowon Kim <hyowon@igalia.com>
> Cr-Commit-Position: refs/heads/main@{#1686828}
Bug: 469481151
Change-Id: I28bec015142bf4bdd2a15dc4bac60ea07482430f
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/8311148
Reviewed-by: David Bokan <bokan@chromium.org>
Commit-Queue: Hyowon Kim <hyowon@igalia.com>
Cr-Commit-Position: refs/heads/main@{#1692098}
--
wpt-commits: 4a01b83e3b93b3e394f9f4f503b3152cf54098b8
wpt-pr: 62391
Automatic update from web-platform-tests
Add Payment Method Manifest WPTs for fetch options and status codes
This adds tests covering Payment Method Manifest fetch options
(credentials omission and Referer header) and HTTP response status code
handling. Tests added:
- PMI HEAD request omits credentials (cookies and authorization)
- Manifest GET request omits credentials (cookies and authorization)
- Manifest GET request sets Referer header to match PMI URL
- This test fails in Chrome, which is crbug.com/545843241
- HTTP 204 No Content response on initial PMI HEAD request succeeds
- HTTP 404 response on initial PMI HEAD request aborts manifest fetching
- HTTP 500 response on initial PMI HEAD request aborts manifest fetching
Bug: 552832440, 545843241
Change-Id: I8762c379aab36f272dcbf15feba270851a9fd856
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/8328669
Commit-Queue: Stephen McGruer <smcgruer@chromium.org>
Auto-Submit: Stephen McGruer <smcgruer@chromium.org>
Reviewed-by: Xuehui Chen <xuehuichen@google.com>
Commit-Queue: Xuehui Chen <xuehuichen@google.com>
Cr-Commit-Position: refs/heads/main@{#1691947}
--
wpt-commits: a1690333b93590aae0ca7942edaa31b118a0e608
wpt-pr: 62429
Automatic update from web-platform-tests
Fix flakiness in compression-dictionary/compressed-large-*.https.html
Use UUIDs in URLs to prevent potential race conditions with dictionary
registration, resource loading and cache clearing between
`compression_dictionary_promise_test`s.
Even with `run_wpt_tests.py --repeat=20`, I was enable to reproduce any
failure with compressed-large-resources-002.tentative.https.html, but
let's tentatively remove the failure annotation.
A similar issue was however observable in WebKit with equivalent command
`run-webkit-tests --repeat=4` and is fixed by this change.
Bug: 538228192, 40255884
Change-Id: Ib72f80f02a7a9b539cdb4c3627c1d4cabee684e4
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/8341989
Commit-Queue: Frédéric Wang Nélar <fwang@igalia.com>
Reviewed-by: Patrick Meenan <pmeenan@chromium.org>
Cr-Commit-Position: refs/heads/main@{#1691847}
--
wpt-commits: 9298d21d24c022a57b8c0b60b9a609fe6b684c62
wpt-pr: 62427
Automatic update from web-platform-tests
[compression-dictionary] Add a test for same-origin no-cors fetch
As of 2026/09/03, the PR against the fetch spec [1] says that
"HTTP-network compression-dictionary fetch" should fallback to
"HTTP-network fetch" if request's mode is "no-cors". However,
this seems to be a mistake since Chromium allows using compression
dictionaries for same-origin [2]. Chromium's behavior is already
implicitly covered by compressed-large-resources-001.tentative, which
checks "no-cors" fetches via img/script/link tags but this CL adds a
more straightforward test that is easier to compare against its
cross-origin version. The CL also adds dictionary ids to make the
test a bit more robust.
[1] https://github.com/whatwg/fetch/pull/1854
[2] https://source.chromium.org/chromium/chromium/src/+/main:services/network/cors/cors_url_loader.cc;l=366?q=LOAD_CAN_USE_SHARED_DICTIONARY&ss=chromium%2Fchromium%2Fsrc
Bug: 40255884
Change-Id: I879382048ed18d45b629a1b8ae2b5d0461d06cb3
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/8353624
Reviewed-by: Patrick Meenan <pmeenan@chromium.org>
Commit-Queue: Frédéric Wang Nélar <fwang@igalia.com>
Cr-Commit-Position: refs/heads/main@{#1691778}
--
wpt-commits: 2c385f65e4a4340bc6320b2745e86641b5710346
wpt-pr: 62428
Automatic update from web-platform-tests
[core-aam] Find the test document without the embeds relation (#62251)
Look the document up with a Collection query for the document roles,
falling back to a tree walk when a browser does not answer
Collection queries, and use the document url to tell the test
document apart from the other documents a browser exposes.
--
wpt-commits: 223b3686e9c2d445b1accaa4d5c82f687c997ac3
wpt-pr: 62251
Automatic update from web-platform-tests
Built-In AI: Guard Translator creation with availability check in WPTs
Add an `assert_implements_optional` guard to `createTranslator()` so
that WPT tests yield `PRECONDITION_FAILED` instead of failing with
unhandled `NotSupportedError` rejections in environments without
language packages installed.
Bug: 545757079, 376789810
Change-Id: Iccda190677dea6022444c82d307aa3e94cacc0c9
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/8263570
Auto-Submit: Isaac Ahouma <iahouma@google.com>
Reviewed-by: Jingyun Liu <jingyun@google.com>
Commit-Queue: Isaac Ahouma <iahouma@google.com>
Cr-Commit-Position: refs/heads/main@{#1683346}
--
wpt-commits: 07d3da1faedd53a4c35d0d675d7da1282f4f441d
wpt-pr: 62073
Automatic update from web-platform-tests
ruby: Propagate block-end annotation space in multicol containers
Previously, block-end annotation space propagation was disabled for
children of balanced multicol containers to avoid issues in an existing
WPT test about column balancing. This CL enables it.
This CL fixes BlockLayoutAlgorithm::FinishLayout() so that to compute
the available annotation space correctly for fragmented containers.
Bug: 445727139, 538260158
Change-Id: I27848eba96cb7f8ae8eb775d725455e0bc8d8748
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/8294040
Commit-Queue: Morten Stenshorne <mstensho@chromium.org>
Auto-Submit: Kent Tamura <tkent@chromium.org>
Reviewed-by: Morten Stenshorne <mstensho@chromium.org>
Cr-Commit-Position: refs/heads/main@{#1691451}
--
wpt-commits: a1e944e7a879854494e1a041a8ad1e4a8ae28ab1
wpt-pr: 62422
Automatic update from web-platform-tests
WebNN: Mark GATHER as float16-capable on LiteRT GPU delegate
GATHER was serialized as not supporting float16, so a float16 input
got a DEQUANTIZE inserted in front of it. The ML Drift delegate folds
that DEQUANTIZE away, which leaves GATHER reading a float16 input into
the float32 destination the graph declared. Its model builder rejects
that with "Input / output dtype mismatch", so the node and its
DEQUANTIZE drop to CPU and the delegated partition is split.
GATHER in ML Drift is a pure lookup [1]: it copies input elements
through unchanged, so it can carry float16 the way reshape already
does. Marking it float16-capable leaves the conversion on the output,
where the delegate fuses it into the gather kernel instead of
materializing a float32 copy of the whole input.
Adds a "conv2d default + gather / float16" WPT case. Conv2d is not
float16-capable, so its float16 output is serialized as float32;
gather then reads a float32 input while its own output operand is
float16 and is the graph output, which is the case the output type
override covers.
[1]: https://github.com/google-ai-edge/LiteRT/pull/9682
Bug: 534847488
Change-Id: I2758cb3e305e02edb568ba3a302adb5409cfafc1
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/8345429
Commit-Queue: Hu, Ningxin <ningxin.hu@intel.com>
Reviewed-by: Reilly Grant <reillyg@chromium.org>
Cr-Commit-Position: refs/heads/main@{#1691345}
--
wpt-commits: c4781704fb6f7829bab44c1dbbad3cca8cc7140e
wpt-pr: 62412
Automatic update from web-platform-tests
WebTransport: Implement WebTransport reliability attributes
Expose WebTransport.reliability with the state transitions required by
the WebTransport specification. The value starts as pending and changes
to supports-unreliable after Chromium establishes its HTTP/3 transport.
Also expose WebTransport.supportsReliableOnly as false because Chromium
does not currently implement WebTransport over a reliable-only
transport. Gate both attributes behind the experimental
WebTransportReliability runtime feature. Update the IDL harness,
Web-exposed interface, and Android WebView expectations.
chrome status entry - https://chromestatus.com/feature/5094058497277952
Bug: 545636884
Change-Id: I73f603e6d43506efe2a5e1de1e1c77fc90c12bad
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/8237894
Reviewed-by: Nidhi Jaju <nidhijaju@chromium.org>
Commit-Queue: Monica Chintala <monicach@microsoft.com>
Reviewed-by: Liang Zhao <lzhao@microsoft.com>
Reviewed-by: Alison Maher <almaher@microsoft.com>
Cr-Commit-Position: refs/heads/main@{#1690895}
--
wpt-commits: ddfa5ac3420c3ebf7b8d19e9b1945ca37ed773cd
wpt-pr: 62362
Automatic update from web-platform-tests
Fix crash on RTL caret offset before a run's first glyph
If a ligature glyph is composed across an inline boundary, the glyph
will end up getting owned by the first character (outside the boundary),
leaving the others without an owner within their run. The RTL walking
logic did not account for this (edge) case, so this change adds a simple
check to handle it, and a test that checks basic cursor validity in this
scenario (which crashes without this fix).
BUG: 472563267
Change-Id: I67e644c8f00b5541777cd41ba9dc92aed5192ac5
FIXED: 483936080
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/8309212
Commit-Queue: Hoch Hochkeppel <mhochk@microsoft.com>
Reviewed-by: Koji Ishii <kojii@chromium.org>
Cr-Commit-Position: refs/heads/main@{#1690877}
--
wpt-commits: 105b6a3a5d94003cac94dec460f017e47ea77b4d
wpt-pr: 62381
Automatic update from web-platform-tests
WebGL: Add drawingBufferToneMapping interface
Implement the WebGL drawingBufferToneMapping interface, gated on the
experimental WebGLToneMapping runtime feature flag.
The feature is described at:
https://github.com/w3c-cg/ColorWeb-CG/blob/main/webgl-drawing-buffer-tone-map.md
It is a part of the larger HDR proposal at:
https://github.com/w3c-cg/ColorWeb-CG/blob/main/hdr-big-picture.md
The function is a combined getter-setter (takes an optional
CanvasToneMapping argument, returns the state).
The function is expected to destroy the color buffer's contents. This
may not be strictly necessary, but mirrors the capabilities in WebGPU,
and the behavior of setting the drawingBufferColorSpace attribute. Add a
test for this (mirroring the color space test).
Add WPT test external/wpt/webgl/drawingBufferToneMapping.html and update
webexposed global interface expectations.
TAG=agy
CONV=9f2c857b-3ae8-4048-ab49-db1109f50272
Bug: 555806830
Change-Id: If5908fcb910ee110a949b47663d905e526ca53e9
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/8330328
Reviewed-by: Philip Jägenstedt <foolip@chromium.org>
Commit-Queue: ccameron chromium <ccameron@chromium.org>
Reviewed-by: Kai Ninomiya <kainino@chromium.org>
Cr-Commit-Position: refs/heads/main@{#1690875}
--
wpt-commits: 341432dac3fa5d5edc9fef9c7977bf51cd325078
wpt-pr: 62379
Automatic update from web-platform-tests
sw.https.window.js is expecting a specific range request generation behaviour from media loading engines. (#62313)
WebKit engine does not behave as expected by the test, hence a timeout.
We update the test to move from a timeout to a failure.
--
wpt-commits: 41398349193defe47d2325f8aaaa0088d04fc2a4
wpt-pr: 62313
Automatic update from web-platform-tests
[Interop 2026] Advance MediaStream currentTime during playback (#62270)
Track elapsed playback time for MediaStream-backed media elements instead
of deriving currentTime from the latest received media frame. This keeps
currentTime advancing while the element plays even when a remote sender is
inactive, and preserves the accumulated time across pauses.
Correct the WPT helper so its audio cases create an audio track, and add
unit coverage for play, pause, and resume behavior.
Bug: None
Change-Id: I6e718c08395aaab82586b5a4225c0f029d8b8e84
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/8309752
Reviewed-by: Johannes Kron <kron@chromium.org>
Reviewed-by: Guido Urdaneta <guidou@chromium.org>
Commit-Queue: Guido Urdaneta <guidou@chromium.org>
Cr-Commit-Position: refs/heads/main@{#1687921}
Co-authored-by: Michael Reeves <michael.reeves077@gmail.com>
--
wpt-commits: d97bbe4aed91b88c94fe26800a13e004e337a02b
wpt-pr: 62270
Automatic update from web-platform-tests
Fix missing line break before entering unicode-bidi scope
Prior to this patch, LayoutNG's LineBreaker::HandleBidiControlItem()
invokes ICU to find the break opportunity only when exiting a bidi
scope. It ignores opportunities when entering such a scope, e.g. at
unicode-bidi: isolate or <bdi> boundaries.
That's fine when preceded by a breakable space, but is problematic when
a character that allows a break to follow is used, such as the hyphen-
minus. The bidi control characters injected by inline_items_builder.cc
belong to UAX#14 line break class CM, which should get combined with the
preceding base characters and ignored per UAX#14 LB9.
This patch adds the line break opportunity check when entering a bidi
scope, gated by feature flag LineBreakBidiControlEnter.
Fixed: 477829708
Change-Id: Ie6bcfc3c77a6afb967d5348e45be3d3dde3849a3
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/8284218
Commit-Queue: Kent Tamura <tkent@chromium.org>
Reviewed-by: Koji Ishii <kojii@chromium.org>
Auto-Submit: Charles Zhang <csalinezh@gmail.com>
Reviewed-by: Kent Tamura <tkent@chromium.org>
Cr-Commit-Position: refs/heads/main@{#1691195}
--
wpt-commits: 0ea9f2aac339023384f279aca8a034775117445f
wpt-pr: 62411
Automatic update from web-platform-tests
[CE] Restrict script-initiated focus on capability elements
Internal programmatic focus paths, such as modal dialog transitions or
popover autofocus, reach this method with `FocusType::kNone`. This
allowed capability elements to acquire focus without transient user
activation, bypassing safeguards. By tracking `FocusTrigger` instead,
internal script-driven invocations are properly captured and blocked
unless user activation is present.
Fixed: 540076586, 344739595
Change-Id: I5caec2bab0d2817f17b3e9f458e6da773b6761de
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/8328459
Reviewed-by: Dominic Farolino <dom@chromium.org>
Commit-Queue: Thomas Nguyen <tungnh@chromium.org>
Cr-Commit-Position: refs/heads/main@{#1691080}
--
wpt-commits: a4fcd77aaa840712ae63c226a2256715d8e1a3d6
wpt-pr: 62408
Automatic update from web-platform-tests
Deflake two wpt/svg/animations/animateMotion-path-*.html tests
Wait for 'load' before running any promise_test()s to ensure that the
SMIL timeline has started.
Fixed: 555949816
Change-Id: I2107b0b79d78bcc7b193c318e48689d153af293a
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/8347167
Auto-Submit: Fredrik Söderquist <fs@opera.com>
Reviewed-by: Philip Rogers <pdr@chromium.org>
Commit-Queue: Philip Rogers <pdr@chromium.org>
Cr-Commit-Position: refs/heads/main@{#1690955}
--
wpt-commits: 8fdda8ce4c5b08230b596f97e86ed509c408d065
wpt-pr: 62409
Automatic update from web-platform-tests
[Extensions] Implement runtime.onEnabled lifecycle event
Currently, extensions have no standard lifecycle event to detect when
they are re-enabled after being disabled by the user or system. While
runtime.onInstalled fires on installation and update and
runtime.onStartup fires on browser profile startup, enabling an
extension does not trigger a dedicated notification to the extension.
With this change, extensions can listen to runtime.onEnabled, which
fires whenever an extension transitions from a disabled state to an
enabled state while the browser is running.
TAG=agy
CONV=852bdb46-5859-4cdd-9d25-ef2e63da3746
Low-Coverage-Reason: COVERAGE_UNDERREPORTED logic executed via extension doesn't seem to get reported.
Fixed: 550432518
Change-Id: I277fd4e05aa4e1e15929b006f6d95347fc510057
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/8275812
Auto-Submit: Justin Lulejian <jlulejian@chromium.org>
Commit-Queue: Justin Lulejian <jlulejian@chromium.org>
Reviewed-by: Tim <tjudkins@chromium.org>
Cr-Commit-Position: refs/heads/main@{#1690907}
--
wpt-commits: d0c38285b53a93f9cd0774726807a49b1df851c7
wpt-pr: 62407
Automatic update from web-platform-tests
[line-clamp] In displaced ellipses, only root inlines have a strut
Line-clamp ellipses behave as if they had `line-height: 0`, so they
never grow the line they're added to. However, when the ellipsis
displaces a whole line, to avoid that line having zero size, the root
inline box has a strut (i.e. it adds a corresponding height to the
line), but other open inline boxes don't.
In our implementation of displaced ellipses, however, we were
triggering strict line height, meaning that all struts corresponding
to open inline boxes had a strut. Instead, this CL changes the
`line_height_quirk` boolean argument of
`InlineLayoutStateStack::OnBeginPlaceItems` to a `LineHeightMode` enum
with a variant for the line-clamp displaced ellipsis, which behaves
like the line-height quirk (not adding struts) except for the root
inline box.
Bug: 40336192, 543375422
Change-Id: Ie57e81086826032d6301c8bb4931b0e31ec565a9
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/8287666
Commit-Queue: Andreu Botella <abotella@igalia.com>
Reviewed-by: Koji Ishii <kojii@chromium.org>
Cr-Commit-Position: refs/heads/main@{#1690876}
--
wpt-commits: ed1909ed6cd48167b3fa0f01f38538bcc9cd3090
wpt-pr: 62395
Automatic update from web-platform-tests
[Masonry] Implement baseline alignment for subgridded items
This CL implements baseline alignment for items subgridded into a
grid-lanes container along its grid (subgridded) axis, so they
participate in the container's baseline alignment.
Subgridded items are skipped by the container's placement loop because
they are laid out later by their own subgrid, so their baselines are
never gathered there. This CL measures and stores those baselines
separately during the baseline calculation phase, so the subgridded
items are aligned to the container's shared grid-axis baseline.
Adds nested subgrids baseline tests, and clears the now-passing entries
from TestExpectations.
Bug: 343257585
Change-Id: Ief1de5fbe76aa3a6efd747c7f49f0955de3ff47b
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/8223162
Commit-Queue: Yanling Wang <yanlingwang@microsoft.com>
Reviewed-by: Celeste Pan <celestepan@microsoft.com>
Reviewed-by: Ian Kilpatrick <ikilpatrick@chromium.org>
Reviewed-by: Kurt Catti-Schmidt <kschmi@microsoft.com>
Cr-Commit-Position: refs/heads/main@{#1683558}
--
wpt-commits: 88da41daeb1bfcdc75d000c1edf9f4f9a7b6bfae
wpt-pr: 61957
Automatic update from web-platform-tests
Add parameterized toDataURL color conversion WPT test
Use the same parameter set and test pattern as the getImageData tests.
Remove individual redundant toDataURL tests superseded by this unified
test.
TAG=agy
CONV=3da4bac4-8ad7-46e9-969f-5aa84b7a5620
Bug: 454152417
Change-Id: Ic2be8b406008168419241eef199e16a3ffbbc969
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/8314209
Reviewed-by: Philip Rogers <pdr@chromium.org>
Commit-Queue: ccameron chromium <ccameron@chromium.org>
Cr-Commit-Position: refs/heads/main@{#1690327}
--
wpt-commits: 2b4dfe72cc8b66ab100b8b659e8881facd6c4e0f
wpt-pr: 62393
Automatic update from web-platform-tests
Fix#62372: give each GitHub Actions wptreport a unique basename
This "regressed" with 10a4cd69c6, when we started sharding by test
type, which meant we now had multiple chunks numbered 1.
("Regressed" in quotation marks because this isn't really a bug on our
side: it's a bug on the consuming side.)
--
wpt-commits: 7e3d005d7769cdcd196344ba39f27e74c99ccda7
wpt-pr: 62374
Automatic update from web-platform-tests
sttf: Split find-range-from-text-directive.html into subtests.
This is flaky timing out on the bots. Locally each run for the one test
takes about 17 seconds. After the split, each of the subtests takes
about 1.5 seconds. This should prevent bot timeouts.
R=bokan@chromium.org
Bug: 553338116
Change-Id: Iabf45f590d4318b88b6296b335ce3ab1ae45bc3d
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/8329047
Reviewed-by: Rick Byers <rbyers@chromium.org>
Commit-Queue: Vladimir Levin <vmpstr@chromium.org>
Reviewed-by: David Bokan <bokan@chromium.org>
Cr-Commit-Position: refs/heads/main@{#1690710}
--
wpt-commits: 6ec9fd59f6526960bfdda514afd2325511d766fe
wpt-pr: 62392
Automatic update from web-platform-tests
WebDriver BiDi: Await user-context file dialog assertions
Await the asynchronous file-dialog assertion helpers in the
browser.createUserContext unhandled prompt behavior WPT.
Previously, the test returned coroutine objects without executing their
bodies, so the accept, dismiss, and ignore cases could report success
without checking whether the picker was canceled. Running the assertions
also exposes existing host behavior for ignore; this CL does not change
product behavior or expectations.
Bug: 539194312
Change-Id: I0af5a6f080aea3bd27795391f5ce50f857722aaa
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/8152279
Reviewed-by: Alex Rudenko <alexrudenko@chromium.org>
Commit-Queue: Julio Piubello <julio@gitstart.com>
Reviewed-by: Maksim Sadym <sadym@chromium.org>
Cr-Commit-Position: refs/heads/main@{#1690634}
--
wpt-commits: 3f6b09ae3ed55280074645ce38e9002f52fc60a8
wpt-pr: 62383
Automatic update from web-platform-tests
FileReader: Suppress stale loadend after reentrant read
Do not fire loadend for a completed, aborted, or failed read when its terminal event handler starts a new read on the same FileReader.
Add regression coverage for reentrant reads from abort, load, and error handlers.
Bug: 40763894
Change-Id: Ie51c5c9652f85e3feaeccc5f9591ddea35f72801
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/8300812
Reviewed-by: Rakina Zata Amni <rakina@chromium.org>
Commit-Queue: Amos Lim <amoseui@chromium.org>
Reviewed-by: Fergal Daly <fergal@chromium.org>
Cr-Commit-Position: refs/heads/main@{#1690598}
--
wpt-commits: 666797a05cd728e328bc2161fe58a46ad11bfcb8
wpt-pr: 62349
Automatic update from web-platform-tests
Reset pending selected scrollmarker on removal
A removed ScrollMarkerPseudoElement cleared the selected_marker_ of the
group if that matched the removed marker. We did not check
pending_selected_marker_, which could lead to a disconnected pending
marker being promoted as the selected marker in
ApplyPendingScrollMarker().
This lead to a crash when calling
LayoutTreeBuilderTraversal::ComparePreorderTreePosition on elements not
in the flat tree.
Bug: 533050757
Change-Id: I8540787e3aa7fc6da7376daae027e4e91079a351
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/8331127
Reviewed-by: Morten Stenshorne <mstensho@chromium.org>
Commit-Queue: Rune Lillesveen <futhark@chromium.org>
Cr-Commit-Position: refs/heads/main@{#1690507}
--
wpt-commits: 8a0ace20bde348b1e5bda0ddd1527b161603b278
wpt-pr: 62382
Automatic update from web-platform-tests
Add DownloadObserver to Semantic Embedder (#61589)
This CL implements the DownloadObserver and on-demand downloading
for the Semantic Embedder API.
Key changes:
1. Download Progress Observer: Connects the Blink CreateMonitor down
through the AIManager Mojo interface to the
AISemanticEmbedderServiceLauncher, allowing the web page to track
component download progress.
2. On-Demand Downloading: Removes the unconditional startup
registration of the AI Embeddings Component. The component is now
dynamically registered and downloaded on-demand only when a website
explicitly calls SemanticEmbedder.create().
3. Background Download Resumption: Introduces the
prefs::kIsAIEmbeddingsDownloadEligible local state preference.
Once a user initiates a download, this pref ensures the component
is registered on subsequent browser startups, allowing the
Component Update Service to automatically resume and finish the
download in the background.
4. Robust Error Handling: Updates the on-demand update callback to
properly propagate update_client::Error codes. If a download
fails, the error is caught and Javascript promises are immediately
rejected, preventing hangs.
5. WPT Timeout Fixes: Rewrites testCreateMonitorWithAbortAt in util.js
to trigger based on event counts rather than brittle hardcoded mock
byte values.
Bug: 428233906
Change-Id: I9bfe293f33a47263e7a534ce2bfc7fa4119bb936
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/8092081
Reviewed-by: Jingyun Liu <jingyun@google.com>
Reviewed-by: Noah Rose Ledesma <noahrose@google.com>
Commit-Queue: Ian Zhao <yinguang@google.com>
Reviewed-by: Mike Wasserman <msw@chromium.org>
Reviewed-by: Fred Shih <ffred@chromium.org>
Reviewed-by: Steven Holte <holte@chromium.org>
Cr-Commit-Position: refs/heads/main@{#1669825}
Co-authored-by: Ian Zhao <yinguang@google.com>
--
wpt-commits: bd6829a4066abc9603c167271fed0b233638b4f4
wpt-pr: 61589
Automatic update from web-platform-tests
Fix mismatched tags in inert WPTs (#61781)
Correct mismatched closing tags in inert focus tests so their containers
have the intended DOM structure. This exposes obsolete Chromium-specific
Blink plugin elements that are no longer focusable after inertness is
removed. Remove those non-portable elements while retaining coverage
through standard focusable HTML controls.
Bug: 542686202
Change-Id: I61b14405d06423459f8601ccbf1f17c77a55e82b
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/8197604
Reviewed-by: Rune Lillesveen <futhark@chromium.org>
Commit-Queue: Fernando Fiori <ffiori@microsoft.com>
Cr-Commit-Position: refs/heads/main@{#1675028}
Co-authored-by: Fernando Fiori <ffiori@microsoft.com>
--
wpt-commits: 0fa3a989dc092fbac8b93653b0cbad492e685187
wpt-pr: 61781
Automatic update from web-platform-tests
Fix malformed markup in CSS WPTs (#61789)
Correct mismatched closing tags and a misspelled link element in CSS and
forced-colors WPTs. This restores the intended DOM structure without
changing the tests' coverage.
Bug: 542686202
Change-Id: I73d6234d78564185fee66b8913636c91ed8e61ac
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/8200955
Auto-Submit: Fernando Fiori <ffiori@microsoft.com>
Reviewed-by: Fernando Fiori <ffiori@microsoft.com>
Reviewed-by: Munira Tursunova <moonira@google.com>
Commit-Queue: Fernando Fiori <ffiori@microsoft.com>
Cr-Commit-Position: refs/heads/main@{#1675033}
Co-authored-by: Fernando Fiori <ffiori@microsoft.com>
--
wpt-commits: a6218de354fb805968c13f8f825ca536acc0d438
wpt-pr: 61789
Automatic update from web-platform-tests
Add tests for the origin of documents created by the parsing APIs
document.domain is the only way to directly observe the origin of a document
without a browsing context, and it was untested for these APIs.
For https://github.com/whatwg/html/pull/12881
--
wpt-commits: 7b4baa3afff1c313269dd778c47ce1eeb93f2c61
wpt-pr: 62388
Automatic update from web-platform-tests
Disable the `FirstLineTextMetrics` runtime flag
This runtime flag was introduced by crrev.com/c/6792103 to
match CSS2 and Gecko. But discussion[1] discovered that the
spec was changed to match old Blink (before the flag) and
WebKit[2][3].
This patch disables the flag to match the current spec and
WebKit.
The flag was enabled one year ago, and no regressions were
reported so far.
Adjusted `first-line-line-height-002` test to match the
current spec. This test was added to help interop of the old
behavior by [4].
`first-line-line-height-003` added by the CL above was
removed, as `002` covers the behavior.
[1]: https://github.com/web-platform-tests/wpt/pull/62271
[2]: https://github.com/w3c/csswg-drafts/issues/2282
[3]: https://github.com/w3c/csswg-drafts/issues/1384
[4]: https://bugzilla.mozilla.org/show_bug.cgi?id=1742586
Bug: 41362700, 548482066
Change-Id: I06dec00a9d9f823f394bdc7bbd22c6d8c2e6bb50
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/8315592
Reviewed-by: Ian Kilpatrick <ikilpatrick@chromium.org>
Commit-Queue: Koji Ishii <kojii@chromium.org>
Cr-Commit-Position: refs/heads/main@{#1690441}
--
wpt-commits: 05fffeacb7c7d7bdafac267ff3946f2f923a737a
wpt-pr: 62378
Automatic update from web-platform-tests
Add parameterized toBlob color conversion WPT test
Use the same parameter set and test pattern as the getImageData tests.
Remove individual redundant toBlob tests superseded by this unified
test.
TAG=agy
CONV=3da4bac4-8ad7-46e9-969f-5aa84b7a5620
Bug: 454152417
Change-Id: I170424c0de4c318d5528efc957795903cc63cc6d
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/8312949
Commit-Queue: ccameron chromium <ccameron@chromium.org>
Reviewed-by: Philip Rogers <pdr@chromium.org>
Cr-Commit-Position: refs/heads/main@{#1690326}
--
wpt-commits: 13a6aa64b41cdbac83569ba7665f3a81e658fc4d
wpt-pr: 62380
Automatic update from web-platform-tests
Add new tests to check that thresholds is FrozenArray
Fixes https://github.com/w3c/IntersectionObserver/issues/162
--
wpt-commits: 7addae03195ff8f409cac611bf46351131d320f0
wpt-pr: 34396
VisualViewportScrollEvent's constructor posted itself to the pres shell, and so
did the constructor of its base class VisualViewportScrollEndEvent, so every
visual viewport scroll event landed in the pending scroll events twice. The
duplicate is harmless today only because firing the first copy revokes the
event. Post from PostScrollEvent()/PostScrollEndEvent() instead, once per
event.
Differential Revision: https://phabricator.services.mozilla.com/D324809
The addon reads its Glean metric as soon as browser-idle-startup-tasks-finished
fires. That notification says nothing about FOG, which is initialized by a
separate startup idle task, so the read can land before initializeFOG has run.
A blocking Glean read that early does not return nothing, it deadlocks the main
thread. The browser then sits in startup_about_home_paint cycle 1/20 until the
task is killed, with no crash and no stack. The race is pre-existing, but Part 1
makes it reliable: it moves the notification onto the thread-level idle queue,
which puts it ahead of initializeFOG.
Wait on nsIFOG.initialized from Part 3 before the read; recording is buffered,
so the measurement survives. Bounded at 15s, half the outputTimeout ffsetup
gives the warmup run that also loads this addon, and gives up with
TEST-UNEXPECTED-FAIL rather than burning the task. The cached and
realworld_webextensions suites share the addon and are fixed too.
Differential Revision: https://phabricator.services.mozilla.com/D324617
test_ping_submitted and test_new_tab_on_restore read Glean metrics as soon as
the browser reports itself started up. That signal
(browser-idle-startup-tasks-finished, which is what Marionette waits on) says
nothing about FOG, which is initialized from a startup idle task, so the read
can land while Glean is still pre-init.
That is not a slow read, it is an unrecoverable hang: block_on_dispatcher posts
its barrier to the unbounded queue while the dispatcher worker is still parked
on the pre-init channel, and the queue is only flushed by initializeFOG, which
needs the main thread. So a blocking Glean read from the main thread in that
window deadlocks the browser, with no crash and no stack.
The race itself is pre-existing: FOG is initialized by StartupTelemetry's
browser-idle-startup consumer, behind awaits on UsageReporting and
TelemetryReportingPolicy, so it could always finish after the notification.
Part 1 is what makes it reproduce. Porting _schedulePerWindowIdleTasks to
category-manager invocation replaces window.requestIdleCallback with
ChromeUtils.idleDispatch, so the per-window tasks and the notification that
follows them move off the window's idle callback list and onto the
thread-level idle queue that browser-idle-startup already uses. That changes
when the notification fires relative to initializeFOG, and the tests started
hanging instead of racing benignly.
Expose whether initializeFOG has been called, and wait for it before each read.
Differential Revision: https://phabricator.services.mozilla.com/D323262
Invoking browser-window-idle-tasks with idleDispatch changes when
browser-startup-idle-tasks-finished fires, so the urlbar focus-ring settle now
sometimes lands inside the window that browser_startup_flicker.js records. The
flicker is pre-existing and intermittent (~15% on linux debug); add a targeted
allowlist entry matching the urlbar box, and track removal in a follow-up.
Differential Revision: https://phabricator.services.mozilla.com/D321518
Move the per-window idle inits in gBrowserInit._schedulePerWindowIdleTasks to a
new browser-window-idle-tasks category, continuing Bug 2036714, Bug 2039199 and
Bug 2045665. The category is invoked with idleDispatch: true.
callModulesFromCategory now drops a consumer when its jsGlobal is a window that
has closed by the time the idle task runs. Without this, a window that closes
before its idle inits run gets re-initialized after its unload teardown and
leaks (browser_windowclose.js / browser_tabdetach.js).
Teardown moves to the browser-window-unload categories, and the download init
moves into DownloadsCommon.initializeForWindow.
Differential Revision: https://phabricator.services.mozilla.com/D310625
LoginHelper.requestReauth() returns without a `telemetryEvent` when it gives
up because a primary password prompt is already open. Two of its callers
destructure that value unconditionally and throw a TypeError instead of
exporting the passwords, in about:logins and in the contextual password
manager.
Move the recording into LoginHelper next to requestReauth(), where it can skip
the missing event, and use it from both callers.
No test: reproducing this needs a second primary password prompt to be open at
the moment the export is started.
Differential Revision: https://phabricator.services.mozilla.com/D324587
The only prompt-related probe so far is pwmgr.reauthenticate_master_password.
It is built by LoginHelper.requestReauth() and recorded by its callers, so it
only covers the explicit re-authentication gate, and only where the caller
bothers to record the event it gets back. The prompts that come out of the
storage back-ends, which is where most of them happen, are not measured at
all: neither crypto-SDR nor the Rust store's PrimaryPasswordAuthenticator
record anything.
Add pwmgr.primary_password_prompt, recorded at all three places that can put
the dialog on screen, with a `source` telling them apart and the result of the
prompt. reauthenticate_master_password is left alone.
The Rust key manager asks getPrimaryPassword() for a new password after a wrong
one, so each of its dialogs is recorded separately, including the wrong_password
attempts. NSS re-prompts internally on the other two paths, so a single event
there can stand for several dialogs; the metric description spells that out.
Differential Revision: https://phabricator.services.mozilla.com/D324586
frame->PresContext()->GetRootPresContext() can return null for a popup that is
still in the menu chain. Bug 1876009 was a real crash from exactly that, in
RemoveMenuChainItem in this file: an open popup's pres shell gets destroyed, the
popup is still in the chain when its root pres context is requested, and the
fix was to null-check it. Every other caller here and in nsMenuPopupFrame.cpp
guards it; PaintPopups did not.
Also guard nsIWidget::GetWindowRenderer(). It deliberately returns null once
mShutdownObserver is gone, so that a LayerManager is not re-created during
shutdown, and renderer->AsFallback() derefs it unconditionally. No CID covers
that one.
Differential Revision: https://phabricator.services.mozilla.com/D324885
Column breakpoints are now collected per "actual" source.
"Source objects" are unique per URL, so that we may have various
instance of it in distinct threads, or multiple evaluations of it.
Column breakpoints (aka breakpoint positions) are moved to source actors
as they are now keyed by "source key".
Source key is a conbination of:
* original source id (if that's about an original source)
* then either:
* many source actors if that's about an HTML page with many inline
<script>'s
* or a unique source actor. It help differentiate the possible
multiple evaluation (same or distinct threads).
Column breakpoint is now based on the location rather than the only the source.
Location may specify a precise source actor, which help display the
exact data related to the precise source instance being displayed.
This helps show the exact information if the multiple evaluations
of the source have different breakpoints.
Differential Revision: https://phabricator.services.mozilla.com/D321594
Always allow toggling DevTools from the content process,
but check if DevTools are active in the parent process
and reject the update if they aren't.
Do that, until we are able to only toggle this flag from the parent
process.
Differential Revision: https://phabricator.services.mozilla.com/D321346
IsTabOrExtensionBrowser gates content script injection on the top browsing
context's message manager group. Thunderbird's message pane browser moved from
the "single-page" group to a new "mail-message" group in bug 2058761, which was
not on the list, so extensions stopped seeing documents loaded there.
That browser is what feed messages displayed as "Full Web Page" load into, so
add-ons like uBlock Origin and Dark Reader lost cosmetic filtering, element
picking and CSS injection in that view.
Differential Revision: https://phabricator.services.mozilla.com/D324888
This improves the default themes, by using the toolbox background
gradient on top, which makes it more seamless.
Note that if we don't, the gradient is image(transparent), or solid
colors otherwise, so the size / declarations don't matter.
Differential Revision: https://phabricator.services.mozilla.com/D324664
Wrong color to use nowadays for sure since we are under the toolbox.
This restores pre-nova behavior but doesn't fully fix the issue.
Differential Revision: https://phabricator.services.mozilla.com/D324662
The token is a color, but the generated semantic categories file it under box-shadow, so no border category picks it up and every consumer draws its separator through a disable comment.
Differential Revision: https://phabricator.services.mozilla.com/D323736
Every declaration in the generated _tokens.scss is re-indented, so the only substantive change there is the new prefers-contrast block.
Differential Revision: https://phabricator.services.mozilla.com/D323733
The extension still passes `darkMode: true` alongside the theme for a reader who prefers dark; the rendered node fills and label colours are identical either way.
Differential Revision: https://phabricator.services.mozilla.com/D324833
Both hazard tasks fetch the gcc 10 toolchain and the sixgill plugin built
against it. With bug 2010489 that toolchain requires GLIBC_2.38, which
debian12-amd64-build does not provide.
Differential Revision: https://phabricator.services.mozilla.com/D324561
The image is only used by spidermonkey-sm-gdb-linux64/debug, which fetches
the gcc 10 toolchain. With bug 2010489 that toolchain requires GLIBC_2.38,
which debian12-amd64-build does not provide.
Differential Revision: https://phabricator.services.mozilla.com/D324560
Bug 2010489 moves the toolchain tasks to a Debian 13 docker image. gcc is
built host-native, so the gcc 10 toolchain now requires GLIBC_2.38, while
debian12-amd64-build provides 2.36. The spidermonkey builds that use gcc
fail in configure with
> /builds/worker/fetches/gcc/bin/gcc: /lib/x86_64-linux-gnu/libc.so.6: version `GLIBC_2.38' not found
Switch the kind to debian13-amd64-build, which already exists and is the
image ordinary Firefox builds use.
Differential Revision: https://phabricator.services.mozilla.com/D324559
This patch is adding only an additional test assertion to verify that
the aboutaddons-themes-mode moz-segmented-control does have the expected
fluent id (which is something that the parent patch, D323767, is taking care of).
Differential Revision: https://phabricator.services.mozilla.com/D323037
The light/dark/device group in the theme picker had no accessible name for screen readers, and its buttons had their role and selected state on a wrapper element instead of the button that gets focused.
Differential Revision: https://phabricator.services.mozilla.com/D323767
2026-09-10 06:24:29 +00:00
3128 changed files with 127265 additions and 65768 deletions
description:Use this skill when the user wants to file good-first-bugs in Bugzilla for Firefox. A good-first-bug is a narrow, self-contained, low-risk task scoped so a first-time contributor can land it without deep context. Sources include lint warnings, small typos, dead-code removal, mechanical refactors, docs conversions, or any other small task the user points at. Produces prefilled `enter_bug.cgi` URLs the user clicks to submit. Trigger on phrases like "file a good first bug", "open good first bugs for X", "create a good-first-bug from this".
description:Use this skill when the user wants to file good-first-bugs in Bugzilla for Firefox. A good-first-bug is a narrow, self-contained, low-risk task scoped so a first-time contributor can land it without deep context. Sources include lint warnings, small typos, dead-code removal, mechanical refactors, docs conversions, or any other small task the user points at. Opens a prefilled `enter_bug.cgi` form per bug in the user's browser for them to submit. Trigger on phrases like "file a good first bug", "open good first bugs for X", "create a good-first-bug from this".
---
## What is a good first bug
@@ -31,9 +31,9 @@ If the task touches many files, requires API design, or needs deep domain knowle
3.**Propose to the user before filing.** Use `AskUserQuestion` to confirm scope and which items to file. Never generate bug URLs without explicit approval - filing bugs is user-visible.
4.**Generate prefilled `enter_bug.cgi` URLs.** There is no MCP tool to create Bugzilla bugs - the user submits each bug by clicking its URL. Use the URL builder below.
4.**Open a prefilled `enter_bug.cgi` form per bug.** There is no MCP tool to create Bugzilla bugs - the user submits each one from the form. Use the URL builder below, which opens it in their browser.
5.**Print the URLs**, one per item, prefixed with what the bug is about so the user can scan and click.
5.**Report one line per bug** - its title and where it went (product/component). **Never paste the URL into your reply.** Terminal linkification gives up past some length, and a prefilled form's URL clears that threshold: it carries the whole bug body percent-encoded in its query string, which ran to 2413 and 2635 characters for two ordinary good-first-bugs. Past the threshold the reader gets an unclickable wall of `%20`. It costs you as well as the reader: those characters stay resident in your context and are re-sent with every later request in the session, which is also why the script no longer prints the URL - having it in front of you is what invites pasting it. Do **not** respond by writing a terser bug body - a good-first-bug has to be self-sufficient, and that is worth more than a URL a reader was never meant to click. The script already put the form in front of the user.
## Choosing product/component
@@ -112,13 +112,13 @@ The last paragraph (about auto-assignment) is canonical - keep it verbatim.
## URL builder
Use the helper script `scripts/build_url.py` (path relative to this skill file) to generate each prefilled `enter_bug.cgi`URL:
Use the helper script `scripts/build_url.py` (path relative to this skill file) to open each prefilled `enter_bug.cgi`form:
Run it with `--help` for the full list of options (`--product`, `--component`, `--tracker`, `--keywords`, `--lang`, `--mentor`). It can also be imported and its `build_url()` function called directly, which stays offline and omits the mentor unless you pass one; the command line resolves it (see [Mentor](#mentor)).
It opens the form in the user's default browser and prints a one-line confirmation. `--print-url` prints the URL instead, for a headless host - and if you use it, hand the user the URL by writing it to a file rather than into your reply, for the length reason in step 5. Run it with `--help` for the full list of options (`--product`, `--component`, `--tracker`, `--keywords`, `--lang`, `--mentor`). It can also be imported and its `build_url()` function called directly, which stays offline and omits the mentor unless you pass one; the command line resolves it (see [Mentor](#mentor)).
- **One bug per atomic task** unless the user opts into a combined bug.
- **Always set a mentor, and never hand-write the address** - let the builder resolve it, or ask the filer. Without a mentor the bug is invisible in some dashboards and a newcomer's questions go unanswered.
- **Don't auto-assign** - the template explicitly tells contributors not to ask.
- **Never paste a prefilled URL into your reply** - it is long enough to defeat terminal linkification. Let the script open the form, and don't trim the bug body to shorten it.
- **Push back on scope** that's too big, too vague, or requires design decisions - those are not good-first-bugs.
- **Match the component to the work** - don't dump everything under Lint and Formatting if the bug isn't a lint bug.
description:Use this skill when the user wants to file good-first-bugs in Bugzilla for Firefox. A good-first-bug is a narrow, self-contained, low-risk task scoped so a first-time contributor can land it without deep context. Sources include lint warnings, small typos, dead-code removal, mechanical refactors, docs conversions, or any other small task the user points at. Produces prefilled `enter_bug.cgi` URLs the user clicks to submit. Trigger on phrases like "file a good first bug", "open good first bugs for X", "create a good-first-bug from this".
description:Use this skill when the user wants to file good-first-bugs in Bugzilla for Firefox. A good-first-bug is a narrow, self-contained, low-risk task scoped so a first-time contributor can land it without deep context. Sources include lint warnings, small typos, dead-code removal, mechanical refactors, docs conversions, or any other small task the user points at. Opens a prefilled `enter_bug.cgi` form per bug in the user's browser for them to submit. Trigger on phrases like "file a good first bug", "open good first bugs for X", "create a good-first-bug from this".
---
## What is a good first bug
@@ -31,9 +31,9 @@ If the task touches many files, requires API design, or needs deep domain knowle
3.**Propose to the user before filing.** Use `AskUserQuestion` to confirm scope and which items to file. Never generate bug URLs without explicit approval - filing bugs is user-visible.
4.**Generate prefilled `enter_bug.cgi` URLs.** There is no MCP tool to create Bugzilla bugs - the user submits each bug by clicking its URL. Use the URL builder below.
4.**Open a prefilled `enter_bug.cgi` form per bug.** There is no MCP tool to create Bugzilla bugs - the user submits each one from the form. Use the URL builder below, which opens it in their browser.
5.**Print the URLs**, one per item, prefixed with what the bug is about so the user can scan and click.
5.**Report one line per bug** - its title and where it went (product/component). **Never paste the URL into your reply.** Terminal linkification gives up past some length, and a prefilled form's URL clears that threshold: it carries the whole bug body percent-encoded in its query string, which ran to 2413 and 2635 characters for two ordinary good-first-bugs. Past the threshold the reader gets an unclickable wall of `%20`. It costs you as well as the reader: those characters stay resident in your context and are re-sent with every later request in the session, which is also why the script no longer prints the URL - having it in front of you is what invites pasting it. Do **not** respond by writing a terser bug body - a good-first-bug has to be self-sufficient, and that is worth more than a URL a reader was never meant to click. The script already put the form in front of the user.
## Choosing product/component
@@ -112,13 +112,13 @@ The last paragraph (about auto-assignment) is canonical - keep it verbatim.
## URL builder
Use the helper script `scripts/build_url.py` (path relative to this skill file) to generate each prefilled `enter_bug.cgi`URL:
Use the helper script `scripts/build_url.py` (path relative to this skill file) to open each prefilled `enter_bug.cgi`form:
Run it with `--help` for the full list of options (`--product`, `--component`, `--tracker`, `--keywords`, `--lang`, `--mentor`). It can also be imported and its `build_url()` function called directly, which stays offline and omits the mentor unless you pass one; the command line resolves it (see [Mentor](#mentor)).
It opens the form in the user's default browser and prints a one-line confirmation. `--print-url` prints the URL instead, for a headless host - and if you use it, hand the user the URL by writing it to a file rather than into your reply, for the length reason in step 5. Run it with `--help` for the full list of options (`--product`, `--component`, `--tracker`, `--keywords`, `--lang`, `--mentor`). It can also be imported and its `build_url()` function called directly, which stays offline and omits the mentor unless you pass one; the command line resolves it (see [Mentor](#mentor)).
- **One bug per atomic task** unless the user opts into a combined bug.
- **Always set a mentor, and never hand-write the address** - let the builder resolve it, or ask the filer. Without a mentor the bug is invisible in some dashboards and a newcomer's questions go unanswered.
- **Don't auto-assign** - the template explicitly tells contributors not to ask.
- **Never paste a prefilled URL into your reply** - it is long enough to defeat terminal linkification. Let the script open the form, and don't trim the bug body to shorten it.
- **Push back on scope** that's too big, too vague, or requires design decisions - those are not good-first-bugs.
- **Match the component to the work** - don't dump everything under Lint and Formatting if the bug isn't a lint bug.
@@ -66,7 +66,7 @@ You can find the review identifier by inspecting the commit log with:
- Running tests with `--headless` is preferred if possible for the patch.
- Never submit patches to Phabricator without explicit user approval.
- In commit messages, group reviewers use a `#` prefix: `r?#group-name` (e.g. `r?#linter-reviewers`), while individual reviewers do not: `r?username`
- Refer to a bug as `Bug NNNNNN`, and to one of its comments as `Bug NNNNNN comment N`; Bugzilla and Phabricator both auto-link that form. A bare `comment N` only resolves within the bug it belongs to, so spell the bug number out in commit messages, review comments and other bugs. Comment numbering is 0-based with the description as comment 0: take the number from a comment's `count` field rather than counting the comments you fetched.
- Refer to a bug by number as `bug NNNNNN`, and to one of its comments as `bug NNNNNN comment N`; Bugzilla and Phabricator auto-link that form case-insensitively, so capitalize where a sentence or commit subject starts. A bare `comment N` only resolves within the bug it belongs to, so spell the bug number out in commit messages, review comments and other bugs. Comment numbering is 0-based with the description as comment 0: take the number from a comment's `count` field rather than counting the comments you fetched.
- Never put `DONTBUILD` (or `CLOSED TREE`) in the `-m` message of `mach try fuzzy` / `mach try compare` when you want builds to actually run. The Gecko decision task scans the message and on `DONTBUILD` strips every task from the graph: the decision task itself succeeds (Treeherder shows green) but no builds are scheduled.
- When doing Android and Desktop front-end-only changes, use the special `./mach build faster` to skip all C++/Rust compilation.
- Conversely, for C/C++/Obj-C/Rust only changes you can use the special `./mach build binaries` to skip all front-end-related tasks.
Some files were not shown because too many files have changed in this diff
Show More
Reference in New Issue
Block a user
Blocking a user prevents them from interacting with repositories, such as opening or commenting on pull requests or issues. Learn more about blocking a user.