Skip to content

Rebase onto ESR 115.35.2#178

Open
abranson wants to merge 7 commits into
sailfishos:masterfrom
abranson:sailfishos-esr115
Open

Rebase onto ESR 115.35.2#178
abranson wants to merge 7 commits into
sailfishos:masterfrom
abranson:sailfishos-esr115

Conversation

@abranson
Copy link
Copy Markdown
Member

@abranson abranson commented May 22, 2026

Rebase onto Firefox ESR 115.35.2, released 7th May 2026

  • Switch submodule from 'gecko-dev' to the newer 'firefox' upstream
  • Rebase all the patches, and drop obsolete ones.
  • Migrate all tap input handling to APZ
  • Extract Qt layer out of patches and symlink it into the Gecko tree instead.
  • Enabled WebRender with a Gecko-owned offscreen EGL target that publishes frames to Qt via GLScreenBuffer/EGLImage. Dropped the old scenegraph GL context support.
  • Rework EmbedLite component and profile startup plumbing for ESR115: static components, profile prefs/observers, search engines, prompts, clipboard, and native about:config.
  • Restore the downstream media, WebView, prompt, picker, and packaging fixes needed for a working browser.

Switch the packaging submodule from the old gecko-dev mirror URL to the
Sailfish Firefox mirror URL.  Clean builders need to fetch the upstream
Firefox repository directly, while the downstream source changes are supplied
by the RPM patch stack during prep.

Move the `gecko-dev` gitlink from the previous Firefox 91-based commit to
`9e858fd64454346ae7d6bdcc56609155d5b75f69`, the Firefox 115.35.2 release
base.
@abranson abranson force-pushed the sailfishos-esr115 branch 3 times, most recently from 6c80d57 to 1ac421e Compare May 27, 2026 07:06
Comment thread embedding/embedlite/components/components.conf
abranson added 6 commits May 28, 2026 12:53
Add the extracted `gecko-qt/` source tree that the RPM patch stack now
symlinks back into the Firefox checkout.  Keeping these files in the
parent package repo avoids committing patched submodule content.

Restore Qt system integration under `dom/system/qt`, including the QTM
location provider, haptic feedback bridge, and the local moz.build file needed
to wire those sources back into Gecko.

Restore the Qt graphics and platform integration pieces: `gfxQtPlatform`,
Qt icon decoding, the GTK-to-Qt icon converter, the Chromium Qt message pump,
and native Qt app support under toolkit/xre.

Restore the Qt widget backend as a coherent block.  This includes widget
factory registration, static component metadata, GfxInfo, ProcInfo, colors,
app shell, screen handling, look and feel, native theme stubs, file/color
pickers, print settings/dialog support, drag service, sound, idle service,
bidi keyboard, and the media-keys event source factory.

The commit is intentionally additive: it restores the 58 Qt platform files
without mixing in the later EmbedLite and RPM patch-stack changes.
Rework EmbedLite's app, view, and window integration for the Firefox 115
WebRender embedding path.  The IPC definitions and the app/view/window C++
classes are updated together so the embedding layer exposes the state needed
by the browser and QtMozEmbed without depending on intermediate rebase commits.

Update the rendering path around `EmbedLiteCompositorBridgeParent`,
`EmbedLitePuppetWidget`, `PuppetWidgetBase`, `nsWindow`, and the view/window
child and parent classes.  These changes keep WebRender presentation on the
Gecko-owned offscreen surface path, publish frames through the EmbedLite
platform-image bridge, and preserve the view update, APZ, and orientation
notifications expected by the Sailfish browser stack.

Refresh process and thread startup code in `EmbedLiteSubThread`,
`EmbedLiteAppProcess*`, `EmbedLiteContentProcess*`, and
`EmbedLiteViewProcessChild`.  This keeps the base-thread startup model,
content-process setup, and shutdown ordering compatible with the newer Gecko
embedding APIs.

Refresh EmbedLite service registration and component glue.  The component
factory files, `components.conf`, moz.build entries, native clipboard bridge,
and static component wiring are updated together so browser, prompt,
clipboard, and helper services are available from the embedded runtime.

Update embedding defaults and utility code in `embedding.js`, `DirProvider`,
`GeckoLoader`, `EmbedLiteSecurity`, `EmbedLiteXulAppInfo`,
`BrowserChildHelper`, `WebBrowserChrome`, and `WindowCreator`.  These changes
cover profile/pref initialization, security checks, browser chrome plumbing,
and runtime configuration needed by the refreshed EmbedLite stack.

Adjust the local mozconfig and EmbedLite test moz.build files to match the
source layout and the components that remain active after the WebRender
integration.
Move the xulrunner package metadata from Firefox 91.13.1 to Firefox 115.35.2
and replace the historical 99-patch series with a compact 80-patch series
matching the current Gecko, Qt, and EmbedLite source layout.

Regenerate and renumber the retained patches so the spec applies a single
ordered stack.  The new stack keeps the base symlink, Qt layer restoration,
EmbedLite build fixes, Rust/build-system fixes, WebRTC/gecko-camera support,
content-action integration, media handling, user-agent support, dconf time
format support, glslopt updates, and the late EmbedLite integration topics.

Fold temporary rebase patches back into their functional topics.  The late
patches now cover Gecko configure integration, WebRender offscreen
compositing, native prompt dialogs, media sink shutdown guarding,
gecko-camera chroma and drain fixes, default protocol-handler injection,
toolkit error pages, helper-app static registration, and EmbedLite search
engine loading from settings.

Drop obsolete patches that are already upstream, no longer apply, or are no
longer part of the supported package shape.  This removes the stale system
sqlite path, old build-version workaround, membarrier workaround,
NS_LITERAL_CSTRING cleanup, aarch64 elfhack support, GMP/gmp-droid changes,
old FFmpeg/libevent carry-overs, old Rust workarounds, and the superseded
external GL context wrapping patch.

Remove `rpm-old-patches/` entirely.  The two old holdover patches there are
not referenced by the refreshed spec and would otherwise make the patch stack
look larger than the actual build input.

Update `xulrunner-qt5.spec` for the refreshed engine: set `greversion` to
115.35.2, keep system library switches in the spec, enable system libvpx,
drop unsupported system sqlite, hunspell, and bz2 toggles, and update minimum
toolchain/library requirements for Rust, Cargo, NSS, ICU, and cbindgen.

Add the new build requirements needed by the refreshed stack, including GLib,
GObject, and python3-curses.  Keep bzip2-devel as an unconditional
requirement because bundled freetype still needs bzip2 support even though
there is no longer a corresponding configure toggle.

Clean up mozconfig generation by deleting duplicate system-library options
from the base config, writing a fresh shared RPM environment file, disabling
C/C++ debug symbols for packaged libxul builds, using `%SB2_TARGET` for the
Cargo target, setting the target architecture per RPM arch, and forcing GNU
readelf where the SDK/qemu path is sensitive to libxul size.

Update bindgen and libclang handling by exporting
`MOZ_LIBCLANG_BINDGEN_PATH`, selecting the correct host libclang path by
architecture, and adding `READELF` to both the shared RPM environment and the
mozconfig.  Disable elfhack because the aarch64 SDK self-test executes target
binaries through qemu and is not reliable after libxul links.

Switch the build to `MACH_BUILD_PYTHON_NATIVE_PACKAGE_SOURCE=system` so mach
uses the system Python package source expected by the current Firefox build
system.
Remove `EmbedLiteCompositorProcessParent.{cpp,h}` from the EmbedLite
embedding tree.  The refreshed WebRender path uses
`EmbedLiteCompositorBridgeParent` and the Gecko-owned offscreen compositor
surface instead of the old compositor-process parent implementation.

The removed files were stale, unreferenced by the refreshed EmbedLite
moz.build files, and still carried old layer-manager and `CompositorOGL`
setup code from the pre-WebRender compositor model.  Keeping them in the tree
made the package look as if that path was still supported.

This is separated from the larger EmbedLite update to show that the only
behavior here is deleting dead compositor-process code.
Wait for droid decoder EOS before resolving Gecko drain requests and remember decoder EOS for follow-up drains after delayed output.

Dispatch MediaDecoderStateMachine initialization without tail dispatch when the caller is not inside a tail-dispatchable AbstractThread.

Preload autoplay metadata so inaudible videos can be identified even when Sailfish defaults implicit media preload to none.
Web content uses the non-native Theme path when
widget.non-native-theme.enabled is true. On Qt, the generic checkbox/radio
colors and WebRender rounded-border path can produce solid black controls.

Draw Qt checkbox and radio controls with explicit light control colors and
simple primitives that work in the WebRender path used by Sailfish Browser.
@abranson abranson force-pushed the sailfishos-esr115 branch from 1ac421e to 1f26fe3 Compare May 28, 2026 11:24
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants