mirror of
https://codeberg.org/libreboot/lbmk.git
synced 2026-09-19 21:20:31 +02:00
Compare commits
2 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
| 80118a24b8 | |||
| fcf27a5719 |
+2
-17
@@ -1,9 +1,8 @@
|
||||
*~
|
||||
*.o
|
||||
/cache/
|
||||
/lbmk.err.log
|
||||
/repo/
|
||||
/docs/
|
||||
/cbutils/
|
||||
/pciroms/
|
||||
/util/dell-flash-unlock/dell_flash_unlock
|
||||
/TODO
|
||||
@@ -24,23 +23,9 @@
|
||||
/push
|
||||
/version
|
||||
/versiondate
|
||||
/.version
|
||||
/.versiondate
|
||||
/vendorfiles/
|
||||
*me.bin
|
||||
*sch5545ec.bin
|
||||
/mrc/
|
||||
/util/nvmutil/nvm
|
||||
/src/
|
||||
/CHANGELOG
|
||||
/todo.txt
|
||||
/lock
|
||||
/hash/
|
||||
/dump/
|
||||
/qrun*.sh
|
||||
*.tar.*
|
||||
/m
|
||||
/f
|
||||
/r
|
||||
/e
|
||||
/xbmkpath/
|
||||
/xbmkwd/
|
||||
|
||||
@@ -1,9 +1,3 @@
|
||||
NOTE: This applies to lwmk.git, a fork of LibreBook MaKe (lbmk).
|
||||
The Libreboot build system was used as a base, to produce the
|
||||
new LibreWolf build system. This file was just "COPYING" in the
|
||||
original lbmk, as that build system was largely provided under
|
||||
the following, terrible license:
|
||||
|
||||
GNU GENERAL PUBLIC LICENSE
|
||||
Version 3, 29 June 2007
|
||||
|
||||
@@ -1,322 +1,123 @@
|
||||
<div align="center">
|
||||
|
||||

|
||||
|
||||
**THIS WILL BE REMOVED AT A LATER DATE.**
|
||||
|
||||
It's a proof of concept showing early modifications of lbmk, turning it into
|
||||
lwmk - LibreWolf MaKe, for building librewolf releases. I'm doing this for
|
||||
fun, to replace LibreWolf's source.git and bsys6.git build systems. Most
|
||||
features not added yet, but lbmk's "mkhelper" feature can (and will) be used
|
||||
to implement custom logic e.g. interacting with the mach build system in
|
||||
firefox. This will be a unified package manager for building *many* firefox
|
||||
derivatives, starting with LibreWolf, with the aim that all of the mozilla
|
||||
forks later use it, and perhaps work more closely with each other. I will
|
||||
publish this on a separate website when it's ready. **You are looking at
|
||||
an old version of it. I'm much further ahead locally. I will release it
|
||||
when it's finished!"
|
||||
|
||||
# LibreWolf
|
||||
|
||||
This repository contains all the patches and theming that make up LibreWolf,
|
||||
as well as the LibreWolf preferences (in [settings/](./settings)) and the
|
||||
scripts and Makefile to build LibreWolf.
|
||||
|
||||
This is a re-design of the LibreWolf build system, called LibreWolf MaKe, or
|
||||
just lwmk for short. It is a fork of the LibreBoot MaKe (lbmk) build system,
|
||||
which Libreboot uses to build coreboot images. It was decided that this design
|
||||
is beneficial for LibreWolf, as it offers advanced features by comparison, such
|
||||
as:
|
||||
|
||||
* Automatic caching of sources when downloading (Git repositories are used)
|
||||
* Redundant repository links are possible, for reliability in the future
|
||||
* Ability to declare custom git submodules, regardless of whether a project
|
||||
uses them; actual git submodules are unused. The lwmk design allows
|
||||
systematic patching and revision resets on submodules.
|
||||
* Ability to download files as submodules as well, hash-checking everything.
|
||||
Both git repositories and files are checked relentlessly, even when using
|
||||
local cache, to ensure integrity and general reproducibility.
|
||||
* Multi-tree design: projects like firefox can be build single- or multi-tree.
|
||||
In lwmk nomenclature, this means that a given project can have multiple
|
||||
targets, or just build one target. Multi-tree is preferred, where feasible;
|
||||
in lwmk, you can specify multiple revisions of Firefox, and multiple targets
|
||||
off of each tree name on the given revision. An application for this might
|
||||
be providing LibreWolf along with variants like LibreWolf-Hellfire, or
|
||||
more opiniated forks of LibreWolf that mostly just change a few configs.
|
||||
* Completely generalised design. The `mk` script and `include/` directory do
|
||||
not generally contain project-specific build logic. Each project can use
|
||||
mkhelpers to specify custom steps e.g. pre-configure, post-build, and so on,
|
||||
much like on a BSD ports system. This design is reminiscent of a Linux distro,
|
||||
because indeed it was first implemented for Libreboot which is a coreboot
|
||||
distro; this design generalises the downloading, patching and building
|
||||
of any source tree. It is highly flexible and configurable.
|
||||
* Ease of use. Despite high configurability, the overarching philosophy is
|
||||
like that for OpenBSD: Knobs are for nobs. We want everything to be as simple
|
||||
as possible for the user, with sane defaults for everything. The design
|
||||
of the entire build system reflects this philosophy.
|
||||
|
||||
The lwmk build system can generate binaries on the spot, and it does so
|
||||
using out-of-tree building. It can also generate clean source tarballs of
|
||||
sources e.g. Firefox sources.
|
||||
|
||||
The multi-tree nature of LibreWolf MaKe mean that you can support any number
|
||||
of actual Firefox derivatives. This build system is designed for use with
|
||||
the LibreWolf project, but it is intended that this design be used on every
|
||||
other Firefox fork; perhaps the projects can even work with each other, or
|
||||
there can be another project that uses this design and generalises all of
|
||||
the Mozilla forks. This might be useful for Linux distros, which can then
|
||||
just do something like:
|
||||
|
||||
./mk -b firefox
|
||||
|
||||
This would build every variant of Firefox in lwmk. Every defined tree, at each
|
||||
defined revision, for each target defined referencing each tree. The best
|
||||
part: because it uses the same design from the Libreboot build system, there
|
||||
are *no make files* in the tree, until you run `./mk -f`.
|
||||
|
||||
One caveat: this is a very much Linux- and BSD-brained build system. It is
|
||||
NOT designed to run on others like Windows or Mac. That being said, it can
|
||||
generate source tarballs of Firefox and its variants such as LibreWolf. These
|
||||
tarballs are cross-platform, and that will always be the case.
|
||||
|
||||
</div>
|
||||
|
||||
## Infra
|
||||
|
||||
### Overview
|
||||
|
||||
```mermaid
|
||||
graph LR
|
||||
FFSRC(Firefox Source)
|
||||
|
||||
FFSRC--Tarball--->Source
|
||||
|
||||
subgraph LibreWolf/
|
||||
Website(Website<br><br>- Documentation<br>- FAQ)
|
||||
subgraph Browser/
|
||||
Source(Source<br><br>- Patches<br>- Theming<br>- Settings<br>- Weblate<br>- Build scripts)
|
||||
bsys6(bsys6<br><br>New Docker building<br>repository)
|
||||
AppImage
|
||||
ArchGentoo["Arch / Gentoo"]
|
||||
end
|
||||
end
|
||||
Website-->librewolf.net
|
||||
Source--"Source tarball"-->bsys6
|
||||
AppImage--".appimage"-->librewolf.net
|
||||
bsys6--"Windows setup.exe"--->librewolf.net
|
||||
bsys6--"Windows portable.zip"--->librewolf.net
|
||||
bsys6--"Windows .msix"--->MS("Microsoft Store")
|
||||
bsys6--"Windows .nupkg"--->Chocolatey
|
||||
bsys6--"Linux binary tarball"--->Flathub
|
||||
bsys6--"Linux binary tarball"--> AppImage
|
||||
bsys6--"Linux .deb"--->repo.librewolf.net
|
||||
bsys6--"Linux .rpm"--->repo.librewolf.net
|
||||
bsys6--"Linux binary tarball<br>for 'librewolf-bin'"--> ArchGentoo
|
||||
Source--"Source tarball<br>for 'librewolf'"-->ArchGentoo
|
||||
ArchGentoo-->AUR_Overlay["AUR / Overlay"]
|
||||
```
|
||||
|
||||
### Packages
|
||||
|
||||
These are the locations where people have their repositories and build artifacts.
|
||||
|
||||
Active:
|
||||
|
||||
- [Arch](https://archlinux.org/packages/extra/x86_64/librewolf/) - Arch Linux package
|
||||
- [BSYS6](https://librewolf.dev/librewolf/bsys6) - Linux Mint, Fedora,
|
||||
Ubuntu, MacOS, portable and setup for Windows
|
||||
- [Gentoo](https://codeberg.org/librewolf/gentoo) - Gentoo GNU/Linux package
|
||||
|
||||
Downstream:
|
||||
|
||||
- [Alpine Linux](https://pkgs.alpinelinux.org/packages?name=librewolf&arch=)
|
||||
|
||||
### Forks
|
||||
|
||||
Previous:
|
||||
|
||||
- [CachyOS Browser](https://github.com/cachyos/cachyos-browser-settings)
|
||||
- [FireDragon Browser](https://github.com/dr460nf1r3/firedragon-browser)
|
||||
|
||||
## Build
|
||||
|
||||
There are two ways to build LibreWolf.
|
||||
You can either use the source tarball
|
||||
or compile directly with this repository.
|
||||
|
||||
### Build: Tarball
|
||||
|
||||
1. Let's **[download the latest tarball](https://librewolf.dev/librewolf/source/releases)**.
|
||||
This tarball is the latest produced by the [CI](https://librewolf.dev/librewolf/source/actions?workflow=source-release.yaml).
|
||||
You can also check the `sha256sum` of the tarball there:
|
||||
|
||||
```bash
|
||||
tar xf <tarball>
|
||||
cd <folder>
|
||||
```
|
||||
|
||||
2. Then, you have to bootstrap your system to be able to build LibreWolf.
|
||||
You only have to do this one time.
|
||||
It is done by running the following command:
|
||||
|
||||
```bash
|
||||
./mach --no-interactive bootstrap --application-choice=browser
|
||||
```
|
||||
|
||||
3. Build LibreWolf and then package or run it with the following commands:
|
||||
|
||||
```bash
|
||||
./mach build && ./mach package
|
||||
# or
|
||||
./mach build && ./mach run
|
||||
```
|
||||
|
||||
> [!NOTE]
|
||||
>
|
||||
> To get all parameters of `./mach`, use:
|
||||
>
|
||||
> ```bash
|
||||
> ./mach configure -- --help | less
|
||||
> ```
|
||||
|
||||
### Build: Repository
|
||||
|
||||
1. Clone this repository with Git:
|
||||
|
||||
```bash
|
||||
git clone --recursive git@librewolf.dev:librewolf/source.git librewolf-source --depth=1 && cd librewolf-source
|
||||
```
|
||||
|
||||
2. Build LibreWolf source code,
|
||||
also you have to bootstrap your system to be able to build LibreWolf.
|
||||
You only have to do this one time.
|
||||
|
||||
```bash
|
||||
make dir && make bootstrap
|
||||
```
|
||||
|
||||
3. Package LibreWolf or run it with the following commands:
|
||||
|
||||
```bash
|
||||
make build && make package
|
||||
# or
|
||||
make build && make run
|
||||
```
|
||||
|
||||
## Translations
|
||||
|
||||
We use Weblate to localize all LibreWolf-specific strings.
|
||||
You can help us by translating LibreWolf into your language at
|
||||
<https://translate.codeberg.org/engage/librewolf>.
|
||||
Here is the current translation status:
|
||||
|
||||
<a href="https://translate.codeberg.org/engage/librewolf/">
|
||||
<img src="https://translate.codeberg.org/widget/librewolf/multi-auto.svg" alt="Translation status"/>
|
||||
</a>
|
||||
|
||||
## Development
|
||||
|
||||
### Development: Creating a patch
|
||||
|
||||
The easiest way to make patches is to go to the LibreWolf source folder:
|
||||
|
||||
```bash
|
||||
cd librewolf-$(cat version)
|
||||
git init
|
||||
git add <path_to_file_you_changed>
|
||||
git commit -am initial-commit
|
||||
git diff > ../mypatch.patch
|
||||
```
|
||||
|
||||
We have Gitter / Matrix rooms,
|
||||
and on the website we have links to the various issue trackers.
|
||||
|
||||
### Development: Existing patches
|
||||
|
||||
The easiest way to make patches is to go to the LibreWolf source folder:
|
||||
|
||||
```bash
|
||||
make fetch
|
||||
./scripts/git-patchtree.sh patches/sed-patches/disable-pocket.patch
|
||||
```
|
||||
|
||||
Now change the source tree the way you want,
|
||||
keeping in mind to `git add` new files.
|
||||
When done, you can create the new patch with:
|
||||
|
||||
```bash
|
||||
cd firefox-<version>
|
||||
git diff 4b825dc642cb6eb9a060e54bf8d69288fbee4904 HEAD > ../my-patch-name.patch
|
||||
```
|
||||
|
||||
This ID is the hash value of the first commit, which is called `initial`.
|
||||
Don't forget to commit changes before doing this diff,
|
||||
or the patch will be incomplete.
|
||||
|
||||
### Development: Creating a patch for problems in Mozilla's [Bugzilla](https://bugzilla.mozilla.org)
|
||||
|
||||
Well, first of all:
|
||||
|
||||
- [Create an account](https://bugzilla.mozilla.org/createaccount.cgi).
|
||||
- Handy link: [Bugs Filed Today](https://bugzilla.mozilla.org/buglist.cgi?cmdtype=dorem&remaction=run&namedcmd=Bugs%20Filed%20Today&sharer_id=1&list_id=15939480).
|
||||
- The essential: [Firefox Source Tree Documentation](https://firefox-source-docs.mozilla.org/).
|
||||
|
||||
Now that you have a patch in LibreWolf, that's not enough to upload to Mozilla.
|
||||
See, Mozilla only accepts patches against Nightly.
|
||||
So here is how to do that:
|
||||
|
||||
1. If you have not done so already,
|
||||
create the `mozilla-unified` folder and build Firefox with it:
|
||||
|
||||
```bash
|
||||
hg clone https://hg.mozilla.org/mozilla-unified && cd mozilla-unified
|
||||
hg update
|
||||
MOZBUILD_STATE_PATH=$HOME/.mozbuild ./mach --no-interactive bootstrap --application-choice=browser
|
||||
./mach build
|
||||
./mach run
|
||||
```
|
||||
|
||||
2. If you skipped the previous step, you could ensure that you're up to date with:
|
||||
|
||||
```bash
|
||||
cd mozilla-unified
|
||||
hg pull && hg update
|
||||
```
|
||||
|
||||
3. Now you can apply your patch to Nightly:
|
||||
|
||||
```bash
|
||||
patch -p1 -i ../mypatch.patch
|
||||
```
|
||||
|
||||
4. Now, let Mercurial create the patch:
|
||||
|
||||
```bash
|
||||
hg diff > ../my-nightly-patch.patch
|
||||
```
|
||||
|
||||
5. After this, it can be uploaded to Bugzilla.
|
||||
|
||||
#### Development: Contributing
|
||||
|
||||
Time to start hacking! You should join us on [Matrix](https://chat.mozilla.org),
|
||||
say hello in the [Introduction channel](https://chat.mozilla.org/#/room/#introduction:mozilla.org),
|
||||
and [find a bug to start working on](https://codetribute.mozilla.org).
|
||||
See the [Firefox Contributors' Quick Reference](https://firefox-source-docs.mozilla.org/contributing/contribution_quickref.html#firefox-contributors-quick-reference)
|
||||
to learn how to test your changes,
|
||||
send patches to Mozilla,
|
||||
update your source code locally, and more.
|
||||
|
||||
## MacOS and Windows
|
||||
|
||||
We understand, life isn't always fair 😺.
|
||||
The same steps as above apply you will just have to walk through
|
||||
the beginning part of the guides for:
|
||||
|
||||
- [MacOS](https://firefox-source-docs.mozilla.org/setup/macos_build.html):
|
||||
The cross-compiled Mac `.dmg` files are somewhat new.
|
||||
They should work, perhaps with the exception of the `make setup-wasi` step.
|
||||
- [Windows](https://firefox-source-docs.mozilla.org/setup/windows_build.html):
|
||||
Building on Windows is not very well tested.
|
||||
|
||||
Help with testing these targets is always welcome.
|
||||
Libreboot
|
||||
=========
|
||||
|
||||
Find libreboot documentation at <https://libreboot.org/>
|
||||
|
||||
The `libreboot` project provides
|
||||
[libre](https://libreboot.org/freedom-status.html) *boot
|
||||
firmware* that initializes the hardware (e.g. memory controller, CPU,
|
||||
peripherals) on specific Intel/AMD x86 and ARM targets, which
|
||||
then starts a bootloader for your operating system. Linux/BSD are
|
||||
well-supported. It replaces proprietary BIOS/UEFI firmware. Help is available
|
||||
via [\#libreboot IRC](https://web.libera.chat/#libreboot)
|
||||
on [Libera](https://libera.chat/) IRC.
|
||||
|
||||
Why use Libreboot?
|
||||
==================
|
||||
|
||||
Why should you use *libreboot*?
|
||||
----------------------------
|
||||
|
||||
Libreboot gives you freedoms that you otherwise can't get with most other
|
||||
boot firmware. It's extremely powerful and configurable for many use cases.
|
||||
|
||||
You have rights. The right to privacy, freedom of thought, freedom of speech
|
||||
and the right to read. In this context, Libreboot gives you these rights.
|
||||
Your freedom matters.
|
||||
[Right to repair](https://vid.puffyan.us/watch?v=Npd_xDuNi9k) matters.
|
||||
Many people use proprietary (non-libre)
|
||||
boot firmware, even if they use [a libre OS](https://www.openbsd.org/).
|
||||
Proprietary firmware often contains backdoors (more info on the FAQ), and it
|
||||
and can be buggy. The libreboot project was founded in December 2013,
|
||||
with the express purpose of making coreboot firmware accessible for
|
||||
non-technical users.
|
||||
|
||||
The `libreboot` project uses [coreboot](https://www.coreboot.org/) for [hardware
|
||||
initialisation](https://doc.coreboot.org/getting_started/architecture.html).
|
||||
Coreboot is notoriously difficult to install for most non-technical users; it
|
||||
handles only basic initialization and jumps to a separate
|
||||
[payload](https://doc.coreboot.org/payloads.html) program (e.g.
|
||||
[GRUB](https://www.gnu.org/software/grub/),
|
||||
[Tianocore](https://www.tianocore.org/)), which must also be configured.
|
||||
*The libreboot software solves this problem*; it is a *coreboot distribution* with
|
||||
an automated build system (named *lbmk*) that builds complete *ROM images*, for
|
||||
more robust installation. Documentation is provided.
|
||||
|
||||
How does Libreboot differ from coreboot?
|
||||
========================================
|
||||
|
||||
In the same way that *Debian* is a GNU+Linux distribution, `libreboot` is
|
||||
a *coreboot distribution*. If you want to build a ROM image from scratch, you
|
||||
otherwise have to perform expert-level configuration of coreboot, GRUB and
|
||||
whatever other software you need, to prepare the ROM image. With *libreboot*,
|
||||
you can literally download from Git or a source archive, and run `make`, and it
|
||||
will build entire ROM images. An automated build system, named `lbmk`
|
||||
(Libreboot MaKe), builds these ROM images automatically, without any user input
|
||||
or intervention required. Configuration has already been performed in advance.
|
||||
|
||||
If you were to build regular coreboot, without using libreboot's automated
|
||||
build system, it would require a lot more intervention and decent technical
|
||||
knowledge to produce a working configuration.
|
||||
|
||||
Regular binary releases of `libreboot` provide these
|
||||
ROM images pre-compiled, and you can simply install them, with no special
|
||||
knowledge or skill except the ability to follow installation instructions
|
||||
and run commands BSD/Linux.
|
||||
|
||||
Project goals
|
||||
=============
|
||||
|
||||
- *Support as much hardware as possible!* Libreboot aims to eventually
|
||||
have *maintainers* for every board supported by coreboot, at every
|
||||
point in time.
|
||||
- *Make coreboot easy to use*. Coreboot is notoriously difficult
|
||||
to install, due to an overall lack of user-focused documentation
|
||||
and support. Most people will simply give up before attempting to
|
||||
install coreboot. Libreboot's automated build system and user-friendly
|
||||
installation instructions solves this problem.
|
||||
|
||||
Libreboot attempts to bridge this divide by providing a build system
|
||||
automating much of the coreboot image creation and customization.
|
||||
Secondly, the project produces documentation aimed at non-technical users.
|
||||
Thirdly, the project attempts to provide excellent user support via IRC.
|
||||
|
||||
Libreboot already comes with a payload (GRUB), flashrom and other
|
||||
needed parts. Everything is fully integrated, in a way where most of
|
||||
the complicated steps that are otherwise required, are instead done
|
||||
for the user in advance.
|
||||
|
||||
You can download ROM images for your libreboot system and install
|
||||
them without having to build anything from source. If, however, you are
|
||||
interested in building your own image, the build system makes it relatively
|
||||
easy to do so.
|
||||
|
||||
Not a coreboot fork!
|
||||
--------------------
|
||||
|
||||
Libreboot is not a fork of coreboot. Every so often, the project
|
||||
re-bases on the latest version of coreboot, with the number of custom
|
||||
patches in use minimized. Tested, *stable* (static) releases are then provided
|
||||
in Libreboot, based on specific coreboot revisions.
|
||||
|
||||
How to help
|
||||
===========
|
||||
|
||||
You can check bugs listed on
|
||||
the [bug tracker](https://codeberg.org/libreboot/lbmk/issues).
|
||||
|
||||
If you spot a bug and have a fix, the website has instructions for how to send
|
||||
patches, and you can also report it. Also, this entire website is
|
||||
written in Markdown and hosted in a [separate
|
||||
repository](https://codeberg.org/libreboot/lbwww) where you can send patches.
|
||||
|
||||
Any and all development discussion and user support are all done on the IRC
|
||||
channel. More information is on https://libreboot.org/contact.html.
|
||||
|
||||
LICENSE FOR THIS README
|
||||
=======================
|
||||
|
||||
It's just a README file. This README file is released under the terms of the
|
||||
Creative Commons Zero license, version 1.0 of the license, which you can
|
||||
read here:
|
||||
|
||||
<https://creativecommons.org/publicdomain/zero/1.0/legalcode.txt>
|
||||
|
||||
@@ -0,0 +1,165 @@
|
||||
#!/usr/bin/env sh
|
||||
# SPDX-License-Identifier: GPL-3.0-or-later
|
||||
# SPDX-FileCopyrightText: 2014,2015,2020,2021,2023 Leah Rowe <leah@libreboot.org>
|
||||
# SPDX-FileCopyrightText: 2015 Patrick "P. J." McDermott <pj@pehjota.net>
|
||||
# SPDX-FileCopyrightText: 2015, 2016 Klemens Nanni <contact@autoboot.org>
|
||||
# SPDX-FileCopyrightText: 2022, Caleb La Grange <thonkpeasant@protonmail.com>
|
||||
|
||||
[ "x${DEBUG+set}" = 'xset' ] && set -v
|
||||
set -u -e
|
||||
|
||||
export LC_COLLATE=C
|
||||
export LC_ALL=C
|
||||
|
||||
. "include/err.sh"
|
||||
. "include/option.sh"
|
||||
|
||||
eval "$(setvars "" option aur_notice tmpdir)"
|
||||
|
||||
tmpdir_was_set="y"
|
||||
set | grep TMPDIR 1>/dev/null 2>/dev/null || tmpdir_was_set="n"
|
||||
if [ "${tmpdir_was_set}" = "y" ]; then
|
||||
tmpdir="${TMPDIR##*/}"
|
||||
tmpdir="${TMPDIR%_*}"
|
||||
if [ "${tmpdir}" = "lbmk" ]; then
|
||||
tmpdir=""
|
||||
tmpdir_was_set="n"
|
||||
fi
|
||||
fi
|
||||
if [ "${tmpdir_was_set}" = "n" ]; then
|
||||
export TMPDIR="/tmp"
|
||||
tmpdir="$(mktemp -d -t lbmk_XXXXXXXX)"
|
||||
export TMPDIR="${tmpdir}"
|
||||
else
|
||||
export TMPDIR="${TMPDIR}"
|
||||
fi
|
||||
tmpdir="${TMPDIR}"
|
||||
|
||||
linkpath="${0}"
|
||||
linkname="${linkpath##*/}"
|
||||
buildpath="./script/${linkname}"
|
||||
|
||||
main()
|
||||
{
|
||||
xx_ id -u 1>/dev/null 2>/dev/null
|
||||
[ $# -lt 1 ] && fail "Too few arguments. Try: ${0} help"
|
||||
if [ "${1}" = "dependencies" ]; then
|
||||
xx_ install_packages $@
|
||||
lbmk_exit 0
|
||||
fi
|
||||
|
||||
initialise_command $@ && shift 1
|
||||
|
||||
check_git
|
||||
check_project "fail"
|
||||
git_init
|
||||
|
||||
execute_command $@
|
||||
lbmk_exit 0
|
||||
}
|
||||
|
||||
initialise_command()
|
||||
{
|
||||
[ "$(id -u)" != "0" ] || fail "this command as root is not permitted"
|
||||
|
||||
check_project
|
||||
|
||||
case "${1}" in
|
||||
help)
|
||||
usage ${0}
|
||||
lbmk_exit 0 ;;
|
||||
list)
|
||||
items "${buildpath}"
|
||||
lbmk_exit 0 ;;
|
||||
version)
|
||||
mkversion
|
||||
lbmk_exit 0 ;;
|
||||
esac
|
||||
option="${1}"
|
||||
}
|
||||
|
||||
install_packages()
|
||||
{
|
||||
if [ $# -lt 2 ]; then
|
||||
printf "You must specify a distro, namely:\n" 1>&2
|
||||
printf "Look at files under config/dependencies/\n" 1>&2
|
||||
printf "Example: ./build dependencies debian\n" 1>&2
|
||||
fail "install_packages: target not specified"
|
||||
fi
|
||||
|
||||
[ -f "config/dependencies/${2}" ] || fail "Unsupported target"
|
||||
|
||||
. "config/dependencies/${2}"
|
||||
|
||||
xx_ ${pkg_add} ${pkglist}
|
||||
[ -z "${aur_notice}" ] && return 0
|
||||
printf "You must install AUR packages: %s\n" "${aur_notice}" 1>&2
|
||||
}
|
||||
|
||||
# release archives contain .gitignore, but not .git.
|
||||
# lbmk can be run from lbmk.git, or an archive.
|
||||
git_init()
|
||||
{
|
||||
[ -L ".git" ] && fail "Reference .git is a symlink"
|
||||
[ -e ".git" ] && return 0
|
||||
eval "$(setvars "$(date -Rd @${versiondate})" cdate _nogit)"
|
||||
|
||||
git init || fail "${PWD}: cannot initialise Git repository"
|
||||
git add -A . || fail "${PWD}: cannot add files to Git repository"
|
||||
git commit -m "${projectname} ${version}" --date "${cdate}" \
|
||||
--author="lbmk <lbmk@libreboot.org>" || \
|
||||
fail "${PWD}: can't commit ${projectname}/${version}, date ${cdate}"
|
||||
git tag -a "${version}" -m "${projectname} ${version}" || \
|
||||
fail "${PWD}: cannot git-tag ${projectname}/${version}"
|
||||
}
|
||||
|
||||
execute_command()
|
||||
{
|
||||
lbmkcmd="${buildpath}/${option}"
|
||||
[ -f "${lbmkcmd}" ] || fail "Invalid command. Run: ${linkpath} help"
|
||||
"${lbmkcmd}" $@ || fail "execute_command: ${lbmkcmd} ${@}"
|
||||
}
|
||||
|
||||
usage()
|
||||
{
|
||||
progname=${0}
|
||||
cat <<- EOF
|
||||
$(mkversion)
|
||||
|
||||
USAGE: ${progname} <OPTION>
|
||||
|
||||
possible values for 'OPTION':
|
||||
$(items "${buildpath}")
|
||||
|
||||
To know what ${projectname} version you're on, type:
|
||||
${progname} version
|
||||
|
||||
Refer to ${projectname} documentation for more info.
|
||||
EOF
|
||||
}
|
||||
|
||||
mkversion()
|
||||
{
|
||||
printf "revision: %s %s\n" "${projectname}" "${version}"
|
||||
printf "revision date: %s\n" "$(date -Rud @${versiondate})"
|
||||
}
|
||||
|
||||
lbmk_exit()
|
||||
{
|
||||
tmp_cleanup || err "lbmk_exit: can't rm tmpdir upon exit $1: ${tmpdir}"
|
||||
exit $1
|
||||
}
|
||||
|
||||
fail()
|
||||
{
|
||||
tmp_cleanup || printf "WARNING: can't rm tmpdir: %s\n" "${tmpdir}" 1>&2
|
||||
err "${1}"
|
||||
}
|
||||
|
||||
tmp_cleanup()
|
||||
{
|
||||
[ "${tmpdir_was_set}" = "n" ] || return 0
|
||||
rm -Rf "${tmpdir}" || return 1
|
||||
}
|
||||
|
||||
main $@
|
||||
@@ -0,0 +1,589 @@
|
||||
#
|
||||
# Automatically generated file; DO NOT EDIT.
|
||||
# coreboot configuration
|
||||
#
|
||||
|
||||
#
|
||||
# General setup
|
||||
#
|
||||
CONFIG_COREBOOT_BUILD=y
|
||||
CONFIG_LOCALVERSION=""
|
||||
CONFIG_CBFS_PREFIX="fallback"
|
||||
CONFIG_COMPILER_GCC=y
|
||||
# CONFIG_COMPILER_LLVM_CLANG is not set
|
||||
CONFIG_ARCH_SUPPORTS_CLANG=y
|
||||
# CONFIG_ANY_TOOLCHAIN is not set
|
||||
# CONFIG_CCACHE is not set
|
||||
# CONFIG_IWYU is not set
|
||||
# CONFIG_FMD_GENPARSER is not set
|
||||
# CONFIG_UTIL_GENPARSER is not set
|
||||
CONFIG_OPTION_BACKEND_NONE=y
|
||||
# CONFIG_USE_OPTION_TABLE is not set
|
||||
CONFIG_COMPRESS_RAMSTAGE=y
|
||||
CONFIG_INCLUDE_CONFIG_FILE=y
|
||||
CONFIG_COLLECT_TIMESTAMPS=y
|
||||
# CONFIG_TIMESTAMPS_ON_CONSOLE is not set
|
||||
CONFIG_USE_BLOBS=y
|
||||
# CONFIG_USE_AMD_BLOBS is not set
|
||||
# CONFIG_USE_QC_BLOBS is not set
|
||||
# CONFIG_COVERAGE is not set
|
||||
# CONFIG_UBSAN is not set
|
||||
CONFIG_HAVE_ASAN_IN_RAMSTAGE=y
|
||||
# CONFIG_ASAN is not set
|
||||
CONFIG_NO_STAGE_CACHE=y
|
||||
# CONFIG_CBMEM_STAGE_CACHE is not set
|
||||
# CONFIG_UPDATE_IMAGE is not set
|
||||
# CONFIG_BOOTSPLASH_IMAGE is not set
|
||||
# CONFIG_FW_CONFIG is not set
|
||||
|
||||
#
|
||||
# Software Bill Of Materials (SBOM)
|
||||
#
|
||||
# CONFIG_SBOM is not set
|
||||
# end of Software Bill Of Materials (SBOM)
|
||||
# end of General setup
|
||||
|
||||
#
|
||||
# Mainboard
|
||||
#
|
||||
|
||||
#
|
||||
# Important: Run 'make distclean' before switching boards
|
||||
#
|
||||
# CONFIG_VENDOR_51NB is not set
|
||||
# CONFIG_VENDOR_ACER is not set
|
||||
# CONFIG_VENDOR_ADLINK is not set
|
||||
# CONFIG_VENDOR_AMD is not set
|
||||
# CONFIG_VENDOR_AOPEN is not set
|
||||
# CONFIG_VENDOR_APPLE is not set
|
||||
# CONFIG_VENDOR_ASROCK is not set
|
||||
CONFIG_VENDOR_ASUS=y
|
||||
# CONFIG_VENDOR_BAP is not set
|
||||
# CONFIG_VENDOR_BIOSTAR is not set
|
||||
# CONFIG_VENDOR_BOSTENTECH is not set
|
||||
# CONFIG_VENDOR_CAVIUM is not set
|
||||
# CONFIG_VENDOR_CLEVO is not set
|
||||
# CONFIG_VENDOR_COMPULAB is not set
|
||||
# CONFIG_VENDOR_DELL is not set
|
||||
# CONFIG_VENDOR_ELMEX is not set
|
||||
# CONFIG_VENDOR_EMULATION is not set
|
||||
# CONFIG_VENDOR_EXAMPLE is not set
|
||||
# CONFIG_VENDOR_FACEBOOK is not set
|
||||
# CONFIG_VENDOR_FOXCONN is not set
|
||||
# CONFIG_VENDOR_GETAC is not set
|
||||
# CONFIG_VENDOR_GIGABYTE is not set
|
||||
# CONFIG_VENDOR_GIZMOSPHERE is not set
|
||||
# CONFIG_VENDOR_GOOGLE is not set
|
||||
# CONFIG_VENDOR_HP is not set
|
||||
# CONFIG_VENDOR_IBASE is not set
|
||||
# CONFIG_VENDOR_INTEL is not set
|
||||
# CONFIG_VENDOR_JETWAY is not set
|
||||
# CONFIG_VENDOR_KONTRON is not set
|
||||
# CONFIG_VENDOR_LENOVO is not set
|
||||
# CONFIG_VENDOR_LIBRETREND is not set
|
||||
# CONFIG_VENDOR_LIPPERT is not set
|
||||
# CONFIG_VENDOR_MSI is not set
|
||||
# CONFIG_VENDOR_OCP is not set
|
||||
# CONFIG_VENDOR_OPENCELLULAR is not set
|
||||
# CONFIG_VENDOR_PACKARDBELL is not set
|
||||
# CONFIG_VENDOR_PCENGINES is not set
|
||||
# CONFIG_VENDOR_PINE64 is not set
|
||||
# CONFIG_VENDOR_PORTWELL is not set
|
||||
# CONFIG_VENDOR_PRODRIVE is not set
|
||||
# CONFIG_VENDOR_PROTECTLI is not set
|
||||
# CONFIG_VENDOR_PURISM is not set
|
||||
# CONFIG_VENDOR_RAZER is not set
|
||||
# CONFIG_VENDOR_RODA is not set
|
||||
# CONFIG_VENDOR_SAMSUNG is not set
|
||||
# CONFIG_VENDOR_SAPPHIRE is not set
|
||||
# CONFIG_VENDOR_SCALEWAY is not set
|
||||
# CONFIG_VENDOR_SIEMENS is not set
|
||||
# CONFIG_VENDOR_SIFIVE is not set
|
||||
# CONFIG_VENDOR_STARLABS is not set
|
||||
# CONFIG_VENDOR_SUPERMICRO is not set
|
||||
# CONFIG_VENDOR_SYSTEM76 is not set
|
||||
# CONFIG_VENDOR_TI is not set
|
||||
# CONFIG_VENDOR_UP is not set
|
||||
CONFIG_BOARD_SPECIFIC_OPTIONS=y
|
||||
CONFIG_MAINBOARD_PART_NUMBER="A88XM-E"
|
||||
CONFIG_MAINBOARD_VERSION="1.0"
|
||||
CONFIG_MAINBOARD_DIR="asus/a88xm-e"
|
||||
CONFIG_VGA_BIOS_ID="1002,9996"
|
||||
CONFIG_DIMM_MAX=4
|
||||
CONFIG_DIMM_SPD_SIZE=256
|
||||
CONFIG_FMDFILE=""
|
||||
# CONFIG_NO_POST is not set
|
||||
CONFIG_MAINBOARD_VENDOR="ASUS"
|
||||
CONFIG_CBFS_SIZE=0x00800000
|
||||
CONFIG_CONSOLE_SERIAL=y
|
||||
CONFIG_MAX_CPUS=4
|
||||
CONFIG_ONBOARD_VGA_IS_PRIMARY=y
|
||||
CONFIG_POST_DEVICE=y
|
||||
CONFIG_POST_IO=y
|
||||
CONFIG_UART_FOR_CONSOLE=0
|
||||
CONFIG_EFS_SPI_READ_MODE=2
|
||||
CONFIG_EFS_SPI_SPEED=1
|
||||
CONFIG_EFS_SPI_MICRON_FLAG=0
|
||||
CONFIG_NORMAL_READ_SPI_SPEED=1
|
||||
CONFIG_ALT_SPI_SPEED=1
|
||||
CONFIG_TPM_SPI_SPEED=1
|
||||
# CONFIG_VBOOT is not set
|
||||
CONFIG_IRQ_SLOT_COUNT=11
|
||||
CONFIG_HW_MEM_HOLE_SIZEK=0x200000
|
||||
CONFIG_DEVICETREE="devicetree.cb"
|
||||
# CONFIG_HUDSON_LEGACY_FREE is not set
|
||||
CONFIG_OVERRIDE_DEVICETREE=""
|
||||
CONFIG_VGA_BIOS=y
|
||||
CONFIG_MAINBOARD_SMBIOS_MANUFACTURER="ASUS"
|
||||
CONFIG_PRERAM_CBMEM_CONSOLE_SIZE=0xc00
|
||||
CONFIG_BOARD_ASUS_A88XM_E=y
|
||||
# CONFIG_BOARD_ASUS_AM1I_A is not set
|
||||
# CONFIG_BOARD_ASUS_F2A85_M is not set
|
||||
# CONFIG_BOARD_ASUS_F2A85_M_PRO is not set
|
||||
# CONFIG_BOARD_ASUS_F2A85_M_LE is not set
|
||||
# CONFIG_BOARD_ASUS_H61M_CS is not set
|
||||
# CONFIG_BOARD_ASUS_P8H61_M_LX is not set
|
||||
# CONFIG_BOARD_ASUS_P8H61_M_LX3_R2_0 is not set
|
||||
# CONFIG_BOARD_ASUS_P8H61_M_PRO is not set
|
||||
# CONFIG_BOARD_ASUS_P8H61_M_PRO_CM6630 is not set
|
||||
# CONFIG_BOARD_ASUS_MAXIMUS_IV_GENE_Z is not set
|
||||
# CONFIG_BOARD_ASUS_P2B is not set
|
||||
# CONFIG_BOARD_ASUS_P2B_D is not set
|
||||
# CONFIG_BOARD_ASUS_P2B_DS is not set
|
||||
# CONFIG_BOARD_ASUS_P2B_F is not set
|
||||
# CONFIG_BOARD_ASUS_P2B_LS is not set
|
||||
# CONFIG_BOARD_ASUS_P3B_F is not set
|
||||
# CONFIG_BOARD_ASUS_P5GC_MX is not set
|
||||
# CONFIG_BOARD_ASUS_P5QC is not set
|
||||
# CONFIG_BOARD_ASUS_P5Q_PRO is not set
|
||||
# CONFIG_BOARD_ASUS_P5QL_PRO is not set
|
||||
# CONFIG_BOARD_ASUS_P5Q_SE is not set
|
||||
# CONFIG_BOARD_ASUS_P5Q is not set
|
||||
# CONFIG_BOARD_ASUS_P5QL_EM is not set
|
||||
# CONFIG_BOARD_ASUS_P5QPL_AM is not set
|
||||
# CONFIG_BOARD_ASUS_P5G41T_M_LX is not set
|
||||
# CONFIG_BOARD_ASUS_P8C_WS is not set
|
||||
# CONFIG_BOARD_ASUS_P8H77_V is not set
|
||||
# CONFIG_BOARD_ASUS_P8Z77_M_PRO is not set
|
||||
# CONFIG_BOARD_ASUS_P8Z77_V_LX2 is not set
|
||||
# CONFIG_BOARD_ASUS_P8Z77_V is not set
|
||||
# CONFIG_BOARD_ASUS_P8Z77_M is not set
|
||||
# CONFIG_HUDSON_XHCI_FWM is not set
|
||||
# CONFIG_HUDSON_XHCI_ENABLE is not set
|
||||
CONFIG_CMOS_LAYOUT_FILE="src/mainboard/$(MAINBOARDDIR)/cmos.layout"
|
||||
CONFIG_BOOT_DEVICE_SPI_FLASH_BUS=0
|
||||
# CONFIG_CONSOLE_POST is not set
|
||||
CONFIG_MEMLAYOUT_LD_FILE="src/arch/x86/memlayout.ld"
|
||||
CONFIG_DCACHE_RAM_BASE=0x30000
|
||||
CONFIG_DCACHE_RAM_SIZE=0x10000
|
||||
CONFIG_C_ENV_BOOTBLOCK_SIZE=0x40000
|
||||
CONFIG_DCACHE_BSP_STACK_SIZE=0x4000
|
||||
CONFIG_ECAM_MMCONF_BASE_ADDRESS=0xF8000000
|
||||
CONFIG_ECAM_MMCONF_BUS_NUMBER=64
|
||||
CONFIG_MAX_ACPI_TABLE_SIZE_KB=144
|
||||
CONFIG_MRC_SETTINGS_CACHE_SIZE=0x10000
|
||||
CONFIG_SPI_FLASH_INCLUDE_ALL_DRIVERS=y
|
||||
CONFIG_SPI_FLASH_WINBOND=y
|
||||
CONFIG_DRIVERS_INTEL_WIFI=y
|
||||
CONFIG_CONSOLE_CBMEM_BUFFER_SIZE=0x20000
|
||||
CONFIG_VGA_BIOS_FILE="../../../pciroms/pci1002,9996.rom"
|
||||
CONFIG_MAINBOARD_SMBIOS_PRODUCT_NAME="A88XM-E"
|
||||
CONFIG_PS2K_EISAID="PNP0303"
|
||||
CONFIG_PS2M_EISAID="PNP0F13"
|
||||
# CONFIG_PCIEXP_L1_SUB_STATE is not set
|
||||
# CONFIG_PCIEXP_CLK_PM is not set
|
||||
CONFIG_DRIVERS_UART_8250IO=y
|
||||
CONFIG_HEAP_SIZE=0xc0000
|
||||
CONFIG_EC_GPE_SCI=0x50
|
||||
CONFIG_BOARD_ROMSIZE_KB_8192=y
|
||||
# CONFIG_COREBOOT_ROMSIZE_KB_256 is not set
|
||||
# CONFIG_COREBOOT_ROMSIZE_KB_512 is not set
|
||||
# CONFIG_COREBOOT_ROMSIZE_KB_1024 is not set
|
||||
# CONFIG_COREBOOT_ROMSIZE_KB_2048 is not set
|
||||
# CONFIG_COREBOOT_ROMSIZE_KB_4096 is not set
|
||||
# CONFIG_COREBOOT_ROMSIZE_KB_5120 is not set
|
||||
# CONFIG_COREBOOT_ROMSIZE_KB_6144 is not set
|
||||
CONFIG_COREBOOT_ROMSIZE_KB_8192=y
|
||||
# CONFIG_COREBOOT_ROMSIZE_KB_10240 is not set
|
||||
# CONFIG_COREBOOT_ROMSIZE_KB_12288 is not set
|
||||
# CONFIG_COREBOOT_ROMSIZE_KB_16384 is not set
|
||||
# CONFIG_COREBOOT_ROMSIZE_KB_32768 is not set
|
||||
# CONFIG_COREBOOT_ROMSIZE_KB_65536 is not set
|
||||
CONFIG_COREBOOT_ROMSIZE_KB=8192
|
||||
CONFIG_ROM_SIZE=0x00800000
|
||||
# end of Mainboard
|
||||
|
||||
#
|
||||
# Chipset
|
||||
#
|
||||
|
||||
#
|
||||
# SoC
|
||||
#
|
||||
CONFIG_ARCH_ALL_STAGES_X86=y
|
||||
CONFIG_CHIPSET_DEVICETREE=""
|
||||
CONFIG_CBFS_MCACHE_SIZE=0x4000
|
||||
CONFIG_ROMSTAGE_ADDR=0x2000000
|
||||
CONFIG_VERSTAGE_ADDR=0x2000000
|
||||
# CONFIG_VGA_BIOS_SECOND is not set
|
||||
CONFIG_ACPI_CPU_STRING="\\_SB.CP%02d"
|
||||
CONFIG_BOTTOMIO_POSITION=0x80000000
|
||||
CONFIG_EHCI_BAR=0xfef00000
|
||||
CONFIG_AHCI_ROM_ID="1022,7801"
|
||||
CONFIG_STACK_SIZE=0x2000
|
||||
CONFIG_VBT_DATA_SIZE_KB=8
|
||||
CONFIG_INTEL_GMA_BCLV_OFFSET=0xc8254
|
||||
CONFIG_INTEL_GMA_BCLV_WIDTH=16
|
||||
CONFIG_INTEL_GMA_BCLM_OFFSET=0xc8256
|
||||
CONFIG_INTEL_GMA_BCLM_WIDTH=16
|
||||
CONFIG_BOOTBLOCK_IN_CBFS=y
|
||||
# CONFIG_PCIEXP_ASPM is not set
|
||||
# CONFIG_PCIEXP_COMMON_CLOCK is not set
|
||||
CONFIG_TTYS0_BASE=0x3f8
|
||||
CONFIG_TTYS0_LCS=3
|
||||
CONFIG_UART_PCI_ADDR=0x0
|
||||
CONFIG_SOC_AMD_COMMON=y
|
||||
CONFIG_SOC_AMD_COMMON_BLOCK_ACPIMMIO=y
|
||||
CONFIG_SOC_AMD_COMMON_BLOCK_ACPIMMIO_BIOSRAM=y
|
||||
CONFIG_CBFS_CACHE_ALIGN=8
|
||||
CONFIG_SOC_AMD_COMMON_BLOCK_PCI_MMCONF=y
|
||||
# CONFIG_SOC_AMD_COMMON_BLOCK_SPI_DEBUG is not set
|
||||
|
||||
#
|
||||
# CPU
|
||||
#
|
||||
CONFIG_CPU_AMD_AGESA=y
|
||||
CONFIG_UDELAY_LAPIC_FIXED_FSB=200
|
||||
# CONFIG_ENABLE_MRC_CACHE is not set
|
||||
CONFIG_CPU_AMD_AGESA_FAMILY15_TN=y
|
||||
CONFIG_SSE2=y
|
||||
CONFIG_LEGACY_SMP_INIT=y
|
||||
CONFIG_XAPIC_ONLY=y
|
||||
CONFIG_UDELAY_LAPIC=y
|
||||
CONFIG_LAPIC_MONOTONIC_TIMER=y
|
||||
CONFIG_UNKNOWN_TSC_RATE=y
|
||||
CONFIG_TSC_SYNC_LFENCE=y
|
||||
CONFIG_LOGICAL_CPUS=y
|
||||
CONFIG_SMM_ASEG=y
|
||||
CONFIG_X86_AMD_FIXED_MTRRS=y
|
||||
CONFIG_SMP=y
|
||||
CONFIG_SSE=y
|
||||
|
||||
#
|
||||
# Northbridge
|
||||
#
|
||||
CONFIG_NORTHBRIDGE_AMD_AGESA=y
|
||||
CONFIG_NORTHBRIDGE_AMD_AGESA_FAMILY15_TN=y
|
||||
|
||||
#
|
||||
# Southbridge
|
||||
#
|
||||
CONFIG_SOUTHBRIDGE_AMD_AGESA_HUDSON=y
|
||||
CONFIG_SOUTHBRIDGE_SPECIFIC_OPTIONS=y
|
||||
CONFIG_HUDSON_SATA_MODE=2
|
||||
|
||||
#
|
||||
# AHCI
|
||||
#
|
||||
# CONFIG_HUDSON_AHCI_ROM is not set
|
||||
CONFIG_ACPI_ENABLE_THERMAL_ZONE=y
|
||||
# CONFIG_PCIEXP_HOTPLUG is not set
|
||||
CONFIG_FIXED_RCBA_MMIO_BASE=0xfed1c000
|
||||
CONFIG_RCBA_LENGTH=0x4000
|
||||
|
||||
#
|
||||
# Super I/O
|
||||
#
|
||||
CONFIG_SUPERIO_ITE_COMMON_PRE_RAM=y
|
||||
CONFIG_SUPERIO_ITE_ENV_CTRL=y
|
||||
CONFIG_SUPERIO_ITE_ENV_CTRL_FAN16_CONFIG=y
|
||||
CONFIG_SUPERIO_ITE_ENV_CTRL_8BIT_PWM=y
|
||||
CONFIG_SUPERIO_ITE_ENV_CTRL_PWM_FREQ2=y
|
||||
CONFIG_SUPERIO_ITE_ENV_CTRL_5FANS=y
|
||||
CONFIG_SUPERIO_ITE_ENV_CTRL_7BIT_SLOPE_REG=y
|
||||
CONFIG_SUPERIO_ITE_ENV_CTRL_EXT_ANY_TMPIN=y
|
||||
CONFIG_SUPERIO_ITE_IT8728F=y
|
||||
|
||||
#
|
||||
# Embedded Controllers
|
||||
#
|
||||
|
||||
#
|
||||
# AMD Platform Initialization
|
||||
#
|
||||
# CONFIG_CPU_AMD_AGESA_BINARY_PI is not set
|
||||
CONFIG_CPU_AMD_AGESA_OPENSOURCE=y
|
||||
CONFIG_IDS_OPTIONS_HOOKED_UP=y
|
||||
CONFIG_IDS_ENABLED=y
|
||||
|
||||
#
|
||||
# Warning: IDS options may not work. Enable at your own risk!
|
||||
#
|
||||
# CONFIG_IDS_CONTROL_ENABLED is not set
|
||||
# CONFIG_IDS_PERF_ANALYSIS is not set
|
||||
# CONFIG_IDS_TRACING_ENABLED is not set
|
||||
CONFIG_CPU_AMD_AGESA_OPENSOURCE_MEM_JEDEC=y
|
||||
# CONFIG_CPU_AMD_AGESA_OPENSOURCE_MEM_XMP_1 is not set
|
||||
# CONFIG_CPU_AMD_AGESA_OPENSOURCE_MEM_XMP_2 is not set
|
||||
# CONFIG_CPU_AMD_AGESA_OPENSOURCE_MEM_CUSTOM is not set
|
||||
# CONFIG_AGESA_EXTRA_TIMESTAMPS is not set
|
||||
# end of AMD Platform Initialization
|
||||
|
||||
CONFIG_ARCH_X86=y
|
||||
CONFIG_ARCH_BOOTBLOCK_X86_32=y
|
||||
CONFIG_ARCH_VERSTAGE_X86_32=y
|
||||
CONFIG_ARCH_ROMSTAGE_X86_32=y
|
||||
CONFIG_ARCH_POSTCAR_X86_32=y
|
||||
CONFIG_ARCH_RAMSTAGE_X86_32=y
|
||||
CONFIG_ARCH_ALL_STAGES_X86_32=y
|
||||
CONFIG_X86_TOP4G_BOOTMEDIA_MAP=y
|
||||
CONFIG_NUM_IPI_STARTS=2
|
||||
CONFIG_PC80_SYSTEM=y
|
||||
CONFIG_POSTCAR_STAGE=y
|
||||
CONFIG_BOOTBLOCK_SIMPLE=y
|
||||
# CONFIG_BOOTBLOCK_NORMAL is not set
|
||||
CONFIG_COLLECT_TIMESTAMPS_TSC=y
|
||||
CONFIG_HAVE_CF9_RESET=y
|
||||
CONFIG_HAVE_CF9_RESET_PREPARE=y
|
||||
CONFIG_DEBUG_HW_BREAKPOINTS=y
|
||||
CONFIG_DEBUG_NULL_DEREF_BREAKPOINTS=y
|
||||
# end of Chipset
|
||||
|
||||
#
|
||||
# Devices
|
||||
#
|
||||
CONFIG_VGA_ROM_RUN_DEFAULT=y
|
||||
# CONFIG_VGA_ROM_RUN is not set
|
||||
CONFIG_NO_GFX_INIT=y
|
||||
CONFIG_PCI=y
|
||||
CONFIG_ECAM_MMCONF_SUPPORT=y
|
||||
CONFIG_PCIX_PLUGIN_SUPPORT=y
|
||||
CONFIG_CARDBUS_PLUGIN_SUPPORT=y
|
||||
CONFIG_PCIEXP_PLUGIN_SUPPORT=y
|
||||
CONFIG_ECAM_MMCONF_LENGTH=0x04000000
|
||||
CONFIG_PCI_ALLOW_BUS_MASTER=y
|
||||
CONFIG_PCI_SET_BUS_MASTER_PCI_BRIDGES=y
|
||||
CONFIG_PCI_ALLOW_BUS_MASTER_ANY_DEVICE=y
|
||||
# CONFIG_PCIEXP_SUPPORT_RESIZABLE_BARS is not set
|
||||
# CONFIG_PCIEXP_LANE_ERR_STAT_CLEAR is not set
|
||||
# CONFIG_EARLY_PCI_BRIDGE is not set
|
||||
CONFIG_SUBSYSTEM_VENDOR_ID=0x0000
|
||||
CONFIG_SUBSYSTEM_DEVICE_ID=0x0000
|
||||
# CONFIG_VGA_BIOS_DGPU is not set
|
||||
# CONFIG_SOFTWARE_I2C is not set
|
||||
CONFIG_I2C_TRANSFER_TIMEOUT_US=500000
|
||||
CONFIG_RESOURCE_ALLOCATOR_V3=y
|
||||
# end of Devices
|
||||
|
||||
#
|
||||
# Generic Drivers
|
||||
#
|
||||
CONFIG_CRB_TPM_BASE_ADDRESS=0xfed40000
|
||||
# CONFIG_ELOG is not set
|
||||
CONFIG_CACHE_MRC_SETTINGS=y
|
||||
# CONFIG_MRC_SETTINGS_PROTECT is not set
|
||||
CONFIG_SPI_FLASH=y
|
||||
CONFIG_BOOT_DEVICE_SPI_FLASH_RW_NOMMAP=y
|
||||
CONFIG_BOOT_DEVICE_SPI_FLASH_RW_NOMMAP_EARLY=y
|
||||
# CONFIG_SPI_FLASH_NO_FAST_READ is not set
|
||||
CONFIG_SPI_FLASH_ADESTO=y
|
||||
CONFIG_SPI_FLASH_AMIC=y
|
||||
CONFIG_SPI_FLASH_ATMEL=y
|
||||
CONFIG_SPI_FLASH_EON=y
|
||||
CONFIG_SPI_FLASH_GIGADEVICE=y
|
||||
CONFIG_SPI_FLASH_MACRONIX=y
|
||||
CONFIG_SPI_FLASH_SPANSION=y
|
||||
CONFIG_SPI_FLASH_SST=y
|
||||
CONFIG_SPI_FLASH_STMICRO=y
|
||||
CONFIG_DRIVERS_UART=y
|
||||
# CONFIG_DRIVERS_UART_OXPCIE is not set
|
||||
CONFIG_HAVE_USBDEBUG=y
|
||||
CONFIG_HAVE_USBDEBUG_OPTIONS=y
|
||||
# CONFIG_USBDEBUG is not set
|
||||
# CONFIG_VPD is not set
|
||||
CONFIG_DRIVERS_AMD_PI=y
|
||||
# CONFIG_DRIVERS_GENERIC_CBFS_SERIAL is not set
|
||||
# CONFIG_DRIVERS_GENERIC_CBFS_UUID is not set
|
||||
# CONFIG_DRIVERS_GENESYSLOGIC_GL9750 is not set
|
||||
# CONFIG_DRIVERS_GENESYSLOGIC_GL9755 is not set
|
||||
# CONFIG_DRIVERS_GENESYSLOGIC_GL9763E is not set
|
||||
# CONFIG_DRIVERS_I2C_MAX98396 is not set
|
||||
CONFIG_INTEL_GMA_OPREGION_2_0=y
|
||||
# CONFIG_DRIVERS_NXP_UWB_SR1XX is not set
|
||||
# CONFIG_DRIVERS_PS2_KEYBOARD is not set
|
||||
CONFIG_DRIVERS_MC146818=y
|
||||
CONFIG_USE_PC_CMOS_ALTCENTURY=y
|
||||
# CONFIG_DRIVERS_SIL_3114 is not set
|
||||
CONFIG_DRIVERS_WIFI_GENERIC=y
|
||||
# end of Generic Drivers
|
||||
|
||||
#
|
||||
# Security
|
||||
#
|
||||
|
||||
#
|
||||
# CBFS verification
|
||||
#
|
||||
# CONFIG_CBFS_VERIFICATION is not set
|
||||
# end of CBFS verification
|
||||
|
||||
#
|
||||
# Verified Boot (vboot)
|
||||
#
|
||||
# end of Verified Boot (vboot)
|
||||
|
||||
#
|
||||
# Trusted Platform Module
|
||||
#
|
||||
CONFIG_NO_TPM=y
|
||||
# end of Trusted Platform Module
|
||||
|
||||
#
|
||||
# Memory initialization
|
||||
#
|
||||
CONFIG_PLATFORM_HAS_DRAM_CLEAR=y
|
||||
CONFIG_SECURITY_CLEAR_DRAM_ON_REGULAR_BOOT=y
|
||||
# end of Memory initialization
|
||||
|
||||
CONFIG_BOOTMEDIA_LOCK_NONE=y
|
||||
# CONFIG_BOOTMEDIA_LOCK_CONTROLLER is not set
|
||||
# CONFIG_BOOTMEDIA_LOCK_CHIP is not set
|
||||
# end of Security
|
||||
|
||||
CONFIG_ACPI_HAVE_PCAT_8259=y
|
||||
CONFIG_HAVE_ACPI_TABLES=y
|
||||
CONFIG_BOOT_DEVICE_SPI_FLASH=y
|
||||
CONFIG_BOOT_DEVICE_MEMORY_MAPPED=y
|
||||
CONFIG_BOOT_DEVICE_SUPPORTS_WRITES=y
|
||||
|
||||
#
|
||||
# Console
|
||||
#
|
||||
CONFIG_BOOTBLOCK_CONSOLE=y
|
||||
CONFIG_POSTCAR_CONSOLE=y
|
||||
CONFIG_SQUELCH_EARLY_SMP=y
|
||||
|
||||
#
|
||||
# I/O mapped, 8250-compatible
|
||||
#
|
||||
|
||||
#
|
||||
# Serial port base address = 0x3f8
|
||||
#
|
||||
# CONFIG_CONSOLE_SERIAL_921600 is not set
|
||||
# CONFIG_CONSOLE_SERIAL_460800 is not set
|
||||
# CONFIG_CONSOLE_SERIAL_230400 is not set
|
||||
CONFIG_CONSOLE_SERIAL_115200=y
|
||||
# CONFIG_CONSOLE_SERIAL_57600 is not set
|
||||
# CONFIG_CONSOLE_SERIAL_38400 is not set
|
||||
# CONFIG_CONSOLE_SERIAL_19200 is not set
|
||||
# CONFIG_CONSOLE_SERIAL_9600 is not set
|
||||
CONFIG_TTYS0_BAUD=115200
|
||||
# CONFIG_SPKMODEM is not set
|
||||
# CONFIG_CONSOLE_NE2K is not set
|
||||
CONFIG_CONSOLE_CBMEM=y
|
||||
# CONFIG_CONSOLE_SPI_FLASH is not set
|
||||
# CONFIG_DEFAULT_CONSOLE_LOGLEVEL_8 is not set
|
||||
CONFIG_DEFAULT_CONSOLE_LOGLEVEL_7=y
|
||||
# CONFIG_DEFAULT_CONSOLE_LOGLEVEL_6 is not set
|
||||
# CONFIG_DEFAULT_CONSOLE_LOGLEVEL_5 is not set
|
||||
# CONFIG_DEFAULT_CONSOLE_LOGLEVEL_4 is not set
|
||||
# CONFIG_DEFAULT_CONSOLE_LOGLEVEL_3 is not set
|
||||
# CONFIG_DEFAULT_CONSOLE_LOGLEVEL_2 is not set
|
||||
# CONFIG_DEFAULT_CONSOLE_LOGLEVEL_1 is not set
|
||||
# CONFIG_DEFAULT_CONSOLE_LOGLEVEL_0 is not set
|
||||
CONFIG_DEFAULT_CONSOLE_LOGLEVEL=7
|
||||
CONFIG_CONSOLE_USE_LOGLEVEL_PREFIX=y
|
||||
CONFIG_CONSOLE_USE_ANSI_ESCAPES=y
|
||||
# CONFIG_CMOS_POST is not set
|
||||
CONFIG_POST_DEVICE_NONE=y
|
||||
# CONFIG_POST_DEVICE_LPC is not set
|
||||
# CONFIG_POST_DEVICE_PCI_PCIE is not set
|
||||
CONFIG_POST_IO_PORT=0x80
|
||||
CONFIG_HWBASE_DEBUG_CB=y
|
||||
# end of Console
|
||||
|
||||
CONFIG_HAVE_ACPI_RESUME=y
|
||||
CONFIG_RESUME_PATH_SAME_AS_BOOT=y
|
||||
CONFIG_HAVE_MONOTONIC_TIMER=y
|
||||
CONFIG_HAVE_OPTION_TABLE=y
|
||||
CONFIG_IOAPIC=y
|
||||
CONFIG_GFXUMA=y
|
||||
CONFIG_HAVE_MP_TABLE=y
|
||||
CONFIG_HAVE_PIRQ_TABLE=y
|
||||
|
||||
#
|
||||
# System tables
|
||||
#
|
||||
CONFIG_GENERATE_MP_TABLE=y
|
||||
CONFIG_GENERATE_PIRQ_TABLE=y
|
||||
CONFIG_GENERATE_SMBIOS_TABLES=y
|
||||
CONFIG_MAINBOARD_SERIAL_NUMBER="123456789"
|
||||
# end of System tables
|
||||
|
||||
#
|
||||
# Payload
|
||||
#
|
||||
CONFIG_PAYLOAD_NONE=y
|
||||
# CONFIG_PAYLOAD_ELF is not set
|
||||
# CONFIG_PAYLOAD_BOOTBOOT is not set
|
||||
# CONFIG_PAYLOAD_FILO is not set
|
||||
# CONFIG_PAYLOAD_GRUB2 is not set
|
||||
# CONFIG_PAYLOAD_SEAGRUB is not set
|
||||
# CONFIG_PAYLOAD_LINUXBOOT is not set
|
||||
# CONFIG_PAYLOAD_SEABIOS is not set
|
||||
# CONFIG_PAYLOAD_UBOOT is not set
|
||||
# CONFIG_PAYLOAD_YABITS is not set
|
||||
# CONFIG_PAYLOAD_EDK2 is not set
|
||||
# CONFIG_PAYLOAD_LINUX is not set
|
||||
CONFIG_PAYLOAD_OPTIONS=""
|
||||
# CONFIG_PXE is not set
|
||||
# CONFIG_COMPRESS_SECONDARY_PAYLOAD is not set
|
||||
|
||||
#
|
||||
# Secondary Payloads
|
||||
#
|
||||
# CONFIG_COREINFO_SECONDARY_PAYLOAD is not set
|
||||
# CONFIG_GRUB2_SECONDARY_PAYLOAD is not set
|
||||
# CONFIG_MEMTEST_SECONDARY_PAYLOAD is not set
|
||||
# CONFIG_NVRAMCUI_SECONDARY_PAYLOAD is not set
|
||||
# CONFIG_SEABIOS_SECONDARY_PAYLOAD is not set
|
||||
# CONFIG_TINT_SECONDARY_PAYLOAD is not set
|
||||
# CONFIG_COREDOOM_SECONDARY_PAYLOAD is not set
|
||||
# end of Secondary Payloads
|
||||
# end of Payload
|
||||
|
||||
#
|
||||
# Debugging
|
||||
#
|
||||
|
||||
#
|
||||
# CPU Debug Settings
|
||||
#
|
||||
# CONFIG_DISPLAY_MTRRS is not set
|
||||
|
||||
#
|
||||
# BLOB Debug Settings
|
||||
#
|
||||
|
||||
#
|
||||
# General Debug Settings
|
||||
#
|
||||
# CONFIG_GDB_STUB is not set
|
||||
# CONFIG_FATAL_ASSERTS is not set
|
||||
# CONFIG_DEBUG_CBFS is not set
|
||||
# CONFIG_DEBUG_PIRQ is not set
|
||||
# CONFIG_DEBUG_MALLOC is not set
|
||||
# CONFIG_DEBUG_CONSOLE_INIT is not set
|
||||
# CONFIG_DEBUG_SPI_FLASH is not set
|
||||
# CONFIG_DEBUG_BOOT_STATE is not set
|
||||
# CONFIG_DEBUG_ADA_CODE is not set
|
||||
# end of Debugging
|
||||
|
||||
CONFIG_DECOMPRESS_OFAST=y
|
||||
CONFIG_WARNINGS_ARE_ERRORS=y
|
||||
CONFIG_MAX_REBOOT_CNT=3
|
||||
CONFIG_RELOCATABLE_MODULES=y
|
||||
CONFIG_HAVE_BOOTBLOCK=y
|
||||
CONFIG_HAVE_ROMSTAGE=y
|
||||
CONFIG_HAVE_RAMSTAGE=y
|
||||
@@ -0,0 +1,8 @@
|
||||
tree="default"
|
||||
romtype="normal"
|
||||
arch="x86_64"
|
||||
payload_seabios="y"
|
||||
payload_seabios_withgrub="y"
|
||||
payload_seabios_grubonly="y"
|
||||
payload_memtest="y"
|
||||
grub_scan_disk="ahci"
|
||||
@@ -0,0 +1 @@
|
||||
build/coreboot.rom
|
||||
@@ -0,0 +1,4 @@
|
||||
tree="default"
|
||||
romtype="normal"
|
||||
rev="54d0cc9a3cf31963ebf0ca85a87a7e464ef678a7" # 4.18_branch
|
||||
arch="x86_64"
|
||||
@@ -1,3 +0,0 @@
|
||||
bsdtar
|
||||
bsdunzip
|
||||
bsdcpio
|
||||
@@ -1,3 +0,0 @@
|
||||
# SPDX-License-Identifier: GPL-3.0-or-later
|
||||
|
||||
premake="autoreconf -fiv src/libarchive"
|
||||
@@ -0,0 +1,11 @@
|
||||
pkg_add="pacman -S --needed --noconfirm"
|
||||
pkglist=" \
|
||||
acpica arm-none-eabi-binutils arm-none-eabi-gcc arm-none-eabi-newlib \
|
||||
autogen base-devel bison cmake curl device-mapper doxygen \
|
||||
dtc e2fsprogs flex freetype2 fuse2 gawk gcc-ada gdb gettext git \
|
||||
help2man innoextract libftdi libpciaccess libusb nasm ncurses openssl p7zip \
|
||||
parted pciutils perl perl-libwww python python-setuptools rsync sharutils \
|
||||
subversion swig texinfo ttf-dejavu unarchiver unzip wget xz zlib \
|
||||
"
|
||||
|
||||
aur_notice="bdf-unifont unifont"
|
||||
Regular → Executable
+13
-5
@@ -1,7 +1,15 @@
|
||||
# SPDX-License-Identifier: GPL-3.0-or-later
|
||||
|
||||
pkg_add="apt-get install --no-install-recommends $reinstall"
|
||||
pkg_add="apt-get -y install"
|
||||
pkglist=" \
|
||||
mercurial python3 python3-dev python3-pip curl wget dpkg-sig libssl-dev zstd \
|
||||
libxml2-dev
|
||||
acpica-tools autoconf autogen automake autopoint autotools-dev bc \
|
||||
binutils-arm-none-eabi bison build-essential cmake curl device-tree-compiler \
|
||||
doxygen e2fsprogs efitools flex fonts-unifont gawk gcc-arm-linux-gnueabi \
|
||||
gcc-arm-none-eabi gdb gettext git gnat help2man innoextract libdevmapper-dev \
|
||||
libfdt-dev libfont-freetype-perl libfreetype6-dev libftdi-dev libfuse-dev \
|
||||
libgnutls28-dev liblz4-tool liblzma-dev libncurses5-dev libncurses-dev \
|
||||
libnewlib-arm-none-eabi libopts25 libopts25-dev libpci-dev libpython3-dev \
|
||||
libsdl2-dev libselinux1-dev libssl-dev libtool libusb-1.0 libusb-1.0-0-dev \
|
||||
libusb-dev lz4 lzma lzma-alone m4 nasm openssl p7zip p7zip-full parted pciutils \
|
||||
perl pkg-config python3 python3-distutils python3-pkg-resources python3-pycryptodome \
|
||||
python3-pyelftools python3-setuptools python-is-python3 sharutils swig unar \
|
||||
unifont unzip uuid-dev wget zlib1g-dev \
|
||||
"
|
||||
|
||||
@@ -1,7 +0,0 @@
|
||||
# SPDX-License-Identifier: GPL-3.0-or-later
|
||||
|
||||
pkg_add="dnf ${reinstall}install"
|
||||
pkglist=" \
|
||||
python3 curl wget zstd python3-devel python3-pip mercurial openssl-devel \
|
||||
libxml2-devel
|
||||
"
|
||||
Executable
+12
@@ -0,0 +1,12 @@
|
||||
pkg_add="dnf -y install"
|
||||
pkglist=" \
|
||||
acpica-tools arm-none-eabi-binutils arm-none-eabi-gcc \
|
||||
arm-none-eabi-gcc arm-none-eabi-newlib autogen bison bzip2 cmake curl \
|
||||
dejavu-fonts-all device-mapper doxygen e2fsprogs flex freetype-devel fuse \
|
||||
gawk gcc gcc-gnat gdb gettext gettext-devel git gprbuild help2man \
|
||||
innoextract intltool libftdi-devel libselinux-devel libusb1 libusb1-devel \
|
||||
nasm ncurses-devel openssl-devel p7zip p7zip-plugins pandoc parted \
|
||||
pciutils-devel perl perl-libwww-perl python-unversioned-command python3 \
|
||||
python3-setuptools rsync sharutils subversion texinfo unar unifont \
|
||||
unifont-fonts unifont-ttf-fonts unzip wget xz zlib-devel \
|
||||
"
|
||||
Symlink
+1
@@ -0,0 +1 @@
|
||||
debian
|
||||
@@ -0,0 +1,10 @@
|
||||
pkg_add="pacman -S --needed --noconfirm"
|
||||
pkglist=" \
|
||||
acpica arm-none-eabi-binutils arm-none-eabi-gcc arm-none-eabi-newlib \
|
||||
autogen base-devel bdf-unifont bison cmake curl device-mapper doxygen \
|
||||
dtc e2fsprogs flex freetype2 fuse2 gawk gcc-ada gdb gettext git \
|
||||
help2man innoextract libftdi libpciaccess libusb nasm ncurses openssl p7zip \
|
||||
parted pciutils perl perl-libwww python python-setuptools rsync sharutils \
|
||||
subversion swig texinfo ttf-dejavu unarchiver unifont-utils unzip wget xz \
|
||||
zlib \
|
||||
"
|
||||
Symlink
+1
@@ -0,0 +1 @@
|
||||
debian
|
||||
Symlink
+1
@@ -0,0 +1 @@
|
||||
ubuntu2004
|
||||
Symlink
+1
@@ -0,0 +1 @@
|
||||
debian
|
||||
Executable
+14
@@ -0,0 +1,14 @@
|
||||
pkg_add="apt-get -y install"
|
||||
pkglist=" \
|
||||
autoconf autogen automake autopoint autotools-dev bc binutils-arm-none-eabi \
|
||||
bison build-essential cmake curl device-tree-compiler doxygen e2fsprogs efitools \
|
||||
flex gawk gcc-arm-linux-gnueabi gcc-arm-none-eabi gdb gettext git gnat help2man \
|
||||
innoextract libdevmapper-dev libfdt-dev libfont-freetype-perl libfreetype6-dev \
|
||||
libftdi-dev libfuse-dev libgnutls28-dev liblz4-tool liblzma-dev libncurses5-dev \
|
||||
libncurses-dev libnewlib-arm-none-eabi libopts25 libopts25-dev libpci-dev \
|
||||
libpython3-dev libsdl2-dev libselinux1-dev libssl-dev libtool libusb-1.0-0 \
|
||||
libusb-1.0-0-dev lz4 lzma lzma-alone m4 nasm openssl p7zip p7zip-full parted \
|
||||
pciutils perl pkg-config python3 python3-distutils python3-pkg-resources \
|
||||
python3-pycryptodome python3-pyelftools python3-setuptools python-is-python3 \
|
||||
sharutils swig ttf-unifont unar unifont unzip uuid-dev wget zlib1g-dev \
|
||||
"
|
||||
@@ -0,0 +1,11 @@
|
||||
pkg_add="xbps-install -y"
|
||||
pkglist=" \
|
||||
acpica-utils autogen base-devel bison cmake \
|
||||
cross-arm-none-eabi-binutils cross-arm-none-eabi-gcc \
|
||||
cross-arm-none-eabi-libstdc++ cross-arm-none-eabi-newlib curl \
|
||||
dejavu-fonts-ttf device-mapper doxygen e2fsprogs flexflex font-unifont-bdf \
|
||||
freetype fuse gawk gcc-ada gdb gettext gettext-devel git help2man \
|
||||
innoextract libftdi1 libpciaccess libusb nasm ncurses ncurses-devel openssl
|
||||
p7zip parted pciutils perl perl-LWP python python3 python3-setuptools rsync \
|
||||
sharutils subversion texinfo unar unzip wget xz zlib \
|
||||
"
|
||||
@@ -1,25 +0,0 @@
|
||||
From 2a476bafca96f7a44e5ca07adcf637cc3b340a45 Mon Sep 17 00:00:00 2001
|
||||
From: LibreWolf Developers <noreply@librewolf.net>
|
||||
Date: Sun, 6 Sep 2026 10:09:05 +0100
|
||||
Subject: [PATCH 01/52] add-mojeek.patch
|
||||
|
||||
---
|
||||
services/settings/dumps/main/moz.build | 2 ++
|
||||
1 file changed, 2 insertions(+)
|
||||
|
||||
diff --git a/services/settings/dumps/main/moz.build b/services/settings/dumps/main/moz.build
|
||||
index ee5e57c5b4e3..34e72bb608a1 100644
|
||||
--- a/services/settings/dumps/main/moz.build
|
||||
+++ b/services/settings/dumps/main/moz.build
|
||||
@@ -62,6 +62,8 @@ if CONFIG["MOZ_BUILD_APP"] == "browser":
|
||||
"search-config-icons/25de0352-aabb-d31f-15f7-bf9299fb004c.meta.json",
|
||||
"search-config-icons/2bbe48f4-d3b8-c9e0-86e3-a54c37ec3335",
|
||||
"search-config-icons/2bbe48f4-d3b8-c9e0-86e3-a54c37ec3335.meta.json",
|
||||
+ "search-config-icons/2c4b8834-030c-4097-a887-c7506689095c",
|
||||
+ "search-config-icons/2c4b8834-030c-4097-a887-c7506689095c.meta.json",
|
||||
"search-config-icons/2e835b0e-9709-d1bb-9725-87f59f3445ca",
|
||||
"search-config-icons/2e835b0e-9709-d1bb-9725-87f59f3445ca.meta.json",
|
||||
"search-config-icons/32d26d19-aeb0-5c01-32e8-f8970be9246f",
|
||||
--
|
||||
2.47.3
|
||||
|
||||
-24
@@ -1,24 +0,0 @@
|
||||
From 285c02a31e60bbe6e5eb98d1b449439126768f41 Mon Sep 17 00:00:00 2001
|
||||
From: LibreWolf Developers <noreply@librewolf.net>
|
||||
Date: Sun, 6 Sep 2026 10:09:09 +0100
|
||||
Subject: [PATCH 02/52] always-fetch-latest-toolchain-artifact.patch
|
||||
|
||||
---
|
||||
python/mozbuild/mozbuild/artifact_commands.py | 1 +
|
||||
1 file changed, 1 insertion(+)
|
||||
|
||||
diff --git a/python/mozbuild/mozbuild/artifact_commands.py b/python/mozbuild/mozbuild/artifact_commands.py
|
||||
index 928227d2cb5f..af3d58c6505b 100644
|
||||
--- a/python/mozbuild/mozbuild/artifact_commands.py
|
||||
+++ b/python/mozbuild/mozbuild/artifact_commands.py
|
||||
@@ -10,6 +10,7 @@ import logging
|
||||
import os
|
||||
import pathlib
|
||||
import shutil
|
||||
+import requests
|
||||
from collections import OrderedDict
|
||||
|
||||
import mozversioncontrol
|
||||
--
|
||||
2.47.3
|
||||
|
||||
@@ -1,34 +0,0 @@
|
||||
From 62e68c8db9275d65df47179a770126c667e00399 Mon Sep 17 00:00:00 2001
|
||||
From: LibreWolf Developers <noreply@librewolf.net>
|
||||
Date: Sun, 6 Sep 2026 10:09:13 +0100
|
||||
Subject: [PATCH 03/52] autoconfig-setEnv.patch
|
||||
|
||||
---
|
||||
extensions/pref/autoconfig/src/prefcalls.js | 10 ++++++++++
|
||||
1 file changed, 10 insertions(+)
|
||||
|
||||
diff --git a/extensions/pref/autoconfig/src/prefcalls.js b/extensions/pref/autoconfig/src/prefcalls.js
|
||||
index 47eb92982c97..78dd0ee5473a 100644
|
||||
--- a/extensions/pref/autoconfig/src/prefcalls.js
|
||||
+++ b/extensions/pref/autoconfig/src/prefcalls.js
|
||||
@@ -205,7 +205,17 @@ function getenv(name) {
|
||||
return undefined;
|
||||
}
|
||||
|
||||
+function setEnv(name, value) {
|
||||
+ try {
|
||||
+ return Services.env.set(name, value);
|
||||
+ } catch (e) {
|
||||
+ displayError("getEnvironment", e);
|
||||
+ }
|
||||
+ return undefined;
|
||||
+}
|
||||
+
|
||||
var APIs = {
|
||||
+ setEnv,
|
||||
pref,
|
||||
defaultPref,
|
||||
lockPref,
|
||||
--
|
||||
2.47.3
|
||||
|
||||
@@ -1,25 +0,0 @@
|
||||
From 50902dac61f2447168c46115d6ae8023908eb00e Mon Sep 17 00:00:00 2001
|
||||
From: LibreWolf Developers <noreply@librewolf.net>
|
||||
Date: Sun, 6 Sep 2026 10:09:16 +0100
|
||||
Subject: [PATCH 04/52] bootstrap.patch
|
||||
|
||||
---
|
||||
python/mozversioncontrol/mozversioncontrol/repo/source.py | 2 +-
|
||||
1 file changed, 1 insertion(+), 1 deletion(-)
|
||||
|
||||
diff --git a/python/mozversioncontrol/mozversioncontrol/repo/source.py b/python/mozversioncontrol/mozversioncontrol/repo/source.py
|
||||
index 85048fafce91..71904adc1657 100644
|
||||
--- a/python/mozversioncontrol/mozversioncontrol/repo/source.py
|
||||
+++ b/python/mozversioncontrol/mozversioncontrol/repo/source.py
|
||||
@@ -111,7 +111,7 @@ class SrcRepository(Repository):
|
||||
for root, dirs, files in os.walk(self.path):
|
||||
base = os.path.relpath(root, self.path)
|
||||
for name in files:
|
||||
- res.append(os.path.join(base, name))
|
||||
+ res.append(os.path.join(base, name).replace("\\", "/"))
|
||||
return res
|
||||
|
||||
def get_tracked_files_finder(self, path):
|
||||
--
|
||||
2.47.3
|
||||
|
||||
@@ -1,164 +0,0 @@
|
||||
From e0a864992baea169d5f20b366ecdbe918ce1bcba Mon Sep 17 00:00:00 2001
|
||||
From: LibreWolf Developers <noreply@librewolf.net>
|
||||
Date: Sun, 6 Sep 2026 10:09:20 +0100
|
||||
Subject: [PATCH 05/52] canvas-permission.patch
|
||||
|
||||
---
|
||||
browser/modules/SitePermissions.sys.mjs | 98 ++++++++++++++++++-
|
||||
.../resistfingerprinting/RFPHelper.sys.mjs | 10 +-
|
||||
2 files changed, 105 insertions(+), 3 deletions(-)
|
||||
|
||||
diff --git a/browser/modules/SitePermissions.sys.mjs b/browser/modules/SitePermissions.sys.mjs
|
||||
index 3cf23c809c23..b112014e0d49 100644
|
||||
--- a/browser/modules/SitePermissions.sys.mjs
|
||||
+++ b/browser/modules/SitePermissions.sys.mjs
|
||||
@@ -3,6 +3,7 @@
|
||||
* file, You can obtain one at http://mozilla.org/MPL/2.0/. */
|
||||
|
||||
import { XPCOMUtils } from "resource://gre/modules/XPCOMUtils.sys.mjs";
|
||||
+import { RFPHelper } from "resource://gre/modules/RFPHelper.sys.mjs";
|
||||
|
||||
var gStringBundle = Services.strings.createBundle(
|
||||
"chrome://browser/locale/sitePermissions.properties"
|
||||
@@ -807,6 +808,67 @@ export var SitePermissions = {
|
||||
return null;
|
||||
}
|
||||
},
|
||||
+
|
||||
+ /**
|
||||
+ * Computes whether the canvas image extraction prompt is enabled
|
||||
+ * based on Baseline/FPP settings and their respective overrides.
|
||||
+ *
|
||||
+ * @returns {boolean} true if CanvasImageExtractionPrompt/AllTargets is active
|
||||
+ */
|
||||
+ _computeCanvasImageExtractionEnabled() {
|
||||
+ const fppEnabled = this.fingerprintingProtectionEnabled;
|
||||
+ const baselineEnabled = this.baselineFingerprintingProtectionEnabled;
|
||||
+
|
||||
+ if (fppEnabled) {
|
||||
+ const defaults = RFPHelper.getTargetDefaults();
|
||||
+ const active = new Set(defaults);
|
||||
+ const overrides = this.fingerprintingProtectionOverrides;
|
||||
+ this._applyOverrides(active, overrides);
|
||||
+ if (active.has("CanvasImageExtractionPrompt")) {
|
||||
+ return true;
|
||||
+ }
|
||||
+ }
|
||||
+
|
||||
+ if (baselineEnabled) {
|
||||
+ const defaults = RFPHelper.getTargetDefaultsBaseline();
|
||||
+ const active = new Set(defaults);
|
||||
+ const overrides = this.baselineFingerprintingProtectionOverrides;
|
||||
+ this._applyOverrides(active, overrides);
|
||||
+ if (active.has("CanvasImageExtractionPrompt")) {
|
||||
+ return true;
|
||||
+ }
|
||||
+ }
|
||||
+
|
||||
+ return false;
|
||||
+ },
|
||||
+
|
||||
+ /**
|
||||
+ * Applies override flags to an active set of targets.
|
||||
+ *
|
||||
+ * @param {Set} active - The active targets set
|
||||
+ * @param {string} overridesString - The override string (e.g., "+CanvasImageExtractionPrompt,+AllTargets")
|
||||
+ */
|
||||
+ _applyOverrides(active, overridesString) {
|
||||
+ for (const flag of overridesString.split(",").filter(Boolean)) {
|
||||
+ if (flag.startsWith("+")) {
|
||||
+ const target = flag.slice(1);
|
||||
+ if (
|
||||
+ target === "AllTargets" ||
|
||||
+ target === "CanvasImageExtractionPrompt"
|
||||
+ ) {
|
||||
+ active.add("CanvasImageExtractionPrompt");
|
||||
+ }
|
||||
+ } else if (flag.startsWith("-")) {
|
||||
+ const target = flag.slice(1);
|
||||
+ if (
|
||||
+ target === "AllTargets" ||
|
||||
+ target === "CanvasImageExtractionPrompt"
|
||||
+ ) {
|
||||
+ active.delete("CanvasImageExtractionPrompt");
|
||||
+ }
|
||||
+ }
|
||||
+ }
|
||||
+ },
|
||||
};
|
||||
|
||||
let gPermissions = {
|
||||
@@ -1069,7 +1131,10 @@ let gPermissions = {
|
||||
|
||||
canvas: {
|
||||
get disabled() {
|
||||
- return !SitePermissions.resistFingerprinting;
|
||||
+ return (
|
||||
+ !SitePermissions.resistFingerprinting &&
|
||||
+ !SitePermissions._computeCanvasImageExtractionEnabled()
|
||||
+ );
|
||||
},
|
||||
},
|
||||
|
||||
@@ -1133,6 +1198,37 @@ XPCOMUtils.defineLazyPreferenceGetter(
|
||||
false,
|
||||
SitePermissions.invalidatePermissionList.bind(SitePermissions)
|
||||
);
|
||||
+XPCOMUtils.defineLazyPreferenceGetter(
|
||||
+ SitePermissions,
|
||||
+ "fingerprintingProtectionEnabled",
|
||||
+ "privacy.fingerprintingProtection",
|
||||
+ false,
|
||||
+ SitePermissions.invalidatePermissionList.bind(SitePermissions)
|
||||
+);
|
||||
+
|
||||
+XPCOMUtils.defineLazyPreferenceGetter(
|
||||
+ SitePermissions,
|
||||
+ "fingerprintingProtectionOverrides",
|
||||
+ "privacy.fingerprintingProtection.overrides",
|
||||
+ "",
|
||||
+ SitePermissions.invalidatePermissionList.bind(SitePermissions)
|
||||
+);
|
||||
+
|
||||
+XPCOMUtils.defineLazyPreferenceGetter(
|
||||
+ SitePermissions,
|
||||
+ "baselineFingerprintingProtectionEnabled",
|
||||
+ "privacy.baselineFingerprintingProtection",
|
||||
+ false,
|
||||
+ SitePermissions.invalidatePermissionList.bind(SitePermissions)
|
||||
+);
|
||||
+
|
||||
+XPCOMUtils.defineLazyPreferenceGetter(
|
||||
+ SitePermissions,
|
||||
+ "baselineFingerprintingProtectionOverrides",
|
||||
+ "privacy.baselineFingerprintingProtection.overrides",
|
||||
+ "",
|
||||
+ SitePermissions.invalidatePermissionList.bind(SitePermissions)
|
||||
+);
|
||||
|
||||
XPCOMUtils.defineLazyPreferenceGetter(
|
||||
SitePermissions,
|
||||
diff --git a/toolkit/components/resistfingerprinting/RFPHelper.sys.mjs b/toolkit/components/resistfingerprinting/RFPHelper.sys.mjs
|
||||
index f82d7309e129..d11f8a011fac 100644
|
||||
--- a/toolkit/components/resistfingerprinting/RFPHelper.sys.mjs
|
||||
+++ b/toolkit/components/resistfingerprinting/RFPHelper.sys.mjs
|
||||
@@ -208,8 +208,14 @@ class _RFPHelper {
|
||||
return;
|
||||
}
|
||||
|
||||
- let loadContext = notificationCallbacks.getInterface(Ci.nsILoadContext);
|
||||
- if (!loadContext || !loadContext.isContent) {
|
||||
+ let loadContext;
|
||||
+ try {
|
||||
+ loadContext = notificationCallbacks.getInterface(Ci.nsILoadContext);
|
||||
+ } catch (e) {
|
||||
+ return;
|
||||
+ }
|
||||
+
|
||||
+ if (!loadContext.isContent) {
|
||||
return;
|
||||
}
|
||||
|
||||
--
|
||||
2.47.3
|
||||
|
||||
@@ -1,40 +0,0 @@
|
||||
From 9d67e4bd2a45975b777a1f798a2b05cd0e7a9d6e Mon Sep 17 00:00:00 2001
|
||||
From: LibreWolf Developers <noreply@librewolf.net>
|
||||
Date: Sun, 6 Sep 2026 10:09:24 +0100
|
||||
Subject: [PATCH 06/52] custom-ubo-assets-bootstrap-location.patch
|
||||
|
||||
---
|
||||
.../components/extensions/parent/ext-storage.js | 17 +++++++++++++++++
|
||||
1 file changed, 17 insertions(+)
|
||||
|
||||
diff --git a/toolkit/components/extensions/parent/ext-storage.js b/toolkit/components/extensions/parent/ext-storage.js
|
||||
index 0d6109c25019..3dce60b6d5ec 100644
|
||||
--- a/toolkit/components/extensions/parent/ext-storage.js
|
||||
+++ b/toolkit/components/extensions/parent/ext-storage.js
|
||||
@@ -411,6 +411,23 @@ this.storage = class extends ExtensionAPIPersistent {
|
||||
managed: {
|
||||
async get(keys) {
|
||||
enforceNoTemporaryAddon(extension.id);
|
||||
+ const assetsBootstrapLocation = Services.prefs.getStringPref(
|
||||
+ "librewolf.uBO.assetsBootstrapLocation",
|
||||
+ undefined
|
||||
+ );
|
||||
+ if (extension.id == "uBlock0@raymondhill.net" && assetsBootstrapLocation) {
|
||||
+ let data = {};
|
||||
+ try {
|
||||
+ let manifestData = await getManagedStorageManifestData(extension, context);
|
||||
+ data = await ExtensionStorage._filterProperties(extension.id, manifestData, keys);
|
||||
+ } catch (e) {
|
||||
+ // no managed manifest
|
||||
+ }
|
||||
+ return {
|
||||
+ ...data,
|
||||
+ adminSettings: { ...(data.adminSettings || {}), assetsBootstrapLocation },
|
||||
+ };
|
||||
+ }
|
||||
let data = await getManagedStorageManifestData(extension, context);
|
||||
return ExtensionStorage._filterProperties(extension.id, data, keys);
|
||||
},
|
||||
--
|
||||
2.47.3
|
||||
|
||||
@@ -1,83 +0,0 @@
|
||||
From 4dcc900e125ca963cd141185588de161e444e836 Mon Sep 17 00:00:00 2001
|
||||
From: LibreWolf Developers <noreply@librewolf.net>
|
||||
Date: Sun, 6 Sep 2026 10:09:28 +0100
|
||||
Subject: [PATCH 07/52] dbus_name.patch
|
||||
|
||||
---
|
||||
toolkit/components/remote/nsDBusRemoteClient.cpp | 6 +++---
|
||||
toolkit/components/remote/nsDBusRemoteServer.cpp | 8 ++++----
|
||||
2 files changed, 7 insertions(+), 7 deletions(-)
|
||||
|
||||
diff --git a/toolkit/components/remote/nsDBusRemoteClient.cpp b/toolkit/components/remote/nsDBusRemoteClient.cpp
|
||||
index bd1fe5f9cffd..bb68321ba95a 100644
|
||||
--- a/toolkit/components/remote/nsDBusRemoteClient.cpp
|
||||
+++ b/toolkit/components/remote/nsDBusRemoteClient.cpp
|
||||
@@ -73,14 +73,14 @@ bool nsDBusRemoteClient::GetRemoteDestinationName(const char* aProgram,
|
||||
mozilla::XREAppData::SanitizeNameForDBus(profileName);
|
||||
|
||||
aDestinationName =
|
||||
- nsPrintfCString("org.mozilla.%s.%s", aProgram, profileName.get());
|
||||
+ nsPrintfCString("io.gitlab.%s.%s", aProgram, profileName.get());
|
||||
if (aDestinationName.Length() > DBUS_MAXIMUM_NAME_LENGTH)
|
||||
aDestinationName.Truncate(DBUS_MAXIMUM_NAME_LENGTH);
|
||||
|
||||
if (!g_dbus_is_name(aDestinationName.get())) {
|
||||
// We don't have a valid busName yet - try to create a default one.
|
||||
aDestinationName =
|
||||
- nsPrintfCString("org.mozilla.%s.%s", aProgram, "default");
|
||||
+ nsPrintfCString("io.gitlab.%s.%s", aProgram, "default");
|
||||
if (!g_dbus_is_name(aDestinationName.get())) {
|
||||
// We failed completely to get a valid bus name - just quit.
|
||||
LOG(" failed to validate profile DBus name");
|
||||
@@ -118,7 +118,7 @@ nsresult nsDBusRemoteClient::DoSendDBusCommandLine(const char* aProfile,
|
||||
}
|
||||
|
||||
nsAutoCString remoteInterfaceName;
|
||||
- remoteInterfaceName = nsPrintfCString("org.mozilla.%s", appName.get());
|
||||
+ remoteInterfaceName = nsPrintfCString("io.gitlab.%s", appName.get());
|
||||
|
||||
LOG(" DBus destination: %s\n", destinationName.get());
|
||||
LOG(" DBus path: %s\n", pathName.get());
|
||||
diff --git a/toolkit/components/remote/nsDBusRemoteServer.cpp b/toolkit/components/remote/nsDBusRemoteServer.cpp
|
||||
index 226b2dc52874..f2477798aeca 100644
|
||||
--- a/toolkit/components/remote/nsDBusRemoteServer.cpp
|
||||
+++ b/toolkit/components/remote/nsDBusRemoteServer.cpp
|
||||
@@ -25,7 +25,7 @@ static const char* introspect_template =
|
||||
"1.0//EN\"\n"
|
||||
"\"http://www.freedesktop.org/standards/dbus/1.0/introspect.dtd\">\n"
|
||||
"<node>\n"
|
||||
- " <interface name=\"org.mozilla.%s\">\n"
|
||||
+ " <interface name=\"io.gitlab.%s\">\n"
|
||||
" <method name=\"OpenURL\">\n"
|
||||
" <arg name=\"url\" direction=\"in\" type=\"ay\"/>\n"
|
||||
" </method>\n"
|
||||
@@ -35,7 +35,7 @@ static const char* introspect_template =
|
||||
bool nsDBusRemoteServer::HandleOpenURL(const gchar* aInterfaceName,
|
||||
const gchar* aMethodName,
|
||||
Span<const gchar> aParam) {
|
||||
- nsPrintfCString ourInterfaceName("org.mozilla.%s", mAppName.get());
|
||||
+ nsPrintfCString ourInterfaceName("io.gitlab.%s", mAppName.get());
|
||||
|
||||
if ((strcmp("OpenURL", aMethodName) != 0) ||
|
||||
(strcmp(ourInterfaceName.get(), aInterfaceName) != 0)) {
|
||||
@@ -199,7 +199,7 @@ nsresult nsDBusRemoteServer::Startup(const char* aAppName,
|
||||
|
||||
mozilla::XREAppData::SanitizeNameForDBus(profileName);
|
||||
|
||||
- nsPrintfCString busName("org.mozilla.%s.%s", mAppName.get(),
|
||||
+ nsPrintfCString busName("io.gitlab.%s.%s", mAppName.get(),
|
||||
profileName.get());
|
||||
if (busName.Length() > DBUS_MAXIMUM_NAME_LENGTH) {
|
||||
busName.Truncate(DBUS_MAXIMUM_NAME_LENGTH);
|
||||
@@ -207,7 +207,7 @@ nsresult nsDBusRemoteServer::Startup(const char* aAppName,
|
||||
|
||||
// We don't have a valid busName yet - try to create a default one.
|
||||
if (!g_dbus_is_name(busName.get())) {
|
||||
- busName = nsPrintfCString("org.mozilla.%s.%s", mAppName.get(), "default");
|
||||
+ busName = nsPrintfCString("io.gitlab.%s.%s", mAppName.get(), "default");
|
||||
if (!g_dbus_is_name(busName.get())) {
|
||||
// We failed completely to get a valid bus name - just quit.
|
||||
g_warning("nsDBusRemoteServer: couldn't get a valid bus name!");
|
||||
--
|
||||
2.47.3
|
||||
|
||||
@@ -1,42 +0,0 @@
|
||||
From c34c0143ee4dd38902c9a8a3defaae42f74020c6 Mon Sep 17 00:00:00 2001
|
||||
From: LibreWolf Developers <noreply@librewolf.net>
|
||||
Date: Sun, 6 Sep 2026 10:09:31 +0100
|
||||
Subject: [PATCH 08/52] delete-cookie-permission.patch
|
||||
|
||||
---
|
||||
browser/components/ProfileDataUpgrader.sys.mjs | 10 ++++++++++
|
||||
1 file changed, 10 insertions(+)
|
||||
|
||||
diff --git a/browser/components/ProfileDataUpgrader.sys.mjs b/browser/components/ProfileDataUpgrader.sys.mjs
|
||||
index 6b0e2251f0eb..c859bf8db8e0 100644
|
||||
--- a/browser/components/ProfileDataUpgrader.sys.mjs
|
||||
+++ b/browser/components/ProfileDataUpgrader.sys.mjs
|
||||
@@ -1030,6 +1030,9 @@ export let ProfileDataUpgrader = {
|
||||
// Only migrate durable, user-set permissions. Anything that expires
|
||||
// (session/time) or is re-applied from an enterprise policy on every
|
||||
// startup (EXPIRE_POLICY) must not be persisted as a regular permission.
|
||||
+
|
||||
+ const toDelete = [];
|
||||
+
|
||||
Services.perms.getAllByTypes(["cookie"]).forEach(p => {
|
||||
if (p.expireType != Services.perms.EXPIRE_NEVER) {
|
||||
return;
|
||||
@@ -1040,8 +1043,15 @@ export let ProfileDataUpgrader = {
|
||||
"persist-data-on-shutdown",
|
||||
Ci.nsICookiePermission.ACCESS_ALLOW
|
||||
);
|
||||
+ toDelete.push(p);
|
||||
}
|
||||
});
|
||||
+
|
||||
+ toDelete.forEach(p => {
|
||||
+ Services.perms.removePermission(p);
|
||||
+ });
|
||||
+
|
||||
+ Services.perms.removeOrphanedInteractionRecords();
|
||||
}
|
||||
|
||||
if (
|
||||
--
|
||||
2.47.3
|
||||
|
||||
@@ -1,61 +0,0 @@
|
||||
From 4890972bf672fd70b7d114eef185f5ab9efbf82d Mon Sep 17 00:00:00 2001
|
||||
From: LibreWolf Developers <noreply@librewolf.net>
|
||||
Date: Sun, 6 Sep 2026 10:09:36 +0100
|
||||
Subject: [PATCH 09/52] devtools-bypass.patch
|
||||
|
||||
---
|
||||
devtools/server/actors/thread.js | 5 ++++-
|
||||
devtools/server/actors/webconsole/listeners/console-api.js | 3 ++-
|
||||
devtools/shared/flags.js | 2 ++
|
||||
3 files changed, 8 insertions(+), 2 deletions(-)
|
||||
|
||||
diff --git a/devtools/server/actors/thread.js b/devtools/server/actors/thread.js
|
||||
index e0ceee32c625..b7b90d476ead 100644
|
||||
--- a/devtools/server/actors/thread.js
|
||||
+++ b/devtools/server/actors/thread.js
|
||||
@@ -8,6 +8,7 @@
|
||||
// error packets.
|
||||
/* eslint-disable no-throw-literal */
|
||||
|
||||
+var flags = require("resource://devtools/shared/flags.js");
|
||||
const { Actor } = require("resource://devtools/shared/protocol/Actor.js");
|
||||
const { Pool } = require("resource://devtools/shared/protocol/Pool.js");
|
||||
const { threadSpec } = require("resource://devtools/shared/specs/thread.js");
|
||||
@@ -390,7 +391,9 @@ class ThreadActor extends Actor {
|
||||
attach(options) {
|
||||
// Note that the client avoids trying to call attach if already attached.
|
||||
// But just in case, avoid any possible duplicate call to attach.
|
||||
- if (this.alreadyAttached) {
|
||||
+ let forceDetach = flags.lwDetach;
|
||||
+
|
||||
+ if (this.alreadyAttached || forceDetach) {
|
||||
return;
|
||||
}
|
||||
|
||||
diff --git a/devtools/server/actors/webconsole/listeners/console-api.js b/devtools/server/actors/webconsole/listeners/console-api.js
|
||||
index cdf6a841a8de..ccdd19e95a0d 100644
|
||||
--- a/devtools/server/actors/webconsole/listeners/console-api.js
|
||||
+++ b/devtools/server/actors/webconsole/listeners/console-api.js
|
||||
@@ -98,7 +98,8 @@ class ConsoleAPIListener {
|
||||
* The message object receives from the ConsoleAPIStorage service.
|
||||
*/
|
||||
onConsoleAPILogEvent(message) {
|
||||
- if (!this.handler) {
|
||||
+ let disableConsole = Services.prefs.getBoolPref("librewolf.console.logging_disabled", false);
|
||||
+ if (!this.handler || disableConsole) {
|
||||
return;
|
||||
}
|
||||
|
||||
diff --git a/devtools/shared/flags.js b/devtools/shared/flags.js
|
||||
index 95b1be41d20b..562b5591037d 100644
|
||||
--- a/devtools/shared/flags.js
|
||||
+++ b/devtools/shared/flags.js
|
||||
@@ -60,3 +60,5 @@ makePrefTrackedFlag(exports, "wantLogging", "devtools.debugger.log");
|
||||
* behaviors typically enable easier testing or enhanced debugging features.
|
||||
*/
|
||||
makePrefTrackedFlag(exports, "testing", "devtools.testing");
|
||||
+
|
||||
+makePrefTrackedFlag(exports, "lwDetach", "librewolf.debugger.force_detach");
|
||||
--
|
||||
2.47.3
|
||||
|
||||
-169
@@ -1,169 +0,0 @@
|
||||
From 86537762694f63b6e4ce3c06c11444a726b08958 Mon Sep 17 00:00:00 2001
|
||||
From: LibreWolf Developers <noreply@librewolf.net>
|
||||
Date: Sun, 6 Sep 2026 10:09:43 +0100
|
||||
Subject: [PATCH 10/52] disable-data-reporting-at-compile-time.patch
|
||||
|
||||
---
|
||||
browser/components/tabbrowser/content/tabbrowser.js | 6 ------
|
||||
browser/moz.configure | 4 ++--
|
||||
python/mach/mach/telemetry.py | 5 +----
|
||||
python/sites/mach.txt | 2 +-
|
||||
third_party/rust/glean-core/src/core/mod.rs | 3 ++-
|
||||
third_party/rust/glean-core/src/lib.rs | 3 +++
|
||||
toolkit/components/telemetry/core/Telemetry.cpp | 6 +++---
|
||||
toolkit/library/rust/gkrust-features.mozbuild | 2 +-
|
||||
8 files changed, 13 insertions(+), 18 deletions(-)
|
||||
|
||||
diff --git a/browser/components/tabbrowser/content/tabbrowser.js b/browser/components/tabbrowser/content/tabbrowser.js
|
||||
index 43180487a2fa..b60919e238be 100644
|
||||
--- a/browser/components/tabbrowser/content/tabbrowser.js
|
||||
+++ b/browser/components/tabbrowser/content/tabbrowser.js
|
||||
@@ -3390,10 +3390,6 @@
|
||||
);
|
||||
}
|
||||
|
||||
- if (!UserInteraction.running("browser.tabs.opening", window)) {
|
||||
- UserInteraction.start("browser.tabs.opening", "initting", window);
|
||||
- }
|
||||
-
|
||||
// If we're opening a foreground tab, set the owner by default.
|
||||
ownerTab ??= inBackground ? null : this.selectedTab;
|
||||
|
||||
@@ -4239,8 +4235,6 @@
|
||||
0,
|
||||
this.tabContainer
|
||||
);
|
||||
- } else {
|
||||
- UserInteraction.update("browser.tabs.opening", "animated", window);
|
||||
}
|
||||
|
||||
return t;
|
||||
diff --git a/browser/moz.configure b/browser/moz.configure
|
||||
index 3ea3d88b9360..c55951b8debf 100644
|
||||
--- a/browser/moz.configure
|
||||
+++ b/browser/moz.configure
|
||||
@@ -3,11 +3,11 @@
|
||||
# file, You can obtain one at http://mozilla.org/MPL/2.0/.
|
||||
|
||||
imply_option("MOZ_PLACES", True)
|
||||
-imply_option("MOZ_SERVICES_HEALTHREPORT", True)
|
||||
+imply_option("MOZ_SERVICES_HEALTHREPORT", False)
|
||||
imply_option("MOZ_SERVICES_SYNC", True)
|
||||
imply_option("MOZ_DEDICATED_PROFILES", True)
|
||||
imply_option("MOZ_BLOCK_PROFILE_DOWNGRADE", True)
|
||||
-imply_option("MOZ_NORMANDY", True)
|
||||
+imply_option("MOZ_NORMANDY", False)
|
||||
imply_option("MOZ_PROFILE_MIGRATOR", True)
|
||||
|
||||
|
||||
diff --git a/python/mach/mach/telemetry.py b/python/mach/mach/telemetry.py
|
||||
index 2b70b3f75a2d..b111dacc764e 100644
|
||||
--- a/python/mach/mach/telemetry.py
|
||||
+++ b/python/mach/mach/telemetry.py
|
||||
@@ -82,10 +82,7 @@ def is_applicable_telemetry_environment():
|
||||
|
||||
|
||||
def is_telemetry_enabled(settings):
|
||||
- if os.environ.get("DISABLE_TELEMETRY") == "1":
|
||||
- return False
|
||||
-
|
||||
- return settings.mach_telemetry.is_enabled
|
||||
+ return False
|
||||
|
||||
|
||||
def arcrc_path():
|
||||
diff --git a/python/sites/mach.txt b/python/sites/mach.txt
|
||||
index d5cdce88869a..f4f38c1f9b78 100644
|
||||
--- a/python/sites/mach.txt
|
||||
+++ b/python/sites/mach.txt
|
||||
@@ -58,7 +58,7 @@ pth:xpcom/geckoprocesstypes_generator
|
||||
pth:xpcom/idl-parser
|
||||
# glean-sdk may not be installable if a wheel isn't available
|
||||
# and it has to be built from source.
|
||||
-pypi-optional:glean-sdk==68.0.1:telemetry will not be collected
|
||||
+# pypi-optional:glean-sdk==68.0.1:telemetry will not be collected
|
||||
pypi-optional:orjson>=3.10:json operations will be slower in various tools
|
||||
# Mach gracefully handles the case where `psutil` is unavailable.
|
||||
# We aren't (yet) able to pin packages in automation, so we have to
|
||||
diff --git a/third_party/rust/glean-core/src/core/mod.rs b/third_party/rust/glean-core/src/core/mod.rs
|
||||
index 013064660410..1f68b9ef3d4c 100644
|
||||
--- a/third_party/rust/glean-core/src/core/mod.rs
|
||||
+++ b/third_party/rust/glean-core/src/core/mod.rs
|
||||
@@ -813,7 +813,8 @@ impl Glean {
|
||||
///
|
||||
/// When upload is disabled, no data will be recorded.
|
||||
pub fn is_upload_enabled(&self) -> bool {
|
||||
- self.upload_enabled
|
||||
+ _ = self.upload_enabled;
|
||||
+ false
|
||||
}
|
||||
|
||||
/// Check if a ping is enabled.
|
||||
diff --git a/third_party/rust/glean-core/src/lib.rs b/third_party/rust/glean-core/src/lib.rs
|
||||
index c401c3dafef9..2a52db7d9f83 100644
|
||||
--- a/third_party/rust/glean-core/src/lib.rs
|
||||
+++ b/third_party/rust/glean-core/src/lib.rs
|
||||
@@ -916,6 +916,7 @@ pub extern "C" fn glean_enable_logging() {
|
||||
/// **DEPRECATION NOTICE**:
|
||||
/// This API is deprecated. Use `set_collection_enabled` instead.
|
||||
pub fn glean_set_upload_enabled(enabled: bool) {
|
||||
+ let enabled = false;
|
||||
if !was_initialize_called() {
|
||||
return;
|
||||
}
|
||||
@@ -951,6 +952,8 @@ pub fn glean_set_upload_enabled(enabled: bool) {
|
||||
///
|
||||
/// This replaces `set_upload_enabled`.
|
||||
pub fn glean_set_collection_enabled(enabled: bool) {
|
||||
+ // Redundant currently
|
||||
+ let enabled = false;
|
||||
glean_set_upload_enabled(enabled)
|
||||
}
|
||||
|
||||
diff --git a/toolkit/components/telemetry/core/Telemetry.cpp b/toolkit/components/telemetry/core/Telemetry.cpp
|
||||
index 1e83d34cd007..474bc5c50bf3 100644
|
||||
--- a/toolkit/components/telemetry/core/Telemetry.cpp
|
||||
+++ b/toolkit/components/telemetry/core/Telemetry.cpp
|
||||
@@ -693,7 +693,7 @@ TelemetryImpl::GetCanRecordBase(bool* ret) {
|
||||
|
||||
NS_IMETHODIMP
|
||||
TelemetryImpl::SetCanRecordBase(bool canRecord) {
|
||||
-#ifndef FUZZING
|
||||
+#if false
|
||||
if (canRecord != mCanRecordBase) {
|
||||
TelemetryHistogram::SetCanRecordBase(canRecord);
|
||||
TelemetryScalar::SetCanRecordBase(canRecord);
|
||||
@@ -719,7 +719,7 @@ TelemetryImpl::GetCanRecordExtended(bool* ret) {
|
||||
|
||||
NS_IMETHODIMP
|
||||
TelemetryImpl::SetCanRecordExtended(bool canRecord) {
|
||||
-#ifndef FUZZING
|
||||
+#if false
|
||||
if (canRecord != mCanRecordExtended) {
|
||||
TelemetryHistogram::SetCanRecordExtended(canRecord);
|
||||
TelemetryScalar::SetCanRecordExtended(canRecord);
|
||||
@@ -762,7 +762,7 @@ already_AddRefed<nsITelemetry> TelemetryImpl::CreateTelemetryInstance() {
|
||||
}
|
||||
|
||||
bool useTelemetry = false;
|
||||
-#ifndef FUZZING
|
||||
+#if false
|
||||
if (XRE_IsParentProcess() || XRE_IsContentProcess() || XRE_IsGPUProcess() ||
|
||||
XRE_IsRDDProcess() || XRE_IsSocketProcess() || XRE_IsUtilityProcess()) {
|
||||
useTelemetry = true;
|
||||
diff --git a/toolkit/library/rust/gkrust-features.mozbuild b/toolkit/library/rust/gkrust-features.mozbuild
|
||||
index 59535dd585aa..4d32a3062134 100644
|
||||
--- a/toolkit/library/rust/gkrust-features.mozbuild
|
||||
+++ b/toolkit/library/rust/gkrust-features.mozbuild
|
||||
@@ -57,7 +57,7 @@ if CONFIG["MOZ_WEBRTC"]:
|
||||
# We need to tell Glean it is being built with Gecko.
|
||||
gkrust_features += ["glean_with_gecko"]
|
||||
|
||||
-if not CONFIG["MOZILLA_OFFICIAL"]:
|
||||
+if CONFIG["MOZILLA_OFFICIAL"]:
|
||||
gkrust_features += ["glean_disable_upload"]
|
||||
|
||||
if CONFIG["MOZ_ENABLE_DBUS"]:
|
||||
--
|
||||
2.47.3
|
||||
|
||||
@@ -1,207 +0,0 @@
|
||||
From 82f46ce61c0eeaa4a41bdb3441003a307767e017 Mon Sep 17 00:00:00 2001
|
||||
From: LibreWolf Developers <noreply@librewolf.net>
|
||||
Date: Sun, 6 Sep 2026 10:09:47 +0100
|
||||
Subject: [PATCH 11/52] eme-permission.patch
|
||||
|
||||
---
|
||||
.../ContentPermissionPrompt.sys.mjs | 4 +
|
||||
browser/modules/EMEPermissionPrompt.sys.mjs | 111 ++++++++++++++++++
|
||||
dom/media/eme/MediaKeySystemAccessManager.cpp | 23 +++-
|
||||
3 files changed, 132 insertions(+), 6 deletions(-)
|
||||
create mode 100644 browser/modules/EMEPermissionPrompt.sys.mjs
|
||||
|
||||
diff --git a/browser/components/permissions/ContentPermissionPrompt.sys.mjs b/browser/components/permissions/ContentPermissionPrompt.sys.mjs
|
||||
index fc3c64110c37..032010493054 100644
|
||||
--- a/browser/components/permissions/ContentPermissionPrompt.sys.mjs
|
||||
+++ b/browser/components/permissions/ContentPermissionPrompt.sys.mjs
|
||||
@@ -7,6 +7,7 @@ const lazy = {};
|
||||
ChromeUtils.defineESModuleGetters(lazy, {
|
||||
Integration: "resource://gre/modules/Integration.sys.mjs",
|
||||
PermissionUI: "resource:///modules/PermissionUI.sys.mjs",
|
||||
+ EMEPermissionPrompt: "moz-src:///browser/modules/EMEPermissionPrompt.sys.mjs",
|
||||
});
|
||||
/**
|
||||
* ContentPermissionIntegration is responsible for showing the user
|
||||
@@ -40,6 +41,9 @@ const ContentPermissionIntegration = {
|
||||
*/
|
||||
createPermissionPrompt(type, request) {
|
||||
switch (type) {
|
||||
+ case "media-key-system-access": {
|
||||
+ return new lazy.EMEPermissionPrompt(request);
|
||||
+ }
|
||||
case "geolocation": {
|
||||
return new lazy.PermissionUI.GeolocationPermissionPrompt(request);
|
||||
}
|
||||
diff --git a/browser/modules/EMEPermissionPrompt.sys.mjs b/browser/modules/EMEPermissionPrompt.sys.mjs
|
||||
new file mode 100644
|
||||
index 000000000000..4e0d8eeec3f3
|
||||
--- /dev/null
|
||||
+++ b/browser/modules/EMEPermissionPrompt.sys.mjs
|
||||
@@ -0,0 +1,111 @@
|
||||
+/* This Source Code Form is subject to the terms of the Mozilla Public
|
||||
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
|
||||
+ * file, You can obtain one at https://mozilla.org/MPL/2.0/. */
|
||||
+
|
||||
+const lazy = {};
|
||||
+
|
||||
+ChromeUtils.defineESModuleGetters(lazy, {
|
||||
+ PrivateBrowsingUtils: "resource://gre/modules/PrivateBrowsingUtils.sys.mjs",
|
||||
+ SitePermissions: "resource:///modules/SitePermissions.sys.mjs",
|
||||
+});
|
||||
+
|
||||
+ChromeUtils.defineLazyGetter(lazy, "gBrowserBundle", function () {
|
||||
+ return Services.strings.createBundle(
|
||||
+ "chrome://browser/locale/browser.properties"
|
||||
+ );
|
||||
+});
|
||||
+
|
||||
+const { PermissionUI } = ChromeUtils.importESModule(
|
||||
+ "resource:///modules/PermissionUI.sys.mjs"
|
||||
+);
|
||||
+
|
||||
+/**
|
||||
+ * Creates a PermissionPrompt for a nsIContentPermissionRequest for
|
||||
+ * EME (Encrypted Media Extensions).
|
||||
+ *
|
||||
+ * @param request (nsIContentPermissionRequest)
|
||||
+ * The request for a permission from content.
|
||||
+ */
|
||||
+export class EMEPermissionPrompt extends PermissionUI.PermissionPromptForRequest {
|
||||
+ constructor(request) {
|
||||
+ super();
|
||||
+ this.request = request;
|
||||
+ }
|
||||
+
|
||||
+ get type() {
|
||||
+ return "media-key-system-access";
|
||||
+ }
|
||||
+
|
||||
+ get permissionKey() {
|
||||
+ return "media-key-system-access";
|
||||
+ }
|
||||
+
|
||||
+ get popupOptions() {
|
||||
+ let options = {
|
||||
+ learnMoreURL: Services.urlFormatter.formatURLPref("librewolf.eme.warning.infoURL"),
|
||||
+ displayURI: false,
|
||||
+ name: this.getPrincipalName(),
|
||||
+ };
|
||||
+
|
||||
+ // Don't offer "always remember" action in PB mode
|
||||
+ options.checkbox = {
|
||||
+ show: !lazy.PrivateBrowsingUtils.isWindowPrivate(
|
||||
+ this.browser.documentGlobal
|
||||
+ ),
|
||||
+ };
|
||||
+
|
||||
+ if (options.checkbox.show) {
|
||||
+ options.checkbox.label =
|
||||
+ lazy.gBrowserBundle.GetStringFromName("eme.remember2");
|
||||
+ }
|
||||
+
|
||||
+ return options;
|
||||
+ }
|
||||
+
|
||||
+ get notificationID() {
|
||||
+ return "media-key-system-access";
|
||||
+ }
|
||||
+
|
||||
+ get anchorID() {
|
||||
+ return "eme-notification-icon";
|
||||
+ }
|
||||
+
|
||||
+ get message() {
|
||||
+ return lazy.gBrowserBundle.formatStringFromName("eme.siteprompt2", [
|
||||
+ "<>",
|
||||
+ ]);
|
||||
+ }
|
||||
+
|
||||
+ get promptActions() {
|
||||
+ return [
|
||||
+ {
|
||||
+ label: lazy.gBrowserBundle.GetStringFromName("eme.allow2"),
|
||||
+ accessKey: lazy.gBrowserBundle.GetStringFromName("eme.allow2.accesskey"),
|
||||
+ action: lazy.SitePermissions.ALLOW,
|
||||
+ },
|
||||
+ {
|
||||
+ label: lazy.gBrowserBundle.GetStringFromName("eme.block"),
|
||||
+ accessKey: lazy.gBrowserBundle.GetStringFromName("eme.block.accesskey"),
|
||||
+ action: lazy.SitePermissions.BLOCK,
|
||||
+ },
|
||||
+ ];
|
||||
+ }
|
||||
+
|
||||
+ get principal() {
|
||||
+ // The standard/superclass method of getDelegatePrincipal (1) appears to return a null principal here
|
||||
+ // So we're overriding it to use topLevelPrincipal instead, as that's what GeckoView uses (2)
|
||||
+ // 1: https://searchfox.org/firefox-main/rev/e28b34ab/browser/modules/PermissionUI.sys.mjs#762
|
||||
+ // 2: https://searchfox.org/firefox-main/rev/e28b34ab/mobile/shared/components/geckoview/GeckoViewPermission.sys.mjs#124
|
||||
+ return this.request.topLevelPrincipal;
|
||||
+ }
|
||||
+
|
||||
+ prompt() {
|
||||
+ // If the EME UI is disabled, we can't/shouldn't prompt users - so just cancel the request
|
||||
+ if (!Services.prefs.getBoolPref("browser.eme.ui.enabled")) {
|
||||
+ this.cancel();
|
||||
+ } else {
|
||||
+ super.prompt();
|
||||
+ }
|
||||
+ return;
|
||||
+ }
|
||||
+}
|
||||
diff --git a/dom/media/eme/MediaKeySystemAccessManager.cpp b/dom/media/eme/MediaKeySystemAccessManager.cpp
|
||||
index aaa3ff25b64f..56724a03ac24 100644
|
||||
--- a/dom/media/eme/MediaKeySystemAccessManager.cpp
|
||||
+++ b/dom/media/eme/MediaKeySystemAccessManager.cpp
|
||||
@@ -364,9 +364,11 @@ void MediaKeySystemAccessManager::OnDoesAppAllowProtectedMedia(
|
||||
aIsAllowed ? "true" : "false",
|
||||
NS_ConvertUTF16toUTF8(aRequest->mKeySystem).get());
|
||||
if (!aIsAllowed) {
|
||||
- aRequest->RejectPromiseWithNotSupportedError(
|
||||
- nsLiteralCString("The application embedding this user agent has "
|
||||
- "blocked MediaKeySystemAccess"));
|
||||
+ if (IsClearkeyKeySystem(aRequest->mKeySystem)) {
|
||||
+ aRequest->RejectPromiseWithNotSupportedError("CDM is not installed"_ns);
|
||||
+ } else {
|
||||
+ aRequest->RejectPromiseWithNotSupportedError("EME has been preffed off"_ns);
|
||||
+ }
|
||||
return;
|
||||
}
|
||||
|
||||
@@ -421,8 +423,8 @@ void MediaKeySystemAccessManager::RequestMediaKeySystemAccess(
|
||||
return;
|
||||
}
|
||||
|
||||
- if (!StaticPrefs::media_eme_enabled() &&
|
||||
- !IsClearkeyKeySystem(aRequest->mKeySystem)) {
|
||||
+ if (!StaticPrefs::media_eme_enabled()) {
|
||||
+// !IsClearkeyKeySystem(aRequest->mKeySystem)) {
|
||||
// EME disabled by user, send notification to chrome so UI can inform user.
|
||||
// Clearkey is allowed even when EME is disabled because we want the pref
|
||||
// "media.eme.enabled" only taking effect on proprietary DRMs.
|
||||
@@ -431,12 +433,21 @@ void MediaKeySystemAccessManager::RequestMediaKeySystemAccess(
|
||||
MediaKeySystemAccess::NotifyObservers(mWindow, aRequest->mKeySystem,
|
||||
MediaKeySystemStatus::Api_disabled);
|
||||
}
|
||||
- aRequest->RejectPromiseWithNotSupportedError("EME has been preffed off"_ns);
|
||||
+ if (IsClearkeyKeySystem(aRequest->mKeySystem)) {
|
||||
+ aRequest->RejectPromiseWithNotSupportedError("CDM is not installed"_ns);
|
||||
+ } else {
|
||||
+ aRequest->RejectPromiseWithNotSupportedError("EME has been preffed off"_ns);
|
||||
+ }
|
||||
aRequest->mDiagnostics.StoreMediaKeySystemAccess(
|
||||
mWindow->GetExtantDoc(), aRequest->mKeySystem, false, __func__);
|
||||
return;
|
||||
}
|
||||
|
||||
+ if (IsClearkeyKeySystem(aRequest->mKeySystem) && !Preferences::GetBool("librewolf.eme.gmp-clearkey.enabled", false)) {
|
||||
+ aRequest->RejectPromiseWithNotSupportedError("CDM is not installed"_ns);
|
||||
+ return;
|
||||
+ }
|
||||
+
|
||||
nsAutoCString message;
|
||||
MediaKeySystemStatus status =
|
||||
MediaKeySystemAccess::GetKeySystemStatus(*aRequest, message);
|
||||
--
|
||||
2.47.3
|
||||
|
||||
@@ -1,25 +0,0 @@
|
||||
From 8533ae5958adc2514498427967a2bcd97fa1506a Mon Sep 17 00:00:00 2001
|
||||
From: LibreWolf Developers <noreply@librewolf.net>
|
||||
Date: Sun, 6 Sep 2026 10:09:51 +0100
|
||||
Subject: [PATCH 12/52] extensions-setUninstallURL.patch
|
||||
|
||||
---
|
||||
toolkit/components/extensions/parent/ext-runtime.js | 2 +-
|
||||
1 file changed, 1 insertion(+), 1 deletion(-)
|
||||
|
||||
diff --git a/toolkit/components/extensions/parent/ext-runtime.js b/toolkit/components/extensions/parent/ext-runtime.js
|
||||
index abc30a2e1319..22f03e99a871 100644
|
||||
--- a/toolkit/components/extensions/parent/ext-runtime.js
|
||||
+++ b/toolkit/components/extensions/parent/ext-runtime.js
|
||||
@@ -354,7 +354,7 @@ this.runtime = class extends ExtensionAPIPersistent {
|
||||
},
|
||||
|
||||
setUninstallURL: function (url) {
|
||||
- if (url === null || url.length === 0) {
|
||||
+ if (true) {
|
||||
extension.uninstallURL = null;
|
||||
return Promise.resolve();
|
||||
}
|
||||
--
|
||||
2.47.3
|
||||
|
||||
@@ -1,25 +0,0 @@
|
||||
From 1279461064c89e354b68951077e4a893d9cb3ebf Mon Sep 17 00:00:00 2001
|
||||
From: LibreWolf Developers <noreply@librewolf.net>
|
||||
Date: Sun, 6 Sep 2026 10:09:54 +0100
|
||||
Subject: [PATCH 13/52] firefox-in-ua.patch
|
||||
|
||||
---
|
||||
toolkit/moz.configure | 2 +-
|
||||
1 file changed, 1 insertion(+), 1 deletion(-)
|
||||
|
||||
diff --git a/toolkit/moz.configure b/toolkit/moz.configure
|
||||
index e313d971ec33..a20a82fa6d06 100644
|
||||
--- a/toolkit/moz.configure
|
||||
+++ b/toolkit/moz.configure
|
||||
@@ -26,7 +26,7 @@ project_flag(
|
||||
|
||||
project_flag(
|
||||
env="MOZ_APP_UA_NAME",
|
||||
- default="",
|
||||
+ default="Firefox",
|
||||
nargs=1,
|
||||
help="Application name in the User Agent string",
|
||||
)
|
||||
--
|
||||
2.47.3
|
||||
|
||||
@@ -1,105 +0,0 @@
|
||||
From 09f40f3935428b5046ea866e09dfbf739684ce6f Mon Sep 17 00:00:00 2001
|
||||
From: LibreWolf Developers <noreply@librewolf.net>
|
||||
Date: Sun, 6 Sep 2026 10:09:59 +0100
|
||||
Subject: [PATCH 14/52] fpp-canvas-fix.patch
|
||||
|
||||
---
|
||||
dom/canvas/CanvasRenderingContext2D.cpp | 11 ++++++++---
|
||||
dom/canvas/ClientWebGLContext.cpp | 10 +++++++---
|
||||
.../components/resistfingerprinting/nsRFPService.cpp | 2 ++
|
||||
3 files changed, 17 insertions(+), 6 deletions(-)
|
||||
|
||||
diff --git a/dom/canvas/CanvasRenderingContext2D.cpp b/dom/canvas/CanvasRenderingContext2D.cpp
|
||||
index 596eb44f3992..2018528600f7 100644
|
||||
--- a/dom/canvas/CanvasRenderingContext2D.cpp
|
||||
+++ b/dom/canvas/CanvasRenderingContext2D.cpp
|
||||
@@ -2288,7 +2288,9 @@ UniquePtr<uint8_t[]> CanvasRenderingContext2D::GetImageBuffer(
|
||||
PrincipalOrNull(), ret.get(), out_imageSize->width,
|
||||
out_imageSize->height,
|
||||
out_imageSize->width * out_imageSize->height * 4);
|
||||
- if (aExtractionBehavior == CanvasUtils::ImageExtraction::Randomize) {
|
||||
+ if (aExtractionBehavior == CanvasUtils::ImageExtraction::Randomize ||
|
||||
+ aExtractionBehavior ==
|
||||
+ CanvasUtils::ImageExtraction::EfficientRandomize) {
|
||||
nsRFPService::RandomizePixels(
|
||||
GetCookieJarSettings(), PrincipalOrNull(), ret.get(),
|
||||
out_imageSize->width, out_imageSize->height,
|
||||
@@ -6682,7 +6684,8 @@ nsresult CanvasRenderingContext2D::GetImageDataArray(
|
||||
//
|
||||
// Note that we don't need to clone if we will use the place holder because
|
||||
// the place holder doesn't use actual image data.
|
||||
- if (extractionBehavior == CanvasUtils::ImageExtraction::Randomize) {
|
||||
+ if (extractionBehavior == CanvasUtils::ImageExtraction::Randomize ||
|
||||
+ extractionBehavior == CanvasUtils::ImageExtraction::EfficientRandomize) {
|
||||
if (readback) {
|
||||
readback = CreateDataSourceSurfaceByCloning(readback);
|
||||
}
|
||||
@@ -6704,7 +6707,9 @@ nsresult CanvasRenderingContext2D::GetImageDataArray(
|
||||
// service) after we call JS_GetUint8ClampedArrayData, we will
|
||||
// pre-generate the randomness required for GeneratePlaceholderCanvasData.
|
||||
randomData = TryToGenerateRandomDataForPlaceholderCanvasData();
|
||||
- } else if (extractionBehavior == CanvasUtils::ImageExtraction::Randomize) {
|
||||
+ } else if (extractionBehavior == CanvasUtils::ImageExtraction::Randomize ||
|
||||
+ extractionBehavior ==
|
||||
+ CanvasUtils::ImageExtraction::EfficientRandomize) {
|
||||
// Apply the random noises if canvan randomization is enabled. We don't
|
||||
// need to calculate random noises if we are going to use the place
|
||||
// holder.
|
||||
diff --git a/dom/canvas/ClientWebGLContext.cpp b/dom/canvas/ClientWebGLContext.cpp
|
||||
index f56f1107070e..afed0c39f23a 100644
|
||||
--- a/dom/canvas/ClientWebGLContext.cpp
|
||||
+++ b/dom/canvas/ClientWebGLContext.cpp
|
||||
@@ -1367,7 +1367,8 @@ UniquePtr<uint8_t[]> ClientWebGLContext::GetImageBuffer(
|
||||
*out_imageSize = dataSurface->GetSize();
|
||||
|
||||
nsRFPService::PotentiallyDumpImage(PrincipalOrNull(), dataSurface);
|
||||
- if (aExtractionBehavior == CanvasUtils::ImageExtraction::Randomize) {
|
||||
+ if (aExtractionBehavior == CanvasUtils::ImageExtraction::Randomize ||
|
||||
+ aExtractionBehavior == CanvasUtils::ImageExtraction::EfficientRandomize) {
|
||||
return gfxUtils::GetImageBufferWithRandomNoise(
|
||||
dataSurface, premultAlpha, GetCookieJarSettings(), PrincipalOrNull(),
|
||||
out_format);
|
||||
@@ -3680,7 +3681,9 @@ void ClientWebGLContext::GetBufferSubData(GLenum target, GLintptr srcByteOffset,
|
||||
if (extraction == CanvasUtils::ImageExtraction::Placeholder) {
|
||||
dom::GeneratePlaceholderCanvasData(destView->size_bytes(),
|
||||
destView->Elements());
|
||||
- } else if (extraction == CanvasUtils::ImageExtraction::Randomize) {
|
||||
+ } else if (extraction == CanvasUtils::ImageExtraction::Randomize ||
|
||||
+ extraction ==
|
||||
+ CanvasUtils::ImageExtraction::EfficientRandomize) {
|
||||
// We have no idea what's in the buffer. So, we randomize it as if each
|
||||
// elemSize bytes is a single element.
|
||||
uint8_t elementsPerGroup = 1,
|
||||
@@ -5455,7 +5458,8 @@ void ClientWebGLContext::ReadPixels(GLint x, GLint y, GLsizei width,
|
||||
} else {
|
||||
RecordCanvasUsage(CanvasExtractionAPI::ReadPixels,
|
||||
CSSIntSize(width, height));
|
||||
- if (extraction == CanvasUtils::ImageExtraction::Randomize) {
|
||||
+ if (extraction == CanvasUtils::ImageExtraction::Randomize ||
|
||||
+ extraction == CanvasUtils::ImageExtraction::EfficientRandomize) {
|
||||
const auto pii = webgl::PackingInfoInfo::For(desc.pi);
|
||||
// DoReadPixels() requres pii to be Some().
|
||||
MOZ_ASSERT(pii.isSome());
|
||||
diff --git a/toolkit/components/resistfingerprinting/nsRFPService.cpp b/toolkit/components/resistfingerprinting/nsRFPService.cpp
|
||||
index ea47718beff8..ccc9f21c9bf2 100644
|
||||
--- a/toolkit/components/resistfingerprinting/nsRFPService.cpp
|
||||
+++ b/toolkit/components/resistfingerprinting/nsRFPService.cpp
|
||||
@@ -1890,6 +1890,7 @@ nsresult nsRFPService::RandomizeElements(
|
||||
return NS_OK;
|
||||
}
|
||||
|
||||
+ /*
|
||||
// Don't randomize if all groups are uniform.
|
||||
const bool allGroupsMatch = [&]() {
|
||||
auto itr = RangedPtr<const uint8_t>(aData, aSizeInBytes);
|
||||
@@ -1904,6 +1905,7 @@ nsresult nsRFPService::RandomizeElements(
|
||||
if (allGroupsMatch) {
|
||||
return NS_OK;
|
||||
}
|
||||
+ */
|
||||
|
||||
auto timerId =
|
||||
glean::fingerprinting_protection::canvas_noise_calculate_time_2.Start();
|
||||
--
|
||||
2.47.3
|
||||
|
||||
@@ -1,179 +0,0 @@
|
||||
From 61b38ed69d7f2660775f702da1df6a1b9dd84a2a Mon Sep 17 00:00:00 2001
|
||||
From: LibreWolf Developers <noreply@librewolf.net>
|
||||
Date: Sun, 6 Sep 2026 10:10:05 +0100
|
||||
Subject: [PATCH 15/52] fullpage-translations-customization.patch
|
||||
|
||||
---
|
||||
browser/base/content/main-popupset.inc.xhtml | 2 +
|
||||
browser/base/content/main-popupset.js | 3 ++
|
||||
.../preferences/config/languages.mjs | 1 +
|
||||
browser/components/preferences/main.inc.xhtml | 11 ++++-
|
||||
browser/components/preferences/main.js | 43 ++++++++++---------
|
||||
.../content/fullPageTranslationsPanel.js | 9 ++++
|
||||
6 files changed, 47 insertions(+), 22 deletions(-)
|
||||
|
||||
diff --git a/browser/base/content/main-popupset.inc.xhtml b/browser/base/content/main-popupset.inc.xhtml
|
||||
index 47603929dbad..459b7b426c4b 100644
|
||||
--- a/browser/base/content/main-popupset.inc.xhtml
|
||||
+++ b/browser/base/content/main-popupset.inc.xhtml
|
||||
@@ -1005,6 +1005,8 @@
|
||||
type="checkbox"
|
||||
autocheck="false"
|
||||
id="translations-panel-settings-never-translate-site"/>
|
||||
+ <menuitem data-l10n-id="translations-panel-disable-translations"
|
||||
+ id="translations-panel-disable-translations"/>
|
||||
<menuseparator/>
|
||||
<menuitem class="manage-languages-menuitem"
|
||||
data-l10n-id="translations-panel-settings-manage-languages"
|
||||
diff --git a/browser/base/content/main-popupset.js b/browser/base/content/main-popupset.js
|
||||
index 1286fba14b0c..47cfc8b16858 100644
|
||||
--- a/browser/base/content/main-popupset.js
|
||||
+++ b/browser/base/content/main-popupset.js
|
||||
@@ -438,6 +438,9 @@ document.addEventListener(
|
||||
case "translations-panel-settings-never-translate-site":
|
||||
FullPageTranslationsPanel.onNeverTranslateSite();
|
||||
break;
|
||||
+ case "translations-panel-disable-translations":
|
||||
+ FullPageTranslationsPanel.openDisableTranslations();
|
||||
+ break;
|
||||
case "translations-panel-manage-languages":
|
||||
FullPageTranslationsPanel.openManageLanguages();
|
||||
break;
|
||||
diff --git a/browser/components/preferences/config/languages.mjs b/browser/components/preferences/config/languages.mjs
|
||||
index 7dd8ff65d59e..7123cb0f4639 100644
|
||||
--- a/browser/components/preferences/config/languages.mjs
|
||||
+++ b/browser/components/preferences/config/languages.mjs
|
||||
@@ -20,6 +20,7 @@ Preferences.addAll([
|
||||
{ id: "privacy.spoof_english", type: "int" },
|
||||
{ id: "layout.spellcheckDefault", type: "int" },
|
||||
{ id: "browser.translations.automaticallyPopup", type: "bool" },
|
||||
+ { id: "browser.translations.enable", type: "bool" },
|
||||
]);
|
||||
|
||||
/**
|
||||
diff --git a/browser/components/preferences/main.inc.xhtml b/browser/components/preferences/main.inc.xhtml
|
||||
index f6badc31b612..9ea6086f8b88 100644
|
||||
--- a/browser/components/preferences/main.inc.xhtml
|
||||
+++ b/browser/components/preferences/main.inc.xhtml
|
||||
@@ -106,8 +106,16 @@
|
||||
|
||||
<!-- This Translations UI is the pre-settings-redesign UI and should be removed
|
||||
when getting ready for the settings redesign to fully ship. -->
|
||||
- <vbox id="translationsGroup" data-srd-groupid="translations" hidden="true" data-subcategory="translations">
|
||||
+ <vbox id="translationsGroup" data-srd-groupid="translations" data-subcategory="translations">
|
||||
<label><html:h2 data-l10n-id="translations-manage-header"/></label>
|
||||
+ <checkbox id="translations-manage-enable"
|
||||
+ data-l10n-id="translations-manage-enable"
|
||||
+ preference="browser.translations.enable"
|
||||
+ data-subcategory="translations-enable" />
|
||||
+ <vbox id="innerTranslationsGroup" hidden="true">
|
||||
+ <checkbox id="translations-manage-autopopup"
|
||||
+ data-l10n-id="translations-manage-autopopup"
|
||||
+ preference="browser.translations.automaticallyPopup" />
|
||||
<hbox id="translations-manage-description" align="center">
|
||||
<description flex="1" data-l10n-id="translations-manage-intro-2"/>
|
||||
<button id="translations-manage-settings-button"
|
||||
@@ -128,6 +136,7 @@
|
||||
</html:div>
|
||||
<description id="translations-manage-error" hidden="true"></description>
|
||||
</vbox>
|
||||
+ </vbox>
|
||||
</vbox>
|
||||
</groupbox>
|
||||
|
||||
diff --git a/browser/components/preferences/main.js b/browser/components/preferences/main.js
|
||||
index 5a56d348146c..d75d3c81cfa5 100644
|
||||
--- a/browser/components/preferences/main.js
|
||||
+++ b/browser/components/preferences/main.js
|
||||
@@ -713,6 +713,10 @@ var gMainPane = {
|
||||
window.addEventListener("unload", this);
|
||||
|
||||
// Notify observers that the UI is now ready
|
||||
+ Preferences.addSyncFromPrefListener(
|
||||
+ document.getElementById("translations-manage-enable"),
|
||||
+ () => this.readEnableTranslations()
|
||||
+ );
|
||||
Services.obs.notifyObservers(window, "main-pane-loaded");
|
||||
this.setInitialized();
|
||||
},
|
||||
@@ -813,39 +817,36 @@ var gMainPane = {
|
||||
button.disabled = !preference.value;
|
||||
return undefined;
|
||||
},
|
||||
+
|
||||
+ readEnableTranslations(skipInit = false) {
|
||||
+ const translationsEnabled = Preferences.get("browser.translations.enable").value;
|
||||
+ document.getElementById("innerTranslationsGroup").hidden = !translationsEnabled;
|
||||
+ if (!this._translationsInitialized && !skipInit)
|
||||
+ this.initTranslations();
|
||||
+ },
|
||||
+
|
||||
+ _translationsInitialized: false,
|
||||
+
|
||||
|
||||
/**
|
||||
* Initialize the translations view.
|
||||
*/
|
||||
async initTranslations() {
|
||||
- let legacyTranslationsVisible = Preferences.getSetting(
|
||||
- "legacyTranslationsVisible"
|
||||
- );
|
||||
+ this.readEnableTranslations(true);
|
||||
+
|
||||
+ if (!Services.prefs.getBoolPref("browser.translations.enable")) {
|
||||
+ return;
|
||||
+ }
|
||||
+
|
||||
+ this._translationsInitialized = true;
|
||||
+
|
||||
/**
|
||||
* Which phase a language download is in.
|
||||
*
|
||||
* @typedef {"downloaded" | "loading" | "uninstalled"} DownloadPhase
|
||||
*/
|
||||
|
||||
- let translationsGroup = document.getElementById("translationsGroup");
|
||||
- let setTranslationsGroupVisbility = () => {
|
||||
- // Immediately show the group so that the async load of the component does
|
||||
- // not cause the layout to jump. The group will be empty initially.
|
||||
- translationsGroup.hidden = !legacyTranslationsVisible.visible;
|
||||
- translationsGroup.classList.toggle(
|
||||
- "setting-hidden",
|
||||
- translationsGroup.hidden
|
||||
- );
|
||||
- };
|
||||
- setTranslationsGroupVisbility();
|
||||
|
||||
- legacyTranslationsVisible.on("change", setTranslationsGroupVisbility);
|
||||
- window.addEventListener(
|
||||
- "unload",
|
||||
- () =>
|
||||
- legacyTranslationsVisible.off("change", setTranslationsGroupVisbility),
|
||||
- { once: true }
|
||||
- );
|
||||
|
||||
class TranslationsState {
|
||||
/**
|
||||
diff --git a/browser/components/translations/content/fullPageTranslationsPanel.js b/browser/components/translations/content/fullPageTranslationsPanel.js
|
||||
index 91666d6e513c..f65017583ef1 100644
|
||||
--- a/browser/components/translations/content/fullPageTranslationsPanel.js
|
||||
+++ b/browser/components/translations/content/fullPageTranslationsPanel.js
|
||||
@@ -1342,6 +1342,15 @@ var FullPageTranslationsPanel = new (class {
|
||||
);
|
||||
}
|
||||
|
||||
+ openDisableTranslations() {
|
||||
+ const window =
|
||||
+ gBrowser.selectedBrowser.browsingContext.top.embedderElement.ownerGlobal;
|
||||
+ window.openTrustedLinkIn(
|
||||
+ "about:preferences#general-translations-enable",
|
||||
+ "tab"
|
||||
+ );
|
||||
+ }
|
||||
+
|
||||
/**
|
||||
* Redirect the user to about:preferences
|
||||
*/
|
||||
--
|
||||
2.47.3
|
||||
|
||||
@@ -1,24 +0,0 @@
|
||||
From 28d1d9f1d35be687c7caf9cf59d72fb2870a7639 Mon Sep 17 00:00:00 2001
|
||||
From: LibreWolf Developers <noreply@librewolf.net>
|
||||
Date: Sun, 6 Sep 2026 10:10:09 +0100
|
||||
Subject: [PATCH 16/52] languages.patch
|
||||
|
||||
---
|
||||
browser/locales/shipped-locales | 1 +
|
||||
1 file changed, 1 insertion(+)
|
||||
|
||||
diff --git a/browser/locales/shipped-locales b/browser/locales/shipped-locales
|
||||
index 41ee3f73d91c..7f501f4c7391 100644
|
||||
--- a/browser/locales/shipped-locales
|
||||
+++ b/browser/locales/shipped-locales
|
||||
@@ -57,6 +57,7 @@ kk
|
||||
km
|
||||
kn
|
||||
ko
|
||||
+ku
|
||||
lij
|
||||
lt
|
||||
lv
|
||||
--
|
||||
2.47.3
|
||||
|
||||
@@ -1,65 +0,0 @@
|
||||
From 26cad7aba0e8913d91fb1ea94d063295635e26d1 Mon Sep 17 00:00:00 2001
|
||||
From: LibreWolf Developers <noreply@librewolf.net>
|
||||
Date: Sun, 6 Sep 2026 10:10:12 +0100
|
||||
Subject: [PATCH 17/52] limit-access.patch
|
||||
|
||||
---
|
||||
caps/nsScriptSecurityManager.cpp | 42 ++++++++++++++++++++++++++++++++
|
||||
1 file changed, 42 insertions(+)
|
||||
|
||||
diff --git a/caps/nsScriptSecurityManager.cpp b/caps/nsScriptSecurityManager.cpp
|
||||
index aaca13e98a07..5a320f3279af 100644
|
||||
--- a/caps/nsScriptSecurityManager.cpp
|
||||
+++ b/caps/nsScriptSecurityManager.cpp
|
||||
@@ -1031,6 +1031,48 @@ nsresult nsScriptSecurityManager::CheckLoadURIFlags(
|
||||
}
|
||||
}
|
||||
|
||||
+ // Only allow some "about:" pages to have access to contentaccessible
|
||||
+ // "chrome://branding/" assets. Otherwise web pages could easily and
|
||||
+ // consistently detect the differences between channels when their
|
||||
+ // branding differs. See tor-browser#43308 and tor-browser#42319.
|
||||
+ // NOTE: The same assets under the alternative URI
|
||||
+ // "resource:///chrome/browser/content/branding/" should already be
|
||||
+ // inaccessible to web content, so we only add a condition for the chrome
|
||||
+ // path.
|
||||
+ if (targetScheme.EqualsLiteral("chrome")) {
|
||||
+ nsAutoCString targetHost;
|
||||
+ rv = aTargetBaseURI->GetHost(targetHost);
|
||||
+ NS_ENSURE_SUCCESS(rv, rv);
|
||||
+ if (targetHost.EqualsLiteral("branding")) {
|
||||
+ // Disallow any Principal whose scheme is not "about", or is a
|
||||
+ // contentaccessible "about" URI ("about:blank" or "about:srcdoc").
|
||||
+ // NOTE: "about:blank" and "about:srcdoc" would be unexpected here
|
||||
+ // since such a document spawned by a web document should inherit the
|
||||
+ // same Principal URI. I.e. they would be "http:" or "https:" schemes.
|
||||
+ // But we add this condition for extra assurances.
|
||||
+ // NOTE: Documents with null Principals, like "about:blank" typed by
|
||||
+ // the user, would also be excluded since the Principal URI would be
|
||||
+ // "moz-nullprincipal:".
|
||||
+ if (!aSourceBaseURI->SchemeIs("about") ||
|
||||
+ NS_IsContentAccessibleAboutURI(aSourceBaseURI)) {
|
||||
+ return NS_ERROR_DOM_BAD_URI;
|
||||
+ }
|
||||
+ // Also exclude "about:reader" from accessing branding assets. I.e. if
|
||||
+ // a web page includes `<img src="chrome://branding/..." />` we do not
|
||||
+ // want it to render within "about:reader" either.
|
||||
+ // Though it is unknown whether the information within "about:reader"
|
||||
+ // would be exploitable by a web page, we also want to exclude
|
||||
+ // "about:reader" for consistency: if it does not display in the
|
||||
+ // original web page, it should not display in "about:reader" either.
|
||||
+ nsAutoCString sourcePath;
|
||||
+ rv = aSourceBaseURI->GetFilePath(sourcePath);
|
||||
+ NS_ENSURE_SUCCESS(rv, rv);
|
||||
+ if (sourcePath.EqualsLiteral("reader")) {
|
||||
+ return NS_ERROR_DOM_BAD_URI;
|
||||
+ }
|
||||
+ }
|
||||
+ }
|
||||
+
|
||||
if (targetScheme.EqualsLiteral("resource")) {
|
||||
if (StaticPrefs::security_all_resource_uri_content_accessible()) {
|
||||
return NS_OK;
|
||||
--
|
||||
2.47.3
|
||||
|
||||
@@ -1,45 +0,0 @@
|
||||
From 9410b040ecde531f6c10992f1f64af126b510ed5 Mon Sep 17 00:00:00 2001
|
||||
From: LibreWolf Developers <noreply@librewolf.net>
|
||||
Date: Sun, 6 Sep 2026 10:10:16 +0100
|
||||
Subject: [PATCH 18/52] link-preview.patch
|
||||
|
||||
---
|
||||
.../preferences/config/tabs-browsing.mjs | 14 ++++++--------
|
||||
1 file changed, 6 insertions(+), 8 deletions(-)
|
||||
|
||||
diff --git a/browser/components/preferences/config/tabs-browsing.mjs b/browser/components/preferences/config/tabs-browsing.mjs
|
||||
index 50fb55329067..7d4b5bec8b53 100644
|
||||
--- a/browser/components/preferences/config/tabs-browsing.mjs
|
||||
+++ b/browser/components/preferences/config/tabs-browsing.mjs
|
||||
@@ -440,22 +440,20 @@ Preferences.addSetting({
|
||||
Preferences.addSetting({
|
||||
id: "linkPreviewEnabled",
|
||||
pref: "browser.ml.linkPreview.enabled",
|
||||
+});
|
||||
+Preferences.addSetting({
|
||||
+ id: "linkPreviewKeyPoints",
|
||||
+ pref: "browser.ml.linkPreview.optin",
|
||||
deps: ["aiControlDefault", "aiControlLinkPreviews"],
|
||||
visible: ({ aiControlDefault, aiControlLinkPreviews }) => {
|
||||
return (
|
||||
window.canShowAiFeature(aiControlLinkPreviews, aiControlDefault) &&
|
||||
+ // LinkPreview.canShowKeyPoints depends on the global genai pref.
|
||||
// @ts-ignore bug 1996860
|
||||
- lazy.LinkPreview.canShowPreferences
|
||||
+ lazy.LinkPreview.canShowKeyPoints
|
||||
);
|
||||
},
|
||||
});
|
||||
-Preferences.addSetting({
|
||||
- id: "linkPreviewKeyPoints",
|
||||
- pref: "browser.ml.linkPreview.optin",
|
||||
- // LinkPreview.canShowKeyPoints depends on the global genai pref.
|
||||
- // @ts-ignore bug 1996860
|
||||
- visible: () => lazy.LinkPreview.canShowKeyPoints,
|
||||
-});
|
||||
Preferences.addSetting({
|
||||
id: "linkPreviewLongPress",
|
||||
pref: "browser.ml.linkPreview.longPress",
|
||||
--
|
||||
2.47.3
|
||||
|
||||
@@ -1,277 +0,0 @@
|
||||
From 62fca4b579e3ad49fa5b8ad09b04d9bec7640261 Mon Sep 17 00:00:00 2001
|
||||
From: LibreWolf Developers <noreply@librewolf.net>
|
||||
Date: Sun, 6 Sep 2026 10:10:22 +0100
|
||||
Subject: [PATCH 19/52] lw-permissions.patch
|
||||
|
||||
---
|
||||
.../base/content/navigator-toolbox.inc.xhtml | 6 ++
|
||||
.../preferences/config/permissions-data.mjs | 82 +++++++++++++++++++
|
||||
.../preferences/dialogs/sitePermissions.js | 14 ++++
|
||||
browser/modules/SitePermissions.sys.mjs | 51 ++++++++++++
|
||||
browser/modules/moz.build | 2 +
|
||||
browser/themes/shared/preferences/privacy.css | 8 ++
|
||||
6 files changed, 163 insertions(+)
|
||||
|
||||
diff --git a/browser/base/content/navigator-toolbox.inc.xhtml b/browser/base/content/navigator-toolbox.inc.xhtml
|
||||
index da5ce8e0cfc5..f23d366e0b56 100644
|
||||
--- a/browser/base/content/navigator-toolbox.inc.xhtml
|
||||
+++ b/browser/base/content/navigator-toolbox.inc.xhtml
|
||||
@@ -283,6 +283,10 @@
|
||||
data-l10n-id="urlbar-autoplay-media-blocked"/>
|
||||
<image data-permission-id="canvas" class="blocked-permission-icon canvas-icon" role="button"
|
||||
data-l10n-id="urlbar-canvas-blocked"/>
|
||||
+ <image data-permission-id="media-key-system-access" class="blocked-permission-icon drm-icon" role="button"
|
||||
+ data-l10n-id="urlbar-eme-blocked"/>
|
||||
+ <image data-permission-id="webgl" class="blocked-permission-icon webgl-icon" role="button"
|
||||
+ data-l10n-id="urlbar-webgl-blocked"/>
|
||||
<image data-permission-id="midi" class="blocked-permission-icon midi-icon" role="button"
|
||||
data-l10n-id="urlbar-midi-blocked"/>
|
||||
<image data-permission-id="serial" class="blocked-permission-icon serial-icon" role="button"
|
||||
@@ -314,6 +318,8 @@
|
||||
data-l10n-id="urlbar-addons-notification-anchor"/>
|
||||
<image id="canvas-notification-icon" class="notification-anchor-icon" role="button"
|
||||
data-l10n-id="urlbar-canvas-notification-anchor"/>
|
||||
+ <image id="webgl-notification-icon" class="notification-anchor-icon" role="button"
|
||||
+ data-l10n-id="urlbar-webgl-notification-anchor"/>
|
||||
<image id="indexedDB-notification-icon" class="notification-anchor-icon indexedDB-icon" role="button"
|
||||
data-l10n-id="urlbar-indexed-db-notification-anchor"/>
|
||||
<image id="password-notification-icon" class="notification-anchor-icon" role="button"
|
||||
diff --git a/browser/components/preferences/config/permissions-data.mjs b/browser/components/preferences/config/permissions-data.mjs
|
||||
index 021036868962..e9f9ae828c2c 100644
|
||||
--- a/browser/components/preferences/config/permissions-data.mjs
|
||||
+++ b/browser/components/preferences/config/permissions-data.mjs
|
||||
@@ -63,6 +63,11 @@ Preferences.addAll([
|
||||
{ id: PREF_ADDON_RECOMMENDATIONS_ENABLED, type: "bool" },
|
||||
{ id: PREF_UPLOAD_ENABLED, type: "bool" },
|
||||
{ id: "datareporting.usage.uploadEnabled", type: "bool" },
|
||||
+
|
||||
+ { id: "browser.eme.ui.enabled", type: "bool" },
|
||||
+ { id: "librewolf.webgl.prompt", type: "bool" },
|
||||
+ { id: "media.eme.require-app-approval", type: "bool" },
|
||||
+ { id: "webgl.disabled", type: "bool" },
|
||||
]);
|
||||
|
||||
/**
|
||||
@@ -498,6 +503,53 @@ Preferences.addSetting(
|
||||
})
|
||||
);
|
||||
|
||||
+Preferences.addSetting({
|
||||
+ id: "emeEnabled",
|
||||
+ pref: "media.eme.enabled",
|
||||
+});
|
||||
+Preferences.addSetting({
|
||||
+ id: "emePermissionPromptEnabled",
|
||||
+ pref: "media.eme.require-app-approval",
|
||||
+});
|
||||
+Preferences.addSetting({
|
||||
+ id: "emeUIEnabled",
|
||||
+ pref: "browser.eme.ui.enabled",
|
||||
+});
|
||||
+Preferences.addSetting({
|
||||
+ id: "emeSettingsButton",
|
||||
+ onUserClick: () => showPermissionExceptions({ permissionType: "media-key-system-access" }),
|
||||
+ deps: ["emeEnabled", "emePermissionPromptEnabled", "emeUIEnabled"],
|
||||
+ visible: deps => {
|
||||
+ return deps.emeEnabled.value && deps.emePermissionPromptEnabled.value && deps.emeUIEnabled.value;
|
||||
+ },
|
||||
+});
|
||||
+
|
||||
+Preferences.addSetting({
|
||||
+ id: "webglPermissionPromptEnabled",
|
||||
+ pref: "librewolf.webgl.prompt",
|
||||
+});
|
||||
+Preferences.addSetting({
|
||||
+ id: "webglDisabled",
|
||||
+ pref: "webgl.disabled",
|
||||
+});
|
||||
+Preferences.addSetting({
|
||||
+ id: "webglSettingsButton",
|
||||
+ onUserClick: () => showPermissionExceptions({ permissionType: "webgl" }),
|
||||
+ deps: ["webglPermissionPromptEnabled", "webglDisabled"],
|
||||
+ visible: deps => {
|
||||
+ return deps.webglPermissionPromptEnabled.value && !deps.webglDisabled.value;
|
||||
+ },
|
||||
+});
|
||||
+
|
||||
+Preferences.addSetting({
|
||||
+ id: "canvasSettingsButton",
|
||||
+ onUserClick: () => showPermissionExceptions({ permissionType: "canvas" }),
|
||||
+ deps: ["resistFingerprinting"],
|
||||
+ visible: deps => {
|
||||
+ return deps.resistFingerprinting.value;
|
||||
+ },
|
||||
+});
|
||||
+
|
||||
SettingGroupManager.registerGroups({
|
||||
permissions: {
|
||||
id: "permissions",
|
||||
@@ -607,6 +659,36 @@ SettingGroupManager.registerGroups({
|
||||
"permissions-remove.label,permissions-remove-all.label,permissions-site-xr-window2.title,permissions-site-xr-desc,permissions-site-xr-disable-label,permissions-site-xr-disable-desc,",
|
||||
},
|
||||
},
|
||||
+ {
|
||||
+ id: "webglSettingsButton",
|
||||
+ control: "moz-box-button",
|
||||
+ l10nId: "permissions-webgl2",
|
||||
+ controlAttrs: {
|
||||
+ ".iconSrc": "chrome://browser/skin/notification-icons/webgl.svg",
|
||||
+ "search-l10n-ids":
|
||||
+ "permissions-remove.label,permissions-remove-all.label,permissions-site-webgl-window2.title,permissions-site-webgl-desc",
|
||||
+ },
|
||||
+ },
|
||||
+ {
|
||||
+ id: "canvasSettingsButton",
|
||||
+ control: "moz-box-button",
|
||||
+ l10nId: "permissions-canvas2",
|
||||
+ controlAttrs: {
|
||||
+ ".iconSrc": "chrome://browser/skin/canvas.svg",
|
||||
+ "search-l10n-ids":
|
||||
+ "permissions-remove.label,permissions-remove-all.label,permissions-site-canvas-window2.title,permissions-site-canvas-desc",
|
||||
+ },
|
||||
+ },
|
||||
+ {
|
||||
+ id: "emeSettingsButton",
|
||||
+ control: "moz-box-button",
|
||||
+ l10nId: "permissions-eme2",
|
||||
+ controlAttrs: {
|
||||
+ ".iconSrc": "chrome://browser/skin/drm-icon.svg",
|
||||
+ "search-l10n-ids":
|
||||
+ "permissions-remove.label,permissions-remove-all.label,permissions-site-eme-window2.title,permissions-site-eme-desc,permissions-site-eme-disable-label,permissions-site-eme-disable-desc",
|
||||
+ },
|
||||
+ },
|
||||
],
|
||||
},
|
||||
{
|
||||
diff --git a/browser/components/preferences/dialogs/sitePermissions.js b/browser/components/preferences/dialogs/sitePermissions.js
|
||||
index 013c0df347bb..633b9f3e4512 100644
|
||||
--- a/browser/components/preferences/dialogs/sitePermissions.js
|
||||
+++ b/browser/components/preferences/dialogs/sitePermissions.js
|
||||
@@ -40,6 +40,20 @@ const sitePermissionsL10n = {
|
||||
disableLabel: "permissions-site-xr-disable-label",
|
||||
disableDescription: "permissions-site-xr-disable-desc",
|
||||
},
|
||||
+ "media-key-system-access": {
|
||||
+ window: "permissions-site-eme-window2",
|
||||
+ description: "permissions-site-eme-desc",
|
||||
+ disableLabel: "permissions-site-eme-disable-label",
|
||||
+ disableDescription: "permissions-site-eme-disable-desc",
|
||||
+ },
|
||||
+ webgl: {
|
||||
+ window: "permissions-site-webgl-window2",
|
||||
+ description: "permissions-site-webgl-desc",
|
||||
+ },
|
||||
+ canvas: {
|
||||
+ window: "permissions-site-canvas-window2",
|
||||
+ description: "permissions-site-canvas-desc",
|
||||
+ },
|
||||
camera: {
|
||||
window: "permissions-site-camera-window2",
|
||||
description: "permissions-site-camera-desc",
|
||||
diff --git a/browser/modules/SitePermissions.sys.mjs b/browser/modules/SitePermissions.sys.mjs
|
||||
index b112014e0d49..9e2a36111674 100644
|
||||
--- a/browser/modules/SitePermissions.sys.mjs
|
||||
+++ b/browser/modules/SitePermissions.sys.mjs
|
||||
@@ -1138,6 +1138,21 @@ let gPermissions = {
|
||||
},
|
||||
},
|
||||
|
||||
+ "media-key-system-access": {
|
||||
+ labelID: "eme",
|
||||
+ exactHostMatch: true,
|
||||
+ get disabled() {
|
||||
+ return !SitePermissions.emeEnabled || !SitePermissions.emePermissionPromptEnabled || !SitePermissions.emeUIEnabled;
|
||||
+ },
|
||||
+ },
|
||||
+
|
||||
+ webgl: {
|
||||
+// exactHostMatch: true,
|
||||
+ get disabled() {
|
||||
+ return !SitePermissions.webglPermissionPromptEnabled || SitePermissions.webglDisabled;
|
||||
+ },
|
||||
+ },
|
||||
+
|
||||
midi: {
|
||||
exactHostMatch: true,
|
||||
get disabled() {
|
||||
@@ -1171,6 +1186,42 @@ let gPermissions = {
|
||||
},
|
||||
};
|
||||
|
||||
+XPCOMUtils.defineLazyPreferenceGetter(
|
||||
+ SitePermissions,
|
||||
+ "emeEnabled",
|
||||
+ "media.eme.enabled",
|
||||
+ false,
|
||||
+ SitePermissions.invalidatePermissionList.bind(SitePermissions)
|
||||
+);
|
||||
+XPCOMUtils.defineLazyPreferenceGetter(
|
||||
+ SitePermissions,
|
||||
+ "emePermissionPromptEnabled",
|
||||
+ "media.eme.require-app-approval",
|
||||
+ true,
|
||||
+ SitePermissions.invalidatePermissionList.bind(SitePermissions)
|
||||
+);
|
||||
+XPCOMUtils.defineLazyPreferenceGetter(
|
||||
+ SitePermissions,
|
||||
+ "emeUIEnabled",
|
||||
+ "browser.eme.ui.enabled",
|
||||
+ true,
|
||||
+ SitePermissions.invalidatePermissionList.bind(SitePermissions)
|
||||
+);
|
||||
+XPCOMUtils.defineLazyPreferenceGetter(
|
||||
+ SitePermissions,
|
||||
+ "webglPermissionPromptEnabled",
|
||||
+ "librewolf.webgl.prompt",
|
||||
+ true,
|
||||
+ SitePermissions.invalidatePermissionList.bind(SitePermissions)
|
||||
+);
|
||||
+XPCOMUtils.defineLazyPreferenceGetter(
|
||||
+ SitePermissions,
|
||||
+ "webglDisabled",
|
||||
+ "webgl.disabled",
|
||||
+ false,
|
||||
+ SitePermissions.invalidatePermissionList.bind(SitePermissions)
|
||||
+);
|
||||
+
|
||||
SitePermissions.midiPermissionEnabled = Services.prefs.getBoolPref(
|
||||
"dom.webmidi.enabled"
|
||||
);
|
||||
diff --git a/browser/modules/moz.build b/browser/modules/moz.build
|
||||
index eebf824044aa..d8dfd195fc73 100644
|
||||
--- a/browser/modules/moz.build
|
||||
+++ b/browser/modules/moz.build
|
||||
@@ -150,9 +150,11 @@ EXTRA_JS_MODULES += [
|
||||
MOZ_SRC_FILES += [
|
||||
"CanvasPermissionPromptHelper.sys.mjs",
|
||||
"ContextId.sys.mjs",
|
||||
+ "EMEPermissionPrompt.sys.mjs",
|
||||
"ObserverForwarder.sys.mjs",
|
||||
"PrivateBrowsingUI.sys.mjs",
|
||||
"SerialDeviceSharingHelper.sys.mjs",
|
||||
+ "WebGLPermissionPromptHelper.sys.mjs",
|
||||
]
|
||||
|
||||
if CONFIG["MOZ_WIDGET_TOOLKIT"] == "windows":
|
||||
diff --git a/browser/themes/shared/preferences/privacy.css b/browser/themes/shared/preferences/privacy.css
|
||||
index 896619be9a33..cbe70bc6455d 100644
|
||||
--- a/browser/themes/shared/preferences/privacy.css
|
||||
+++ b/browser/themes/shared/preferences/privacy.css
|
||||
@@ -37,6 +37,14 @@
|
||||
list-style-image: url(chrome://browser/skin/notification-icons/xr.svg);
|
||||
}
|
||||
|
||||
+.drm-icon {
|
||||
+ list-style-image: url(chrome://browser/skin/drm-icon.svg);
|
||||
+}
|
||||
+
|
||||
+.webgl-icon {
|
||||
+ list-style-image: url(chrome://browser/skin/notification-icons/webgl.svg);
|
||||
+}
|
||||
+
|
||||
.camera-icon {
|
||||
list-style-image: url(chrome://browser/skin/notification-icons/camera.svg);
|
||||
}
|
||||
--
|
||||
2.47.3
|
||||
|
||||
@@ -1,32 +0,0 @@
|
||||
From 1fa7b395367dfa3c3b42b35461fb9c0bba2930e0 Mon Sep 17 00:00:00 2001
|
||||
From: LibreWolf Developers <noreply@librewolf.net>
|
||||
Date: Sun, 6 Sep 2026 10:10:25 +0100
|
||||
Subject: [PATCH 20/52] moz-configure.patch
|
||||
|
||||
---
|
||||
toolkit/moz.configure | 2 ++
|
||||
1 file changed, 2 insertions(+)
|
||||
|
||||
diff --git a/toolkit/moz.configure b/toolkit/moz.configure
|
||||
index a20a82fa6d06..0290e89ec973 100644
|
||||
--- a/toolkit/moz.configure
|
||||
+++ b/toolkit/moz.configure
|
||||
@@ -20,6 +20,7 @@ def check_moz_app_id(moz_app_id, build_project):
|
||||
|
||||
project_flag(
|
||||
env="MOZ_APP_VENDOR",
|
||||
+ default="LibreWolf",
|
||||
nargs=1,
|
||||
help='Used for application.ini\'s "Vendor" field, which also impacts profile location and user-visible fields',
|
||||
)
|
||||
@@ -33,6 +34,7 @@ project_flag(
|
||||
|
||||
project_flag(
|
||||
"MOZ_APP_PROFILE",
|
||||
+ default="librewolf",
|
||||
nargs=1,
|
||||
help='Used for application.ini\'s "Profile" field, which controls profile location',
|
||||
)
|
||||
--
|
||||
2.47.3
|
||||
|
||||
@@ -1,171 +0,0 @@
|
||||
From a7c5a02b1e5515e04e88068d9125b4078b5137a0 Mon Sep 17 00:00:00 2001
|
||||
From: LibreWolf Developers <noreply@librewolf.net>
|
||||
Date: Sun, 6 Sep 2026 10:10:30 +0100
|
||||
Subject: [PATCH 21/52] mozilla_dirs.patch
|
||||
|
||||
---
|
||||
.../extensions/NativeManifests.sys.mjs | 2 +
|
||||
toolkit/xre/nsXREDirProvider.cpp | 54 ++++++++-----------
|
||||
xpcom/build/nsXULAppAPI.h | 2 +
|
||||
3 files changed, 27 insertions(+), 31 deletions(-)
|
||||
|
||||
diff --git a/toolkit/components/extensions/NativeManifests.sys.mjs b/toolkit/components/extensions/NativeManifests.sys.mjs
|
||||
index 48d7d50cdec3..fbf39fba0d3a 100644
|
||||
--- a/toolkit/components/extensions/NativeManifests.sys.mjs
|
||||
+++ b/toolkit/components/extensions/NativeManifests.sys.mjs
|
||||
@@ -37,6 +37,8 @@ export var NativeManifests = {
|
||||
let dirs = [
|
||||
Services.dirsvc.get("XREUserNativeManifests", Ci.nsIFile).path,
|
||||
Services.dirsvc.get("XRESysNativeManifests", Ci.nsIFile).path,
|
||||
+ Services.dirsvc.get("XREMozUserNativeManifests", Ci.nsIFile).path,
|
||||
+ Services.dirsvc.get("XREMozSysNativeManifests", Ci.nsIFile).path,
|
||||
];
|
||||
this._lookup = (type, name, context) =>
|
||||
this._tryPaths(type, name, dirs, context);
|
||||
diff --git a/toolkit/xre/nsXREDirProvider.cpp b/toolkit/xre/nsXREDirProvider.cpp
|
||||
index dcce3335e14f..004c767956f2 100644
|
||||
--- a/toolkit/xre/nsXREDirProvider.cpp
|
||||
+++ b/toolkit/xre/nsXREDirProvider.cpp
|
||||
@@ -332,23 +332,25 @@ nsresult nsXREDirProvider::GetBackgroundTasksProfilesRootDir(
|
||||
* On Linux this is /usr/{lib,lib64}/mozilla
|
||||
* (for 32- and 64-bit systems respsectively)
|
||||
*/
|
||||
-static nsresult GetSystemParentDirectory(nsIFile** aFile) {
|
||||
+static nsresult GetSystemParentDirectory(nsIFile** aFile,
|
||||
+ nsCString aName = "LibreWolf"_ns) {
|
||||
nsresult rv;
|
||||
nsCOMPtr<nsIFile> localDir;
|
||||
# if defined(XP_MACOSX)
|
||||
rv = GetOSXFolderType(kOnSystemDisk, kApplicationSupportFolderType,
|
||||
getter_AddRefs(localDir));
|
||||
if (NS_SUCCEEDED(rv)) {
|
||||
- rv = localDir->AppendNative("Mozilla"_ns);
|
||||
+ rv = localDir->AppendNative(aName);
|
||||
}
|
||||
# else
|
||||
- constexpr auto dirname =
|
||||
+ ToLowerCase(aName);
|
||||
+ nsCString dirname =
|
||||
# ifdef HAVE_USR_LIB64_DIR
|
||||
- "/usr/lib64/mozilla"_ns
|
||||
+ "/usr/lib64/"_ns + aName
|
||||
# elif defined(__OpenBSD__) || defined(__FreeBSD__)
|
||||
- "/usr/local/lib/mozilla"_ns
|
||||
+ "/usr/local/lib/"_ns + aName
|
||||
# else
|
||||
- "/usr/lib/mozilla"_ns
|
||||
+ "/usr/lib/"_ns + aName
|
||||
# endif
|
||||
;
|
||||
rv = NS_NewNativeLocalFile(dirname, getter_AddRefs(localDir));
|
||||
@@ -416,11 +418,21 @@ nsXREDirProvider::GetFile(const char* aProperty, bool* aPersistent,
|
||||
#if defined(XP_UNIX) || defined(XP_MACOSX)
|
||||
else if (!strcmp(aProperty, XRE_SYS_NATIVE_MANIFESTS)) {
|
||||
rv = ::GetSystemParentDirectory(getter_AddRefs(file));
|
||||
+ } else if (!strcmp(aProperty, XRE_MOZ_SYS_NATIVE_MANIFESTS)) {
|
||||
+ rv = ::GetSystemParentDirectory(getter_AddRefs(file), "Mozilla"_ns);
|
||||
} else if (!strcmp(aProperty, XRE_USER_NATIVE_MANIFESTS)) {
|
||||
// Keep forcing the legacy path for compatibility
|
||||
rv = GetUserDataDirectoryHome(getter_AddRefs(file), /* aLocal */ false,
|
||||
/* aForceLegacy */ true);
|
||||
NS_ENSURE_SUCCESS(rv, rv);
|
||||
+# if defined(XP_MACOSX)
|
||||
+ rv = file->AppendNative("LibreWolf"_ns);
|
||||
+# else // defined(XP_MACOSX)
|
||||
+ rv = file->AppendNative(".librewolf"_ns);
|
||||
+# endif // defined(XP_MACOSX)
|
||||
+ } else if (!strcmp(aProperty, XRE_MOZ_USER_NATIVE_MANIFESTS)) {
|
||||
+ rv = GetUserDataDirectoryHome(getter_AddRefs(file), false, true);
|
||||
+ NS_ENSURE_SUCCESS(rv, rv);
|
||||
# if defined(XP_MACOSX)
|
||||
rv = file->AppendNative("Mozilla"_ns);
|
||||
# else // defined(XP_MACOSX)
|
||||
@@ -454,9 +466,9 @@ nsXREDirProvider::GetFile(const char* aProperty, bool* aPersistent,
|
||||
else if (!strcmp(aProperty, XRE_SYS_SHARE_EXTENSION_PARENT_DIR)) {
|
||||
# ifdef ENABLE_SYSTEM_EXTENSION_DIRS
|
||||
# if defined(__OpenBSD__) || defined(__FreeBSD__)
|
||||
- static const char* const sysLExtDir = "/usr/local/share/mozilla/extensions";
|
||||
+ static const char* const sysLExtDir = "/usr/local/share/librewolf/extensions";
|
||||
# else
|
||||
- static const char* const sysLExtDir = "/usr/share/mozilla/extensions";
|
||||
+ static const char* const sysLExtDir = "/usr/share/librewolf/extensions";
|
||||
# endif
|
||||
rv = NS_NewNativeLocalFile(nsDependentCString(sysLExtDir),
|
||||
getter_AddRefs(file));
|
||||
@@ -980,13 +992,7 @@ nsresult nsXREDirProvider::GetUpdateRootDir(nsIFile** aResult,
|
||||
}
|
||||
appDirPath = Substring(appDirPath, 1, dotIndex - 1);
|
||||
|
||||
- bool hasVendor = GetAppVendor() && strlen(GetAppVendor()) != 0;
|
||||
- if (hasVendor || GetAppName()) {
|
||||
- if (NS_FAILED(localDir->AppendNative(
|
||||
- nsDependentCString(hasVendor ? GetAppVendor() : GetAppName())))) {
|
||||
- return NS_ERROR_FAILURE;
|
||||
- }
|
||||
- } else if (NS_FAILED(localDir->AppendNative("Mozilla"_ns))) {
|
||||
+ if (NS_FAILED(localDir->AppendNative("LibreWolf"_ns))) {
|
||||
return NS_ERROR_FAILURE;
|
||||
}
|
||||
|
||||
@@ -1284,7 +1290,7 @@ nsresult nsXREDirProvider::AppendSysUserExtensionPath(nsIFile* aFile) {
|
||||
|
||||
#if defined(XP_MACOSX) || defined(XP_WIN)
|
||||
|
||||
- static const char* const sXR = "Mozilla";
|
||||
+ static const char* const sXR = "LibreWolf";
|
||||
rv = aFile->AppendNative(nsDependentCString(sXR));
|
||||
NS_ENSURE_SUCCESS(rv, rv);
|
||||
|
||||
@@ -1294,7 +1300,7 @@ nsresult nsXREDirProvider::AppendSysUserExtensionPath(nsIFile* aFile) {
|
||||
|
||||
#elif defined(XP_UNIX)
|
||||
|
||||
- static const char* const sXR = ".mozilla";
|
||||
+ static const char* const sXR = ".librewolf";
|
||||
rv = aFile->AppendNative(nsDependentCString(sXR));
|
||||
NS_ENSURE_SUCCESS(rv, rv);
|
||||
|
||||
@@ -1599,10 +1605,6 @@ nsresult nsXREDirProvider::AppendProfilePath(nsIFile* aFile, bool aLocal) {
|
||||
if (!profile.IsEmpty()) {
|
||||
rv = AppendProfileString(aFile, profile.get());
|
||||
} else {
|
||||
- if (!vendor.IsEmpty()) {
|
||||
- rv = aFile->AppendNative(vendor);
|
||||
- NS_ENSURE_SUCCESS(rv, rv);
|
||||
- }
|
||||
rv = aFile->AppendNative(appName);
|
||||
}
|
||||
NS_ENSURE_SUCCESS(rv, rv);
|
||||
@@ -1640,16 +1642,6 @@ nsresult nsXREDirProvider::AppendProfilePath(nsIFile* aFile, bool aLocal) {
|
||||
|
||||
rv = AppendProfileString(aFile, folder.get());
|
||||
} else {
|
||||
- if (!vendor.IsEmpty()) {
|
||||
- folder.Append(vendor);
|
||||
- ToLowerCase(folder);
|
||||
-
|
||||
- rv = aFile->AppendNative(folder);
|
||||
- NS_ENSURE_SUCCESS(rv, rv);
|
||||
-
|
||||
- folder.Truncate();
|
||||
- }
|
||||
-
|
||||
// This can be the case in tests.
|
||||
if (!appName.IsEmpty()) {
|
||||
folder.Append(appName);
|
||||
diff --git a/xpcom/build/nsXULAppAPI.h b/xpcom/build/nsXULAppAPI.h
|
||||
index 8a09115312f2..f8c623b611d4 100644
|
||||
--- a/xpcom/build/nsXULAppAPI.h
|
||||
+++ b/xpcom/build/nsXULAppAPI.h
|
||||
@@ -113,6 +113,8 @@ struct BootstrapConfig;
|
||||
*/
|
||||
# define XRE_SYS_NATIVE_MANIFESTS "XRESysNativeManifests"
|
||||
# define XRE_USER_NATIVE_MANIFESTS "XREUserNativeManifests"
|
||||
+# define XRE_MOZ_SYS_NATIVE_MANIFESTS "XREMozSysNativeManifests"
|
||||
+# define XRE_MOZ_USER_NATIVE_MANIFESTS "XREMozUserNativeManifests"
|
||||
#endif
|
||||
|
||||
/**
|
||||
--
|
||||
2.47.3
|
||||
|
||||
@@ -1,112 +0,0 @@
|
||||
From 301f96eacf384fb2c83b29e75370f198f12dc21c Mon Sep 17 00:00:00 2001
|
||||
From: LibreWolf Developers <noreply@librewolf.net>
|
||||
Date: Sun, 6 Sep 2026 10:10:36 +0100
|
||||
Subject: [PATCH 22/52] moz-official.patch
|
||||
|
||||
---
|
||||
browser/base/content/browser-development-helpers.js | 6 ++++--
|
||||
browser/base/content/browser-main.js | 4 +---
|
||||
browser/base/jar.mn | 2 --
|
||||
browser/components/BrowserComponents.manifest | 2 --
|
||||
dom/media/gmp/ChromiumCDMAdapter.cpp | 4 ++--
|
||||
media/gmp-clearkey/0.1/gmp-clearkey.cpp | 2 +-
|
||||
6 files changed, 8 insertions(+), 12 deletions(-)
|
||||
|
||||
diff --git a/browser/base/content/browser-development-helpers.js b/browser/base/content/browser-development-helpers.js
|
||||
index 5155b280b8ff..8dea266fbde5 100644
|
||||
--- a/browser/base/content/browser-development-helpers.js
|
||||
+++ b/browser/base/content/browser-development-helpers.js
|
||||
@@ -9,8 +9,10 @@
|
||||
|
||||
var DevelopmentHelpers = {
|
||||
init() {
|
||||
- this.quickRestart = this.quickRestart.bind(this);
|
||||
- this.addRestartShortcut();
|
||||
+ if (Services.prefs.getBoolPref("librewolf.devHelpers", false)) {
|
||||
+ this.quickRestart = this.quickRestart.bind(this);
|
||||
+ this.addRestartShortcut();
|
||||
+ }
|
||||
},
|
||||
|
||||
quickRestart() {
|
||||
diff --git a/browser/base/content/browser-main.js b/browser/base/content/browser-main.js
|
||||
index 1ff101aecefc..6b02e5acb177 100644
|
||||
--- a/browser/base/content/browser-main.js
|
||||
+++ b/browser/base/content/browser-main.js
|
||||
@@ -11,9 +11,7 @@
|
||||
if (AppConstants.MOZ_DATA_REPORTING) {
|
||||
Services.scriptloader.loadSubScript("chrome://browser/content/browser-data-submission-info-bar.js", this);
|
||||
}
|
||||
- if (!AppConstants.MOZILLA_OFFICIAL) {
|
||||
- Services.scriptloader.loadSubScript("chrome://browser/content/browser-development-helpers.js", this);
|
||||
- }
|
||||
+ Services.scriptloader.loadSubScript("chrome://browser/content/browser-development-helpers.js", this);
|
||||
Services.scriptloader.loadSubScript("chrome://browser/content/browser-pageActions.js", this);
|
||||
Services.scriptloader.loadSubScript("chrome://browser/content/sidebar/browser-sidebar.js", this);
|
||||
Services.scriptloader.loadSubScript("chrome://browser/content/browser-customtitlebar.js", this);
|
||||
diff --git a/browser/base/jar.mn b/browser/base/jar.mn
|
||||
index 783c67d397a5..b280fc60f01b 100644
|
||||
--- a/browser/base/jar.mn
|
||||
+++ b/browser/base/jar.mn
|
||||
@@ -41,9 +41,7 @@ browser.jar:
|
||||
content/browser/browser-context.js (content/browser-context.js)
|
||||
content/browser/browser-customization.js (content/browser-customization.js)
|
||||
content/browser/browser-data-submission-info-bar.js (content/browser-data-submission-info-bar.js)
|
||||
-#ifndef MOZILLA_OFFICIAL
|
||||
content/browser/browser-development-helpers.js (content/browser-development-helpers.js)
|
||||
-#endif
|
||||
content/browser/browser-fullScreenAndPointerLock.js (content/browser-fullScreenAndPointerLock.js)
|
||||
content/browser/browser-gestureSupport.js (content/browser-gestureSupport.js)
|
||||
content/browser/browser-init.js (content/browser-init.js)
|
||||
diff --git a/browser/components/BrowserComponents.manifest b/browser/components/BrowserComponents.manifest
|
||||
index 5fc75066310e..a184e735ce4b 100644
|
||||
--- a/browser/components/BrowserComponents.manifest
|
||||
+++ b/browser/components/BrowserComponents.manifest
|
||||
@@ -86,9 +86,7 @@ category browser-window-delayed-startup chrome://browser/content/browser-fullScr
|
||||
#ifdef MOZ_DATA_REPORTING
|
||||
category browser-window-delayed-startup chrome://browser/content/browser-data-submission-info-bar.js gDataNotificationInfoBar.init
|
||||
#endif
|
||||
-#ifndef MOZILLA_OFFICIAL
|
||||
category browser-window-delayed-startup chrome://browser/content/browser-development-helpers.js DevelopmentHelpers.init
|
||||
-#endif
|
||||
category browser-window-delayed-startup chrome://browser/content/browser-addons.js gExtensionsNotifications.init
|
||||
category browser-window-delayed-startup chrome://browser/content/browser-captivePortal.js CaptivePortalWatcher.delayedStartup
|
||||
|
||||
diff --git a/dom/media/gmp/ChromiumCDMAdapter.cpp b/dom/media/gmp/ChromiumCDMAdapter.cpp
|
||||
index 3afba39c6a92..0956a87b124f 100644
|
||||
--- a/dom/media/gmp/ChromiumCDMAdapter.cpp
|
||||
+++ b/dom/media/gmp/ChromiumCDMAdapter.cpp
|
||||
@@ -68,7 +68,7 @@ void* ChromiumCdmHostCompat(int aHostInterfaceVersion, void* aUserData) {
|
||||
return aUserData;
|
||||
}
|
||||
|
||||
-#ifdef MOZILLA_OFFICIAL
|
||||
+#if 0
|
||||
static cdm::HostFile TakeToCDMHostFile(HostFileData& aHostFileData) {
|
||||
return cdm::HostFile(aHostFileData.mBinary.Path().get(),
|
||||
aHostFileData.mBinary.TakePlatformFile(),
|
||||
@@ -84,7 +84,7 @@ GMPErr ChromiumCDMAdapter::GMPInit(const GMPPlatformAPI* aPlatformAPI) {
|
||||
return GMPGenericErr;
|
||||
}
|
||||
|
||||
-#ifdef MOZILLA_OFFICIAL
|
||||
+#if 0
|
||||
// Note: we must call the VerifyCdmHost_0 function if it's present before
|
||||
// we call the initialize function.
|
||||
auto verify = reinterpret_cast<decltype(::VerifyCdmHost_0)*>(
|
||||
diff --git a/media/gmp-clearkey/0.1/gmp-clearkey.cpp b/media/gmp-clearkey/0.1/gmp-clearkey.cpp
|
||||
index 95f8b1ff3f41..d30b13721fdc 100644
|
||||
--- a/media/gmp-clearkey/0.1/gmp-clearkey.cpp
|
||||
+++ b/media/gmp-clearkey/0.1/gmp-clearkey.cpp
|
||||
@@ -72,7 +72,7 @@ void* CreateCdmInstance(int cdm_interface_version, const char* key_system,
|
||||
return nullptr;
|
||||
}
|
||||
|
||||
-#ifdef MOZILLA_OFFICIAL
|
||||
+#if 0
|
||||
// Test that we're able to read the host files.
|
||||
if (!sCanReadHostVerificationFiles) {
|
||||
return nullptr;
|
||||
--
|
||||
2.47.3
|
||||
|
||||
@@ -1,201 +0,0 @@
|
||||
From 088c12ddd95935ad1f55c91723dcd34442b4d240 Mon Sep 17 00:00:00 2001
|
||||
From: LibreWolf Developers <noreply@librewolf.net>
|
||||
Date: Sun, 6 Sep 2026 10:10:41 +0100
|
||||
Subject: [PATCH 23/52] msix.patch
|
||||
|
||||
---
|
||||
.../windows/msix/AppxManifest.xml.in | 19 +---
|
||||
python/mozbuild/mozbuild/mach_commands.py | 4 +-
|
||||
python/mozbuild/mozbuild/repackaging/msix.py | 97 +++----------------
|
||||
3 files changed, 16 insertions(+), 104 deletions(-)
|
||||
|
||||
diff --git a/browser/installer/windows/msix/AppxManifest.xml.in b/browser/installer/windows/msix/AppxManifest.xml.in
|
||||
index 246f15595dad..9a953b3d16d2 100644
|
||||
--- a/browser/installer/windows/msix/AppxManifest.xml.in
|
||||
+++ b/browser/installer/windows/msix/AppxManifest.xml.in
|
||||
@@ -30,13 +30,14 @@
|
||||
</Resources>
|
||||
<Dependencies>
|
||||
<TargetDeviceFamily Name="Windows.Desktop" MinVersion="10.0.17763.0" MaxVersionTested="10.0.22621.1555" />
|
||||
+ <PackageDependency Name="Microsoft.VCLibs.140.00.UWPDesktop" MinVersion="14.0.0.0" Publisher="CN=Microsoft Corporation, O=Microsoft Corporation, L=Redmond, S=Washington, C=US" />
|
||||
</Dependencies>
|
||||
<Capabilities>
|
||||
<rescap:Capability Name="runFullTrust" />
|
||||
</Capabilities>
|
||||
<Applications>
|
||||
<Application Id="App" Executable="VFS\ProgramFiles\@APPX_INSTDIR@\@MOZ_APP_NAME@.exe" EntryPoint="Windows.FullTrustApplication">
|
||||
- <uap:VisualElements BackgroundColor="#20123A" DisplayName="@MOZ_APP_DISPLAYNAME@" Square150x150Logo="Assets\Square150x150Logo.png" Square44x44Logo="Assets\Square44x44Logo.png" Description="@MOZ_APP_DISPLAYNAME@">
|
||||
+ <uap:VisualElements BackgroundColor="#FFFFFF" DisplayName="@MOZ_APP_DISPLAYNAME@" Square150x150Logo="Assets\Square150x150Logo.png" Square44x44Logo="Assets\Square44x44Logo.png" Description="@MOZ_APP_DISPLAYNAME@">
|
||||
<uap:DefaultTile Wide310x150Logo="Assets\Wide310x150Logo.png" Square310x310Logo="Assets\LargeTile.png" Square71x71Logo="Assets\SmallTile.png">
|
||||
<uap:ShowNameOnTiles>
|
||||
<uap:ShowOn Tile="square150x150Logo"/>
|
||||
@@ -119,20 +120,4 @@
|
||||
</Extensions>
|
||||
</Application>
|
||||
</Applications>
|
||||
- <Extensions>
|
||||
- <!-- These COM registrations allow Windows/MSAA to access Firefox accessibility features. -->
|
||||
- <com:Extension Category="windows.comInterface">
|
||||
- <com:ComInterface>
|
||||
- <com:ProxyStub DisplayName="AccessibleMarshal"
|
||||
- Id="1814ceeb-49e2-407f-af99-fa755a7d2607"
|
||||
- Path="VFS\ProgramFiles\@APPX_INSTDIR@\AccessibleMarshal.dll" />
|
||||
- <com:Interface Id="4e747be5-2052-4265-8af0-8ecad7aad1c0"
|
||||
- ProxyStubClsid="1814ceeb-49e2-407f-af99-fa755a7d2607" />
|
||||
- <com:Interface Id="1814ceeb-49e2-407f-af99-fa755a7d2607"
|
||||
- ProxyStubClsid="1814ceeb-49e2-407f-af99-fa755a7d2607" />
|
||||
- <com:Interface Id="0d68d6d0-d93d-4d08-a30d-f00dd1f45b24"
|
||||
- ProxyStubClsid="1814ceeb-49e2-407f-af99-fa755a7d2607" />
|
||||
- </com:ComInterface>
|
||||
- </com:Extension>
|
||||
- </Extensions>
|
||||
</Package>
|
||||
diff --git a/python/mozbuild/mozbuild/mach_commands.py b/python/mozbuild/mozbuild/mach_commands.py
|
||||
index c7b0d3d0f9bc..b4a9a14b342c 100644
|
||||
--- a/python/mozbuild/mozbuild/mach_commands.py
|
||||
+++ b/python/mozbuild/mozbuild/mach_commands.py
|
||||
@@ -3257,7 +3257,7 @@ def repackage_msi(
|
||||
@CommandArgument(
|
||||
"--vendor",
|
||||
type=str,
|
||||
- default="Mozilla",
|
||||
+ default=None,
|
||||
required=False,
|
||||
help="The vendor to use in the Package/Identity/Name string to use in the App Manifest."
|
||||
+ " Defaults to 'Mozilla'.",
|
||||
@@ -3415,7 +3415,7 @@ def repackage_msix(
|
||||
command_context.topsrcdir,
|
||||
channel=channel,
|
||||
arch=arch,
|
||||
- displayname=identity_name,
|
||||
+ identity=identity_name,
|
||||
vendor=vendor,
|
||||
publisher=publisher,
|
||||
publisher_display_name=publisher_display_name,
|
||||
diff --git a/python/mozbuild/mozbuild/repackaging/msix.py b/python/mozbuild/mozbuild/repackaging/msix.py
|
||||
index 693b080c7ca5..77bf7153effb 100644
|
||||
--- a/python/mozbuild/mozbuild/repackaging/msix.py
|
||||
+++ b/python/mozbuild/mozbuild/repackaging/msix.py
|
||||
@@ -106,68 +106,19 @@ def get_embedded_version(version, buildid):
|
||||
the dotted quad to be identically 0, so we enforce that here.
|
||||
"""
|
||||
|
||||
- # It's irritating to roll our own version parsing, but the tree doesn't seem
|
||||
- # to contain exactly what we need at this time.
|
||||
- version = version.rsplit("esr", 1)[0]
|
||||
- alpha = "a" in version
|
||||
-
|
||||
- tail = None
|
||||
- if "a" in version:
|
||||
- head, tail = version.rsplit("a", 1)
|
||||
- if tail != "1":
|
||||
- # Disallow anything beyond `X.Ya1`.
|
||||
- raise ValueError(
|
||||
- f"Alpha version not of the form X.0a1 is not supported: {version}"
|
||||
- )
|
||||
- tail = buildid
|
||||
- elif "b" in version:
|
||||
- head, tail = version.rsplit("b", 1)
|
||||
- if len(head.split(".")) > 2:
|
||||
- raise ValueError(
|
||||
- f"Beta version not of the form X.YbZ is not supported: {version}"
|
||||
- )
|
||||
- elif "rc" in version:
|
||||
- head, tail = version.rsplit("rc", 1)
|
||||
- if len(head.split(".")) > 2:
|
||||
- raise ValueError(
|
||||
- f"Release candidate version not of the form X.YrcZ is not supported: {version}"
|
||||
- )
|
||||
- else:
|
||||
- head = version
|
||||
-
|
||||
- components = (head.split(".") + ["0", "0", "0"])[:3]
|
||||
- if tail:
|
||||
- components[2] = tail
|
||||
-
|
||||
- if alpha:
|
||||
- # Nightly builds are all `X.0a1`, which isn't helpful. Include build ID
|
||||
- # to disambiguate. But each part of the dotted quad is 16 bits, so we
|
||||
- # have to squash.
|
||||
- if components[1] != "0":
|
||||
- # Disallow anything beyond `X.0a1`.
|
||||
- raise ValueError(
|
||||
- f"Alpha version not of the form X.0a1 is not supported: {version}"
|
||||
- )
|
||||
-
|
||||
- # Last two digits only to save space. Nightly builds in 2066 and 2099
|
||||
- # will be impacted, but future us can deal with that.
|
||||
- year = buildid[2:4]
|
||||
- if year[0] == "0":
|
||||
- # Avoid leading zero, like `.0YMm`.
|
||||
- year = year[1:]
|
||||
- month = buildid[4:6]
|
||||
- day = buildid[6:8]
|
||||
- if day[0] == "0":
|
||||
- # Avoid leading zero, like `.0DHh`.
|
||||
- day = day[1:]
|
||||
- hour = buildid[8:10]
|
||||
-
|
||||
- components[1] = "".join((year, month))
|
||||
- components[2] = "".join((day, hour))
|
||||
+ [ver, rel] = version.split("-")
|
||||
|
||||
- version = "{}.{}.{}.0".format(*components)
|
||||
+ ver_parts = ver.split(".")
|
||||
+ ver_parts += ["0"] * (3 - len(ver_parts))
|
||||
|
||||
- return version
|
||||
+ return ".".join(
|
||||
+ [
|
||||
+ ver_parts[0],
|
||||
+ str(100 * int(ver_parts[1]) + int(ver_parts[2])),
|
||||
+ str(int(rel) * 100),
|
||||
+ "0",
|
||||
+ ]
|
||||
+ )
|
||||
|
||||
|
||||
def remove_single_line_comments(text):
|
||||
@@ -410,21 +361,7 @@ def repackage_msix(
|
||||
)
|
||||
|
||||
first = next(values)
|
||||
- if not displayname:
|
||||
- displayname = first
|
||||
-
|
||||
- # Release (official) and Beta share branding. Differentiate Beta a little bit.
|
||||
- if channel == "beta":
|
||||
- suffix = " Beta"
|
||||
- if not displayname.endswith(suffix):
|
||||
- displayname += suffix
|
||||
-
|
||||
- elif channel == "esr":
|
||||
- # Release (official) and ESR share branding. Differentiate ESR a little bit.
|
||||
- suffix = " ESR"
|
||||
- if not displayname.endswith(suffix):
|
||||
- displayname += suffix
|
||||
-
|
||||
+ displayname = displayname or first
|
||||
second = next(values)
|
||||
vendor = vendor or second
|
||||
|
||||
@@ -553,16 +490,6 @@ def repackage_msix(
|
||||
# In local builds and unpacked MSIX directories, `p` is like "firefox.exe" already.
|
||||
pp = p
|
||||
|
||||
- if pp.startswith("distribution"):
|
||||
- # Treat any existing distribution as a distribution directory,
|
||||
- # potentially with language packs. This makes it easy to repack
|
||||
- # unpacked MSIXes.
|
||||
- distribution_dir = mozpath.join(dir_or_package, "distribution")
|
||||
- if distribution_dir not in distribution_dirs:
|
||||
- distribution_dirs.append(distribution_dir)
|
||||
-
|
||||
- continue
|
||||
-
|
||||
copier.add(mozpath.normsep(mozpath.join("VFS", "ProgramFiles", instdir, pp)), f)
|
||||
|
||||
# Locales to declare as supported in `AppxManifest.xml`.
|
||||
--
|
||||
2.47.3
|
||||
|
||||
@@ -1,24 +0,0 @@
|
||||
From 07c72fc57ef85abed9a80ad95e6572715016b946 Mon Sep 17 00:00:00 2001
|
||||
From: LibreWolf Developers <noreply@librewolf.net>
|
||||
Date: Sun, 6 Sep 2026 10:10:44 +0100
|
||||
Subject: [PATCH 24/52] newtab-fix.patch
|
||||
|
||||
---
|
||||
browser/modules/AboutNewTab.sys.mjs | 1 -
|
||||
1 file changed, 1 deletion(-)
|
||||
|
||||
diff --git a/browser/modules/AboutNewTab.sys.mjs b/browser/modules/AboutNewTab.sys.mjs
|
||||
index 4d6b04e72b22..438a31c78f35 100644
|
||||
--- a/browser/modules/AboutNewTab.sys.mjs
|
||||
+++ b/browser/modules/AboutNewTab.sys.mjs
|
||||
@@ -216,7 +216,6 @@ export const AboutNewTab = {
|
||||
|
||||
const [createdTimestamp] = await Promise.all([
|
||||
profileCreatedAccessorReady,
|
||||
- trainhopFeatureReady,
|
||||
addonInitted,
|
||||
]);
|
||||
const createdInstant = createdTimestamp
|
||||
--
|
||||
2.47.3
|
||||
|
||||
@@ -1,55 +0,0 @@
|
||||
From 00e1f2fb40434c9e7fcdb746ce72cd03cb07e3f2 Mon Sep 17 00:00:00 2001
|
||||
From: LibreWolf Developers <noreply@librewolf.net>
|
||||
Date: Sun, 6 Sep 2026 10:10:48 +0100
|
||||
Subject: [PATCH 25/52] pip-hide.patch
|
||||
|
||||
---
|
||||
.../pictureinpicture/PictureInPicture.sys.mjs | 18 ++++++++++++++++++
|
||||
1 file changed, 18 insertions(+)
|
||||
|
||||
diff --git a/toolkit/components/pictureinpicture/PictureInPicture.sys.mjs b/toolkit/components/pictureinpicture/PictureInPicture.sys.mjs
|
||||
index 6aca1f73281c..5225e05e7a38 100644
|
||||
--- a/toolkit/components/pictureinpicture/PictureInPicture.sys.mjs
|
||||
+++ b/toolkit/components/pictureinpicture/PictureInPicture.sys.mjs
|
||||
@@ -121,6 +121,15 @@ export class PictureInPictureToggleParent extends JSWindowActorParent {
|
||||
if (!lazy.PIP_ENABLED || !lazy.PIP_WHEN_SWITCHING_TABS) {
|
||||
break;
|
||||
}
|
||||
+
|
||||
+ // Suppress auto-toggle if the user deliberately closed this PiP window
|
||||
+ if (
|
||||
+ PictureInPicture.weakAutoPipBrowserClosedDeliberately.has(browser)
|
||||
+ ) {
|
||||
+ PictureInPicture.weakAutoPipBrowserClosedDeliberately.delete(browser);
|
||||
+ break;
|
||||
+ }
|
||||
+
|
||||
// If the tab is still selected, then we can ignore this event
|
||||
if (browser.documentGlobal.gBrowser.selectedBrowser == browser) {
|
||||
break;
|
||||
@@ -263,6 +272,8 @@ export var PictureInPicture = {
|
||||
// Maps auto pip browser to PictureInPictureParent actor
|
||||
weakAutoPipBrowserToParent: new WeakMap(),
|
||||
|
||||
+ weakAutoPipBrowserClosedDeliberately: new WeakSet(),
|
||||
+
|
||||
/**
|
||||
* Returns the player window if one exists and if it hasn't yet been closed.
|
||||
*
|
||||
@@ -901,6 +912,13 @@ export var PictureInPicture = {
|
||||
if (!win) {
|
||||
return;
|
||||
}
|
||||
+
|
||||
+ const browser = this.weakWinToBrowser.get(win);
|
||||
+
|
||||
+ if (reason === "CloseButton") {
|
||||
+ PictureInPicture.weakAutoPipBrowserClosedDeliberately.add(browser);
|
||||
+ }
|
||||
+
|
||||
this.removePiPBrowserFromWeakMap(this.weakWinToBrowser.get(win));
|
||||
this.weakAutoPipBrowserToParent.delete(this.weakWinToBrowser.get(win));
|
||||
|
||||
--
|
||||
2.47.3
|
||||
|
||||
@@ -1,120 +0,0 @@
|
||||
From 3ec728b749444dc8960c6c521f472ea6be16997a Mon Sep 17 00:00:00 2001
|
||||
From: LibreWolf Developers <noreply@librewolf.net>
|
||||
Date: Sun, 6 Sep 2026 10:10:52 +0100
|
||||
Subject: [PATCH 26/52] pip-hide-ui.patch
|
||||
|
||||
---
|
||||
.../pictureinpicture/content/player.js | 6 ++++++
|
||||
.../pictureinpicture/content/player.xhtml | 11 ++++++++++-
|
||||
.../themes/shared/pictureinpicture/player.css | 17 +++++++++++++++++
|
||||
3 files changed, 33 insertions(+), 1 deletion(-)
|
||||
|
||||
diff --git a/toolkit/components/pictureinpicture/content/player.js b/toolkit/components/pictureinpicture/content/player.js
|
||||
index 978c6be7dbd2..a26ba023d20a 100644
|
||||
--- a/toolkit/components/pictureinpicture/content/player.js
|
||||
+++ b/toolkit/components/pictureinpicture/content/player.js
|
||||
@@ -257,6 +257,7 @@ let Player = {
|
||||
let strId = this.isFullscreen
|
||||
? `pictureinpicture-exit-fullscreen-btn2`
|
||||
: `pictureinpicture-fullscreen-btn2`;
|
||||
+ this.setupTooltip("piphide", "pictureinpicture-piphide-btn");
|
||||
this.setupTooltip("fullscreen", strId, "fullscreenToggleShortcut");
|
||||
|
||||
// Set the specific remoteType and browsingContextGroupID to use for the
|
||||
@@ -898,6 +899,11 @@ let Player = {
|
||||
break;
|
||||
}
|
||||
|
||||
+ case "piphide": {
|
||||
+ this.onClose(true);
|
||||
+ break;
|
||||
+ }
|
||||
+
|
||||
case "playpause": {
|
||||
if (!this.isPlaying) {
|
||||
this.actor.sendAsyncMessage("PictureInPicture:Play");
|
||||
diff --git a/toolkit/components/pictureinpicture/content/player.xhtml b/toolkit/components/pictureinpicture/content/player.xhtml
|
||||
index a723bc582857..96a2c946a14e 100644
|
||||
--- a/toolkit/components/pictureinpicture/content/player.xhtml
|
||||
+++ b/toolkit/components/pictureinpicture/content/player.xhtml
|
||||
@@ -51,13 +51,22 @@
|
||||
tabindex="9"
|
||||
#else
|
||||
tabindex="10"
|
||||
+#endif
|
||||
+ />
|
||||
+ <button id="piphide"
|
||||
+ class="control-item control-button tooltip-under-controls" data-l10n-id="pictureinpicture-piphide-btn" data-l10n-attrs="tooltip"
|
||||
+#ifdef XP_MACOSX
|
||||
+ mac="true"
|
||||
+ tabindex="10"
|
||||
+#else
|
||||
+ tabindex="11"
|
||||
#endif
|
||||
/>
|
||||
<button id="unpip"
|
||||
class="control-item control-button tooltip-under-controls" data-l10n-id="pictureinpicture-unpip-btn" data-l10n-attrs="tooltip"
|
||||
#ifdef XP_MACOSX
|
||||
mac="true"
|
||||
- tabindex="10"
|
||||
+ tabindex="11"
|
||||
#else
|
||||
tabindex="9"
|
||||
#endif
|
||||
diff --git a/toolkit/themes/shared/pictureinpicture/player.css b/toolkit/themes/shared/pictureinpicture/player.css
|
||||
index 72b016f96263..7a5fd66d43c4 100644
|
||||
--- a/toolkit/themes/shared/pictureinpicture/player.css
|
||||
+++ b/toolkit/themes/shared/pictureinpicture/player.css
|
||||
@@ -222,6 +222,8 @@ body:not(:fullscreen) #controls:hover .control-button:disabled {
|
||||
bottom: -3em;
|
||||
}
|
||||
|
||||
+#piphide:focus-visible::after,
|
||||
+#piphide:hover::after,
|
||||
#close:focus-visible::after,
|
||||
#close:hover::after,
|
||||
#unpip[mac="true"]:focus-visible::after,
|
||||
@@ -230,6 +232,8 @@ body:not(:fullscreen) #controls:hover .control-button:disabled {
|
||||
transform: translateX(1em);
|
||||
}
|
||||
|
||||
+#piphide[mac="true"]:focus-visible::after,
|
||||
+#piphide[mac="true"]:hover::after,
|
||||
#unpip:focus-visible::after,
|
||||
#unpip:hover::after,
|
||||
#close[mac="true"]:focus-visible::after,
|
||||
@@ -305,6 +309,7 @@ body:not(:fullscreen) #controls:hover #timestamp {
|
||||
opacity: 1;
|
||||
}
|
||||
|
||||
+#piphide,
|
||||
#close,
|
||||
#unpip {
|
||||
background-color: rgba(255, 255, 255, 0.8);
|
||||
@@ -312,11 +317,23 @@ body:not(:fullscreen) #controls:hover #timestamp {
|
||||
fill: var(--close-btn-fill-color);
|
||||
}
|
||||
|
||||
+#piphide:is(:hover, :focus-visible),
|
||||
#close:is(:hover, :focus-visible),
|
||||
#unpip:is(:hover, :focus-visible) {
|
||||
background-color: rgba(255, 255, 255, 0.9);
|
||||
}
|
||||
|
||||
+#piphide {
|
||||
+ background-image: url("chrome://global/skin/icons/eye-slash.svg");
|
||||
+ right: 50px;
|
||||
+ top: 10px;
|
||||
+}
|
||||
+
|
||||
+#piphide[mac="true"] {
|
||||
+ right: auto;
|
||||
+ left: 50px;
|
||||
+}
|
||||
+
|
||||
#close {
|
||||
background-image: url("chrome://global/skin/icons/close.svg");
|
||||
right: 10px;
|
||||
--
|
||||
2.47.3
|
||||
|
||||
@@ -1,71 +0,0 @@
|
||||
From 2d9a9c339498838aa373ea09383861eb7a84851a Mon Sep 17 00:00:00 2001
|
||||
From: LibreWolf Developers <noreply@librewolf.net>
|
||||
Date: Sun, 6 Sep 2026 10:10:56 +0100
|
||||
Subject: [PATCH 27/52] profile-directory.patch
|
||||
|
||||
---
|
||||
extensions/pref/autoconfig/src/prefcalls.js | 48 +++++++++++++++++++++
|
||||
1 file changed, 48 insertions(+)
|
||||
|
||||
diff --git a/extensions/pref/autoconfig/src/prefcalls.js b/extensions/pref/autoconfig/src/prefcalls.js
|
||||
index 78dd0ee5473a..4231262f29b8 100644
|
||||
--- a/extensions/pref/autoconfig/src/prefcalls.js
|
||||
+++ b/extensions/pref/autoconfig/src/prefcalls.js
|
||||
@@ -9,6 +9,54 @@ const LDAPSyncQueryContractID = "@mozilla.org/ldapsyncquery;1";
|
||||
|
||||
var gIsUTF8;
|
||||
|
||||
+{
|
||||
+ let profile_directory = null;
|
||||
+ let defaults = Services.prefs.getDefaultBranch(null);
|
||||
+
|
||||
+ let supportsXDG = Services.prefs.getBoolPref("widget.support-xdg-config", false);
|
||||
+
|
||||
+ if (supportsXDG) {
|
||||
+ let isLegacy = false;
|
||||
+ {
|
||||
+ let dirSvc = Cc["@mozilla.org/file/directory_service;1"]
|
||||
+ .getService(Ci.nsIProperties || Ci.nsIDirectoryService);
|
||||
+ let profDir = dirSvc.get("ProfD", Ci.nsIFile);
|
||||
+ let path = profDir.path || "";
|
||||
+ isLegacy = path.includes(".librewolf");
|
||||
+ }
|
||||
+
|
||||
+ if (!isLegacy) {
|
||||
+ let xdg = Services.env.get("XDG_CONFIG_HOME");
|
||||
+ if (xdg) {
|
||||
+ profile_directory = xdg;
|
||||
+ } else {
|
||||
+ let home = Services.env.get("HOME");
|
||||
+ profile_directory = home ? (home + "/.config") : null;
|
||||
+ }
|
||||
+ if (profile_directory) {
|
||||
+ defaults.setCharPref(
|
||||
+ "autoadmin.global_config_url",
|
||||
+ `file://${profile_directory}/librewolf/librewolf/librewolf.overrides.cfg`
|
||||
+ );
|
||||
+ }
|
||||
+ } else {
|
||||
+ if (profile_directory = Services.env.get("HOME")) {
|
||||
+ defaults.setCharPref(
|
||||
+ "autoadmin.global_config_url",
|
||||
+ `file://${profile_directory}/.librewolf/librewolf.overrides.cfg`
|
||||
+ );
|
||||
+ }
|
||||
+ }
|
||||
+ } else {
|
||||
+ if ((profile_directory = Services.env.get("USERPROFILE") || Services.env.get("HOME"))) {
|
||||
+ defaults.setCharPref(
|
||||
+ "autoadmin.global_config_url",
|
||||
+ `file://${profile_directory}/.librewolf/librewolf.overrides.cfg`
|
||||
+ );
|
||||
+ }
|
||||
+ }
|
||||
+}
|
||||
+
|
||||
function getPrefBranch() {
|
||||
return Services.prefs.getBranch(null);
|
||||
}
|
||||
--
|
||||
2.47.3
|
||||
|
||||
@@ -1,33 +0,0 @@
|
||||
From 045dddc201c0d52abccbbd47d7b69273a72abf4c Mon Sep 17 00:00:00 2001
|
||||
From: LibreWolf Developers <noreply@librewolf.net>
|
||||
Date: Sun, 6 Sep 2026 10:10:59 +0100
|
||||
Subject: [PATCH 28/52] remove-language-packs.patch
|
||||
|
||||
---
|
||||
browser/components/BrowserGlue.sys.mjs | 10 ++++++++++
|
||||
1 file changed, 10 insertions(+)
|
||||
|
||||
diff --git a/browser/components/BrowserGlue.sys.mjs b/browser/components/BrowserGlue.sys.mjs
|
||||
index 6339f3df60ab..202d238d56b9 100644
|
||||
--- a/browser/components/BrowserGlue.sys.mjs
|
||||
+++ b/browser/components/BrowserGlue.sys.mjs
|
||||
@@ -403,6 +403,16 @@ BrowserGlue.prototype = {
|
||||
|
||||
// handle any UI migration
|
||||
this._migrateUI();
|
||||
+
|
||||
+ const removeLangpacks = async () => {
|
||||
+ for (const addon of await lazy.AddonManager.getAddonsByTypes(["locale"])) {
|
||||
+ await addon.uninstall();
|
||||
+ }
|
||||
+ };
|
||||
+
|
||||
+ removeLangpacks().catch(err => {
|
||||
+ console.error("Could not remove langpacks", err);
|
||||
+ });
|
||||
|
||||
if (!Services.prefs.prefHasUserValue(PREF_PDFJS_ISDEFAULT_CACHE_STATE)) {
|
||||
lazy.PdfJs.checkIsDefault(this._isNewProfile);
|
||||
--
|
||||
2.47.3
|
||||
|
||||
@@ -1,108 +0,0 @@
|
||||
From f99c183cf16dd19665458d3713af1660aa08a6ee Mon Sep 17 00:00:00 2001
|
||||
From: celenity <celenity@celenity.dev>
|
||||
Date: Wed, 4 Feb 2026 04:27:07 +0000
|
||||
Subject: [PATCH 29/52] fix: Remove OpenAI backend
|
||||
|
||||
Removes the OpenAI backend from Mozilla's ML (machine learning) component.
|
||||
|
||||
Signed-off-by: celenity <celenity@celenity.dev>
|
||||
---
|
||||
toolkit/components/aboutinference/content/aboutInference.js | 4 ++--
|
||||
toolkit/components/ml/content/EngineProcess.sys.mjs | 2 +-
|
||||
toolkit/components/ml/content/backends/Pipeline.mjs | 6 +++---
|
||||
toolkit/components/ml/jar.mn | 4 ++--
|
||||
toolkit/content/license.html | 2 +-
|
||||
5 files changed, 9 insertions(+), 9 deletions(-)
|
||||
|
||||
diff --git a/toolkit/components/aboutinference/content/aboutInference.js b/toolkit/components/aboutinference/content/aboutInference.js
|
||||
index 6672be945f5b..585540f54cd8 100644
|
||||
--- a/toolkit/components/aboutinference/content/aboutInference.js
|
||||
+++ b/toolkit/components/aboutinference/content/aboutInference.js
|
||||
@@ -379,7 +379,7 @@ const INFERENCE_PAD_PRESETS = {
|
||||
device: "cpu",
|
||||
backend: "onnx",
|
||||
},
|
||||
- openai: {
|
||||
+/* openai: {
|
||||
inputArgs: [
|
||||
{
|
||||
role: "system",
|
||||
@@ -398,7 +398,7 @@ const INFERENCE_PAD_PRESETS = {
|
||||
apiKey: "ollama",
|
||||
baseURL: "http://localhost:11434/v1",
|
||||
backend: "openai",
|
||||
- },
|
||||
+ }, */
|
||||
};
|
||||
|
||||
const PREDEFINED = Object.keys(INFERENCE_PAD_PRESETS);
|
||||
diff --git a/toolkit/components/ml/content/EngineProcess.sys.mjs b/toolkit/components/ml/content/EngineProcess.sys.mjs
|
||||
index 03721443f7e0..d0ad4478acd4 100644
|
||||
--- a/toolkit/components/ml/content/EngineProcess.sys.mjs
|
||||
+++ b/toolkit/components/ml/content/EngineProcess.sys.mjs
|
||||
@@ -34,7 +34,7 @@ export const BACKENDS = Object.freeze({
|
||||
onnxNative: "onnx-native",
|
||||
llamaCpp: "llama.cpp",
|
||||
bestOnnx: "best-onnx",
|
||||
- openai: "openai",
|
||||
+// openai: "openai",
|
||||
staticEmbeddings: "static-embeddings",
|
||||
});
|
||||
|
||||
diff --git a/toolkit/components/ml/content/backends/Pipeline.mjs b/toolkit/components/ml/content/backends/Pipeline.mjs
|
||||
index 1b913af2a39a..30a04a070442 100644
|
||||
--- a/toolkit/components/ml/content/backends/Pipeline.mjs
|
||||
+++ b/toolkit/components/ml/content/backends/Pipeline.mjs
|
||||
@@ -13,7 +13,7 @@ ChromeUtils.defineESModuleGetters(
|
||||
LlamaCppPipeline:
|
||||
"chrome://global/content/ml/backends/LlamaCppPipeline.mjs",
|
||||
PipelineOptions: "chrome://global/content/ml/EngineProcess.sys.mjs",
|
||||
- OpenAIPipeline: "chrome://global/content/ml/backends/OpenAIPipeline.mjs",
|
||||
+// OpenAIPipeline: "chrome://global/content/ml/backends/OpenAIPipeline.mjs",
|
||||
StaticEmbeddingsPipeline:
|
||||
"chrome://global/content/ml/backends/StaticEmbeddingsPipeline.mjs",
|
||||
},
|
||||
@@ -46,9 +46,9 @@ export async function getBackend(consumer, wasm, options) {
|
||||
case "llama.cpp":
|
||||
factory = lazy.LlamaCppPipeline.initialize;
|
||||
break;
|
||||
- case "openai":
|
||||
+/* case "openai":
|
||||
factory = lazy.OpenAIPipeline.initialize;
|
||||
- break;
|
||||
+ break; */
|
||||
case "static-embeddings":
|
||||
factory = lazy.StaticEmbeddingsPipeline.initialize;
|
||||
break;
|
||||
diff --git a/toolkit/components/ml/jar.mn b/toolkit/components/ml/jar.mn
|
||||
index 143e4a0f0bb0..47ba236e18b1 100644
|
||||
--- a/toolkit/components/ml/jar.mn
|
||||
+++ b/toolkit/components/ml/jar.mn
|
||||
@@ -23,9 +23,9 @@ toolkit.jar:
|
||||
content/global/ml/transformers.js (vendor/transformers.js)
|
||||
content/global/ml/ThomSample.mjs (content/ThomSample.mjs)
|
||||
content/global/ml/backends/LlamaCppPipeline.mjs (content/backends/LlamaCppPipeline.mjs)
|
||||
- content/global/ml/backends/OpenAIPipeline.mjs (content/backends/OpenAIPipeline.mjs)
|
||||
+# content/global/ml/backends/OpenAIPipeline.mjs (content/backends/OpenAIPipeline.mjs)
|
||||
content/global/ml/backends/StaticEmbeddingsPipeline.mjs (content/backends/StaticEmbeddingsPipeline.mjs)
|
||||
- content/global/ml/openai.mjs (vendor/openai/dist/openai.mjs)
|
||||
+# content/global/ml/openai.mjs (vendor/openai/dist/openai.mjs)
|
||||
content/global/ml/MLTelemetry.sys.mjs (MLTelemetry.sys.mjs)
|
||||
content/global/ml/security/ConditionEvaluator.sys.mjs (security/ConditionEvaluator.sys.mjs)
|
||||
content/global/ml/security/DecisionTypes.sys.mjs (security/DecisionTypes.sys.mjs)
|
||||
diff --git a/toolkit/content/license.html b/toolkit/content/license.html
|
||||
index 75cc6317750f..a5a42a43479f 100644
|
||||
--- a/toolkit/content/license.html
|
||||
+++ b/toolkit/content/license.html
|
||||
@@ -1533,7 +1533,7 @@ product.
|
||||
<li><code>third_party/perfetto/</code></li>
|
||||
#endif
|
||||
<li><code>third_party/rust/calendrical_calculations</code></li>
|
||||
- <li><code>toolkit/components/ml/vendor/openai/dist/openai.mjs</code></li>
|
||||
+ <!-- <li><code>toolkit/components/ml/vendor/openai/dist/openai.mjs</code></li> -->
|
||||
<li><code>toolkit/components/ml/vendor/transformers.js</code></li>
|
||||
#ifdef NIGHTLY_BUILD
|
||||
<li><code>toolkit/components/ml/vendor/transformers-dev.js</code></li>
|
||||
--
|
||||
2.47.3
|
||||
|
||||
@@ -1,105 +0,0 @@
|
||||
From d776f452b45b6f61622fa57fae899ba51054e6b8 Mon Sep 17 00:00:00 2001
|
||||
From: LibreWolf Developers <noreply@librewolf.net>
|
||||
Date: Sun, 6 Sep 2026 10:11:10 +0100
|
||||
Subject: [PATCH 30/52] remove-pingsender.patch
|
||||
|
||||
---
|
||||
browser/app/macbuild/Contents/MacOS-files.in | 1 -
|
||||
browser/installer/package-manifest.in | 4 ----
|
||||
browser/installer/windows/nsis/shared.nsh | 1 -
|
||||
python/mozbuild/mozbuild/artifacts.py | 2 --
|
||||
toolkit/components/telemetry/app/TelemetrySend.sys.mjs | 3 +++
|
||||
toolkit/components/telemetry/moz.build | 4 ----
|
||||
6 files changed, 3 insertions(+), 12 deletions(-)
|
||||
|
||||
diff --git a/browser/app/macbuild/Contents/MacOS-files.in b/browser/app/macbuild/Contents/MacOS-files.in
|
||||
index 2f420f773610..3551c6613d18 100644
|
||||
--- a/browser/app/macbuild/Contents/MacOS-files.in
|
||||
+++ b/browser/app/macbuild/Contents/MacOS-files.in
|
||||
@@ -17,7 +17,6 @@
|
||||
/crashhelper
|
||||
#endif
|
||||
/nmhproxy
|
||||
-/pingsender
|
||||
/pk12util
|
||||
/ssltunnel
|
||||
/xpcshell
|
||||
diff --git a/browser/installer/package-manifest.in b/browser/installer/package-manifest.in
|
||||
index 9944fbec4022..605af7a29185 100644
|
||||
--- a/browser/installer/package-manifest.in
|
||||
+++ b/browser/installer/package-manifest.in
|
||||
@@ -408,10 +408,6 @@ bin/libfreebl_64int_3.so
|
||||
@BINPATH@/crashhelper@BIN_SUFFIX@
|
||||
#endif
|
||||
|
||||
-; [ Ping Sender ]
|
||||
-;
|
||||
-@BINPATH@/pingsender@BIN_SUFFIX@
|
||||
-
|
||||
; [ Native Messaging Host Proxy ]
|
||||
;
|
||||
#if defined(XP_WIN) || defined(XP_MACOSX)
|
||||
diff --git a/browser/installer/windows/nsis/shared.nsh b/browser/installer/windows/nsis/shared.nsh
|
||||
index b81c7ef59be0..4155c5264318 100755
|
||||
--- a/browser/installer/windows/nsis/shared.nsh
|
||||
+++ b/browser/installer/windows/nsis/shared.nsh
|
||||
@@ -1411,7 +1411,6 @@ FunctionEnd
|
||||
Push "crashreporter.exe"
|
||||
Push "default-browser-agent.exe"
|
||||
Push "nmhproxy.exe"
|
||||
- Push "pingsender.exe"
|
||||
Push "updater.exe"
|
||||
Push "mozwer.dll"
|
||||
Push "${FileMainEXE}"
|
||||
diff --git a/python/mozbuild/mozbuild/artifacts.py b/python/mozbuild/mozbuild/artifacts.py
|
||||
index 548b7786ee85..6b055486e029 100644
|
||||
--- a/python/mozbuild/mozbuild/artifacts.py
|
||||
+++ b/python/mozbuild/mozbuild/artifacts.py
|
||||
@@ -677,7 +677,6 @@ class LinuxArtifactJob(ArtifactJob):
|
||||
"{product}/dependentlibs.list",
|
||||
"{product}/{product}",
|
||||
"{product}/{product}-bin",
|
||||
- "{product}/pingsender",
|
||||
"{product}/plugin-container",
|
||||
"{product}/updater",
|
||||
"{product}/gfxtest",
|
||||
@@ -773,7 +772,6 @@ class MacArtifactJob(ArtifactJob):
|
||||
"{product}-bin",
|
||||
"*.dylib",
|
||||
"nmhproxy",
|
||||
- "pingsender",
|
||||
"plugin-container.app/Contents/MacOS/plugin-container",
|
||||
"updater.app/Contents/MacOS/org.mozilla.updater",
|
||||
# 'xpcshell',
|
||||
diff --git a/toolkit/components/telemetry/app/TelemetrySend.sys.mjs b/toolkit/components/telemetry/app/TelemetrySend.sys.mjs
|
||||
index 2ebae13763c5..496880e402f2 100644
|
||||
--- a/toolkit/components/telemetry/app/TelemetrySend.sys.mjs
|
||||
+++ b/toolkit/components/telemetry/app/TelemetrySend.sys.mjs
|
||||
@@ -1677,6 +1677,9 @@ export var TelemetrySendImpl = {
|
||||
},
|
||||
|
||||
runPingSender(pings, observer) {
|
||||
+ throw Components.Exception("", Cr.NS_ERROR_NOT_IMPLEMENTED);
|
||||
+
|
||||
+ /* eslint-disable-next-line no-unreachable */
|
||||
if (AppConstants.platform === "android") {
|
||||
throw Components.Exception("", Cr.NS_ERROR_NOT_IMPLEMENTED);
|
||||
}
|
||||
diff --git a/toolkit/components/telemetry/moz.build b/toolkit/components/telemetry/moz.build
|
||||
index 91ae53839b69..de9f21c2b2b0 100644
|
||||
--- a/toolkit/components/telemetry/moz.build
|
||||
+++ b/toolkit/components/telemetry/moz.build
|
||||
@@ -6,10 +6,6 @@ include("/ipc/chromium/chromium-config.mozbuild")
|
||||
|
||||
FINAL_LIBRARY = "xul"
|
||||
|
||||
-DIRS = [
|
||||
- "pingsender",
|
||||
-]
|
||||
-
|
||||
DEFINES["MOZ_APP_VERSION"] = '"%s"' % CONFIG["MOZ_APP_VERSION"]
|
||||
|
||||
LOCAL_INCLUDES += [
|
||||
--
|
||||
2.47.3
|
||||
|
||||
@@ -1,312 +0,0 @@
|
||||
From 38c03c5e125329cc45f3b290ae16f50fe533a5c3 Mon Sep 17 00:00:00 2001
|
||||
From: LibreWolf Developers <noreply@librewolf.net>
|
||||
Date: Sun, 6 Sep 2026 10:11:17 +0100
|
||||
Subject: [PATCH 31/52] rs-blocker.patch
|
||||
|
||||
---
|
||||
services/settings/RemoteSettings.worker.mjs | 8 +-
|
||||
.../settings/RemoteSettingsClient.sys.mjs | 21 ++++-
|
||||
.../settings/RemoteSettingsWorker.sys.mjs | 4 +-
|
||||
services/settings/SharedUtils.sys.mjs | 78 ++++++++++++++++++-
|
||||
services/settings/Utils.sys.mjs | 28 ++++++-
|
||||
services/settings/remote-settings.sys.mjs | 5 ++
|
||||
.../search/SearchEngineSelector.sys.mjs | 8 +-
|
||||
7 files changed, 136 insertions(+), 16 deletions(-)
|
||||
|
||||
diff --git a/services/settings/RemoteSettings.worker.mjs b/services/settings/RemoteSettings.worker.mjs
|
||||
index 3e4e915c13ed..a92768553a29 100644
|
||||
--- a/services/settings/RemoteSettings.worker.mjs
|
||||
+++ b/services/settings/RemoteSettings.worker.mjs
|
||||
@@ -62,12 +62,16 @@ const Agent = {
|
||||
*
|
||||
* @param {string} bucket
|
||||
* @param {string} collection
|
||||
+ * @param {string} allowedCollections
|
||||
+ * @param {string} allowedCollectionsFromDump
|
||||
* @returns {int} Number of records loaded from dump or -1 if no dump found.
|
||||
*/
|
||||
- async importJSONDump(bucket, collection) {
|
||||
+ async importJSONDump(bucket, collection, allowedCollections, allowedCollectionsFromDump) {
|
||||
const { data: records, timestamp } = await SharedUtils.loadJSONDump(
|
||||
bucket,
|
||||
- collection
|
||||
+ collection,
|
||||
+ allowedCollections,
|
||||
+ allowedCollectionsFromDump
|
||||
);
|
||||
if (records === null) {
|
||||
// Return -1 if file is missing.
|
||||
diff --git a/services/settings/RemoteSettingsClient.sys.mjs b/services/settings/RemoteSettingsClient.sys.mjs
|
||||
index f4f9b1c0bce9..fc3c6bb2b1ba 100644
|
||||
--- a/services/settings/RemoteSettingsClient.sys.mjs
|
||||
+++ b/services/settings/RemoteSettingsClient.sys.mjs
|
||||
@@ -209,12 +209,21 @@ class AttachmentDownloader extends Downloader {
|
||||
return cacheImpl;
|
||||
}
|
||||
|
||||
+ get identifier() {
|
||||
+ return this._client.identifier;
|
||||
+ }
|
||||
+
|
||||
/**
|
||||
* Download attachment and report Telemetry on failure.
|
||||
*
|
||||
* @see Downloader.download
|
||||
*/
|
||||
async download(record, options) {
|
||||
+ if (!lazy.SharedUtils.isCollectionAllowed(this.bucketName, this.collectionName, lazy.Utils.allowedCollections)) {
|
||||
+ throw Error(
|
||||
+ `Download attempt to RS collection "${this.identifier}" was blocked.`
|
||||
+ );
|
||||
+ }
|
||||
await lazy.UptakeTelemetry.report(
|
||||
lazy.UptakeTelemetry.STATUS.DOWNLOAD_START,
|
||||
{
|
||||
@@ -586,7 +595,9 @@ export class RemoteSettingsClient extends EventEmitter {
|
||||
}
|
||||
({ data } = await lazy.SharedUtils.loadJSONDump(
|
||||
this.bucketName,
|
||||
- this.collectionName
|
||||
+ this.collectionName,
|
||||
+ lazy.Utils.allowedCollections,
|
||||
+ lazy.Utils.allowedCollectionsFromDump
|
||||
));
|
||||
if (data !== null) {
|
||||
lazy.console.info(`${this.identifier} falling back to JSON dump`);
|
||||
@@ -656,6 +667,10 @@ export class RemoteSettingsClient extends EventEmitter {
|
||||
return;
|
||||
}
|
||||
|
||||
+ if (!lazy.SharedUtils.isCollectionAllowed(this.bucketName, this.collectionName, lazy.Utils.allowedCollections)) {
|
||||
+ return;
|
||||
+ }
|
||||
+
|
||||
// We want to know which timestamp we are expected to obtain in order to leverage
|
||||
// cache busting. We don't provide ETag because we don't want a 304.
|
||||
const { changes } = await lazy.Utils.fetchLatestChanges(
|
||||
@@ -1040,7 +1055,9 @@ export class RemoteSettingsClient extends EventEmitter {
|
||||
lazy.console.info(`${this.identifier} try to restore dump`);
|
||||
const result = await lazy.RemoteSettingsWorker.importJSONDump(
|
||||
this.bucketName,
|
||||
- this.collectionName
|
||||
+ this.collectionName,
|
||||
+ lazy.Utils.allowedCollections,
|
||||
+ lazy.Utils.allowedCollectionsFromDump
|
||||
);
|
||||
if (result < 0) {
|
||||
lazy.console.debug(`${this.identifier} no dump available`);
|
||||
diff --git a/services/settings/RemoteSettingsWorker.sys.mjs b/services/settings/RemoteSettingsWorker.sys.mjs
|
||||
index 57bfb3f3d544..874b35abff18 100644
|
||||
--- a/services/settings/RemoteSettingsWorker.sys.mjs
|
||||
+++ b/services/settings/RemoteSettingsWorker.sys.mjs
|
||||
@@ -162,8 +162,8 @@ class Worker {
|
||||
]);
|
||||
}
|
||||
|
||||
- async importJSONDump(bucket, collection) {
|
||||
- return this._execute("importJSONDump", [bucket, collection], {
|
||||
+ async importJSONDump(bucket, collection, allowedCollections, allowedCollectionsFromDump) {
|
||||
+ return this._execute("importJSONDump", [bucket, collection, allowedCollections, allowedCollectionsFromDump], {
|
||||
mustComplete: true,
|
||||
});
|
||||
}
|
||||
diff --git a/services/settings/SharedUtils.sys.mjs b/services/settings/SharedUtils.sys.mjs
|
||||
index e5b20d9b9dd6..9a71c99668f0 100644
|
||||
--- a/services/settings/SharedUtils.sys.mjs
|
||||
+++ b/services/settings/SharedUtils.sys.mjs
|
||||
@@ -34,8 +34,13 @@ export var SharedUtils = {
|
||||
*
|
||||
* @param {string} bucket
|
||||
* @param {string} collection
|
||||
+ * @param {string} allowedCollections
|
||||
+ * @param {string} allowedCollectionsFromDump
|
||||
*/
|
||||
- async loadJSONDump(bucket, collection) {
|
||||
+ async loadJSONDump(bucket, collection, allowedCollections, allowedCollectionsFromDump) {
|
||||
+ if (!this.isCollectionAllowedFromDump(bucket, collection, allowedCollections, allowedCollectionsFromDump)) {
|
||||
+ return { data: null, timestamp: null };
|
||||
+ }
|
||||
// When using the preview bucket, we still want to load the main dump.
|
||||
// But we store it locally in the preview bucket.
|
||||
const jsonBucket = bucket.replace("-preview", "");
|
||||
@@ -50,4 +55,75 @@ export var SharedUtils = {
|
||||
// Will throw if JSON is invalid.
|
||||
return response.json();
|
||||
},
|
||||
+
|
||||
+ /**
|
||||
+ * Internal code to determine whether the bucket and collection are allowed to
|
||||
+ * be loaded by the remote settings client for a given list of allowed
|
||||
+ * bucket/collection combinations.
|
||||
+ * @param {string} bucket
|
||||
+ * @param {string} collection
|
||||
+ * @param {Array<string>} allowedCollections
|
||||
+ * @returns {boolean} whether the bucket and collection are allowed to load
|
||||
+ */
|
||||
+ _isCollectionAllowedInternal(bucket, collection, allowedCollections) {
|
||||
+ return (
|
||||
+ allowedCollections.includes(`${bucket}/${collection}`) ||
|
||||
+ allowedCollections.includes(`${bucket}/*`) ||
|
||||
+ allowedCollections.includes("*")
|
||||
+ );
|
||||
+ },
|
||||
+
|
||||
+ /**
|
||||
+ * Determines whether the bucket and collection are allowed to be loaded by the
|
||||
+ * remote settings client.
|
||||
+ * @param {string} bucket
|
||||
+ * @param {string} collection
|
||||
+ * @param {string} allowedCollections
|
||||
+ * @returns {boolean} whether the bucket and collection are allowed to load
|
||||
+ */
|
||||
+ isCollectionAllowed(bucket, collection, allowedCollections) {
|
||||
+ if (
|
||||
+ this._isCollectionAllowedInternal(
|
||||
+ bucket,
|
||||
+ collection,
|
||||
+ allowedCollections
|
||||
+ )
|
||||
+ ) {
|
||||
+ return true;
|
||||
+ }
|
||||
+ console.warn(
|
||||
+ `Connection attempt to RS collection "${bucket}/${collection}" was blocked/filtered.`
|
||||
+ );
|
||||
+ return false;
|
||||
+ },
|
||||
+
|
||||
+ /**
|
||||
+ * Determines whether the bucket and collection are allowed to be loaded from
|
||||
+ * an in-tree remote settings dump.
|
||||
+ * @param {string} bucket
|
||||
+ * @param {string} collection
|
||||
+ * @param {string} allowedCollections
|
||||
+ * @param {string} allowedCollectionsFromDump
|
||||
+ * @returns {boolean} whether the bucket and collection are allowed to load
|
||||
+ */
|
||||
+ isCollectionAllowedFromDump(bucket, collection, allowedCollections, allowedCollectionsFromDump) {
|
||||
+ if (
|
||||
+ this._isCollectionAllowedInternal(
|
||||
+ bucket,
|
||||
+ collection,
|
||||
+ allowedCollectionsFromDump
|
||||
+ ) ||
|
||||
+ this._isCollectionAllowedInternal(
|
||||
+ bucket,
|
||||
+ collection,
|
||||
+ allowedCollections
|
||||
+ )
|
||||
+ ) {
|
||||
+ return true;
|
||||
+ }
|
||||
+ console.warn(
|
||||
+ `Access attempt to RS collection "${bucket}/${collection}" from local dump was blocked/filtered.`
|
||||
+ );
|
||||
+ return false;
|
||||
+ },
|
||||
};
|
||||
diff --git a/services/settings/Utils.sys.mjs b/services/settings/Utils.sys.mjs
|
||||
index 40e919a997a5..ccc7694bcc28 100644
|
||||
--- a/services/settings/Utils.sys.mjs
|
||||
+++ b/services/settings/Utils.sys.mjs
|
||||
@@ -99,6 +99,18 @@ XPCOMUtils.defineLazyPreferenceGetter(
|
||||
""
|
||||
);
|
||||
|
||||
+ChromeUtils.defineLazyGetter(lazy, "allowedCollections", () =>
|
||||
+ Services.prefs
|
||||
+ .getStringPref("librewolf.services.settings.allowedCollections", "")
|
||||
+ .split(",")
|
||||
+);
|
||||
+
|
||||
+ChromeUtils.defineLazyGetter(lazy, "allowedCollectionsFromDump", () =>
|
||||
+ Services.prefs
|
||||
+ .getStringPref("librewolf.services.settings.allowedCollectionsFromDump", "")
|
||||
+ .split(",")
|
||||
+);
|
||||
+
|
||||
function _isUndefined(value) {
|
||||
return typeof value === "undefined";
|
||||
}
|
||||
@@ -111,6 +123,14 @@ export var Utils = {
|
||||
: AppConstants.REMOTE_SETTINGS_SERVER_URLS[0];
|
||||
},
|
||||
|
||||
+ get allowedCollections() {
|
||||
+ return lazy.allowedCollections;
|
||||
+ },
|
||||
+
|
||||
+ get allowedCollectionsFromDump() {
|
||||
+ return lazy.allowedCollectionsFromDump;
|
||||
+ },
|
||||
+
|
||||
CHANGES_PATH: "/buckets/monitor/collections/changes/changeset",
|
||||
|
||||
/**
|
||||
@@ -451,7 +471,9 @@ export var Utils = {
|
||||
if (lastModified === undefined) {
|
||||
const { timestamp: dumpTimestamp } = await lazy.SharedUtils.loadJSONDump(
|
||||
bucket,
|
||||
- collection
|
||||
+ collection,
|
||||
+ this.allowedCollections,
|
||||
+ this.allowedCollectionsFromDump
|
||||
);
|
||||
// Client recognize -1 as missing dump.
|
||||
lastModified = dumpTimestamp ?? -1;
|
||||
@@ -561,7 +583,9 @@ export var Utils = {
|
||||
}
|
||||
|
||||
return {
|
||||
- changes,
|
||||
+ changes: changes.filter(change =>
|
||||
+ lazy.SharedUtils.isCollectionAllowed(change.bucket, change.collection, this.allowedCollections)
|
||||
+ ),
|
||||
timestamp,
|
||||
serverTimeMillis,
|
||||
backoffSeconds,
|
||||
diff --git a/services/settings/remote-settings.sys.mjs b/services/settings/remote-settings.sys.mjs
|
||||
index b180cfc850ee..c8db18344c1f 100644
|
||||
--- a/services/settings/remote-settings.sys.mjs
|
||||
+++ b/services/settings/remote-settings.sys.mjs
|
||||
@@ -16,6 +16,7 @@ ChromeUtils.defineESModuleGetters(lazy, {
|
||||
pushBroadcastService: "resource://gre/modules/PushBroadcastService.sys.mjs",
|
||||
RemoteSettingsClient:
|
||||
"resource://services-settings/RemoteSettingsClient.sys.mjs",
|
||||
+ SharedUtils: "resource://services-settings/SharedUtils.sys.mjs",
|
||||
SyncHistory: "resource://services-settings/SyncHistory.sys.mjs",
|
||||
UptakeTelemetry: "resource://services-settings/UptakeTelemetry.sys.mjs",
|
||||
Utils: "resource://services-settings/Utils.sys.mjs",
|
||||
@@ -286,6 +287,10 @@ function remoteSettingsFunction() {
|
||||
const collection = changeset.metadata.id;
|
||||
const identifier = `${bucket}/${collection}`;
|
||||
|
||||
+ if (!lazy.SharedUtils.isCollectionAllowed(bucket, collection, lazy.Utils.allowedCollections)) {
|
||||
+ continue;
|
||||
+ }
|
||||
+
|
||||
if (pulled.includes(identifier)) {
|
||||
// The startup bundles contain both main and preview changesets.
|
||||
// Importing both increases complexity down the line, and brings no value.
|
||||
diff --git a/toolkit/components/search/SearchEngineSelector.sys.mjs b/toolkit/components/search/SearchEngineSelector.sys.mjs
|
||||
index 3a42b383af19..3befe8d89988 100644
|
||||
--- a/toolkit/components/search/SearchEngineSelector.sys.mjs
|
||||
+++ b/toolkit/components/search/SearchEngineSelector.sys.mjs
|
||||
@@ -409,13 +409,7 @@ export class SearchEngineSelector {
|
||||
* could be obtained.
|
||||
*/
|
||||
async #getConfigurationOverrides() {
|
||||
- let result = [];
|
||||
- try {
|
||||
- result = await this.#remoteConfigOverrides.get();
|
||||
- } catch (ex) {
|
||||
- // This data is remote only, so we just return an empty array if it fails.
|
||||
- }
|
||||
- return result;
|
||||
+ return [];
|
||||
}
|
||||
|
||||
/**
|
||||
--
|
||||
2.47.3
|
||||
|
||||
@@ -1,39 +0,0 @@
|
||||
From 97f59260bde3e817cb6b1ea9cab173de834391f4 Mon Sep 17 00:00:00 2001
|
||||
From: LibreWolf Developers <noreply@librewolf.net>
|
||||
Date: Sun, 6 Sep 2026 10:11:20 +0100
|
||||
Subject: [PATCH 32/52] rust-gentoo-musl.patch
|
||||
|
||||
---
|
||||
build/moz.configure/rust.configure | 12 +++++++++++-
|
||||
1 file changed, 11 insertions(+), 1 deletion(-)
|
||||
|
||||
diff --git a/build/moz.configure/rust.configure b/build/moz.configure/rust.configure
|
||||
index ea19412890bd..662f0d621628 100644
|
||||
--- a/build/moz.configure/rust.configure
|
||||
+++ b/build/moz.configure/rust.configure
|
||||
@@ -424,11 +424,21 @@ def detect_rustc_target(host_or_target, arm_target, rust_supported_targets):
|
||||
if len(narrowed) == 1:
|
||||
return narrowed[0].rust_target
|
||||
|
||||
- # Finally, see if the vendor can be used to disambiguate.
|
||||
+ # See if the vendor can be used to disambiguate.
|
||||
narrowed = [c for c in candidates if c.target.vendor == host_or_target.vendor]
|
||||
if len(narrowed) == 1:
|
||||
return narrowed[0].rust_target
|
||||
|
||||
+ # Finally, check for vendor gentoo in the target triple.
|
||||
+ vendor_aliases = {"unknown": ("gentoo")}
|
||||
+ narrowed = [
|
||||
+ c
|
||||
+ for c in candidates
|
||||
+ if host_or_target.vendor in vendor_aliases.get(c.target.vendor, ())
|
||||
+ ]
|
||||
+ if len(narrowed) == 1:
|
||||
+ return narrowed[0].rust_target
|
||||
+
|
||||
return None
|
||||
|
||||
rustc_target = find_candidate(candidates)
|
||||
--
|
||||
2.47.3
|
||||
|
||||
@@ -1,98 +0,0 @@
|
||||
From 0181d9a235bb94ae627e516cf6b941434a4e831f Mon Sep 17 00:00:00 2001
|
||||
From: LibreWolf Developers <noreply@librewolf.net>
|
||||
Date: Sun, 6 Sep 2026 10:11:24 +0100
|
||||
Subject: [PATCH 33/52] strip-dash-from-compare.patch
|
||||
|
||||
---
|
||||
xpcom/base/nsVersionComparator.cpp | 40 ++++++++++++++++++++++++++++++
|
||||
1 file changed, 40 insertions(+)
|
||||
|
||||
diff --git a/xpcom/base/nsVersionComparator.cpp b/xpcom/base/nsVersionComparator.cpp
|
||||
index 21dd6499f796..e7e3f505db85 100644
|
||||
--- a/xpcom/base/nsVersionComparator.cpp
|
||||
+++ b/xpcom/base/nsVersionComparator.cpp
|
||||
@@ -4,6 +4,7 @@
|
||||
|
||||
#include "nsVersionComparator.h"
|
||||
|
||||
+#include <ctype.h>
|
||||
#include <errno.h>
|
||||
#include <stdint.h>
|
||||
#include <stdlib.h>
|
||||
@@ -16,6 +17,7 @@
|
||||
|
||||
# include "nsString.h"
|
||||
# endif
|
||||
+# include <wctype.h>
|
||||
# include "mozilla/Char16.h"
|
||||
# include "nsAlgorithm.h"
|
||||
#endif
|
||||
@@ -331,6 +333,22 @@ static int32_t CompareVP(VersionPartW& aVer1, VersionPartW& aVer2) {
|
||||
namespace mozilla {
|
||||
|
||||
#ifdef XP_WIN
|
||||
+static void StripVersionSuffix(wchar_t* aVersion) {
|
||||
+ if (!aVersion) return;
|
||||
+
|
||||
+ size_t len = wcslen(aVersion);
|
||||
+ if (len < 2) return;
|
||||
+
|
||||
+ int pos = (int)len - 1;
|
||||
+ while (pos >= 0 && iswdigit(aVersion[pos])) {
|
||||
+ pos--;
|
||||
+ }
|
||||
+
|
||||
+ if (pos >= 0 && aVersion[pos] == L'-') {
|
||||
+ aVersion[pos] = L'\0';
|
||||
+ }
|
||||
+}
|
||||
+
|
||||
int32_t CompareVersions(const char16_t* aStrA, const char16_t* aStrB) {
|
||||
wchar_t* A2 = wcsdup(char16ptr_t(aStrA));
|
||||
if (!A2) {
|
||||
@@ -343,6 +361,9 @@ int32_t CompareVersions(const char16_t* aStrA, const char16_t* aStrB) {
|
||||
return 1;
|
||||
}
|
||||
|
||||
+ StripVersionSuffix(A2);
|
||||
+ StripVersionSuffix(B2);
|
||||
+
|
||||
int32_t result;
|
||||
wchar_t* a = A2;
|
||||
wchar_t* b = B2;
|
||||
@@ -367,6 +388,22 @@ int32_t CompareVersions(const char16_t* aStrA, const char16_t* aStrB) {
|
||||
}
|
||||
#endif
|
||||
|
||||
+static void StripVersionSuffix(char* aVersion) {
|
||||
+ if (!aVersion) return;
|
||||
+
|
||||
+ size_t len = strlen(aVersion);
|
||||
+ if (len < 2) return;
|
||||
+
|
||||
+ int pos = (int)len - 1;
|
||||
+ while (pos >= 0 && isdigit(aVersion[pos])) {
|
||||
+ pos--;
|
||||
+ }
|
||||
+
|
||||
+ if (pos >= 0 && aVersion[pos] == '-') {
|
||||
+ aVersion[pos] = '\0';
|
||||
+ }
|
||||
+}
|
||||
+
|
||||
int32_t CompareVersions(const char* aStrA, const char* aStrB) {
|
||||
char* A2 = strdup(aStrA);
|
||||
if (!A2) {
|
||||
@@ -379,6 +416,9 @@ int32_t CompareVersions(const char* aStrA, const char* aStrB) {
|
||||
return 1;
|
||||
}
|
||||
|
||||
+ StripVersionSuffix(A2);
|
||||
+ StripVersionSuffix(B2);
|
||||
+
|
||||
int32_t result;
|
||||
char* a = A2;
|
||||
char* b = B2;
|
||||
--
|
||||
2.47.3
|
||||
|
||||
@@ -1,51 +0,0 @@
|
||||
From 39bc6d8ff9776feeb8b4682957956d31b5680925 Mon Sep 17 00:00:00 2001
|
||||
From: LibreWolf Developers <noreply@librewolf.net>
|
||||
Date: Sun, 6 Sep 2026 10:11:28 +0100
|
||||
Subject: [PATCH 34/52] temp-macos-fix.patch
|
||||
|
||||
---
|
||||
browser/app/macbuild/Contents/Info.plist.in | 2 --
|
||||
browser/app/moz.build | 1 -
|
||||
browser/installer/package-manifest.in | 1 -
|
||||
3 files changed, 4 deletions(-)
|
||||
|
||||
diff --git a/browser/app/macbuild/Contents/Info.plist.in b/browser/app/macbuild/Contents/Info.plist.in
|
||||
index cd59b5dfcbf8..0757ac1d98b7 100644
|
||||
--- a/browser/app/macbuild/Contents/Info.plist.in
|
||||
+++ b/browser/app/macbuild/Contents/Info.plist.in
|
||||
@@ -190,8 +190,6 @@
|
||||
<string>@MAC_APP_NAME@ @APP_VERSION@</string>
|
||||
<key>CFBundleIconFile</key>
|
||||
<string>firefox.icns</string>
|
||||
- <key>CFBundleIconName</key>
|
||||
- <string>AppIcon</string>
|
||||
<key>CFBundleIdentifier</key>
|
||||
<string>@MOZ_MACBUNDLE_ID@</string>
|
||||
<key>CFBundleInfoDictionaryVersion</key>
|
||||
diff --git a/browser/app/moz.build b/browser/app/moz.build
|
||||
index db09aba7e9ec..2d8a4d867a04 100644
|
||||
--- a/browser/app/moz.build
|
||||
+++ b/browser/app/moz.build
|
||||
@@ -74,7 +74,6 @@ if CONFIG["MOZ_WIDGET_TOOLKIT"] == "cocoa":
|
||||
extra_files = [
|
||||
(f"{branding}/firefox.icns", "Resources/firefox.icns"),
|
||||
(f"{branding}/document.icns", "Resources/document.icns"),
|
||||
- (f"{branding}/Assets.car", "Resources/Assets.car"),
|
||||
]
|
||||
if CONFIG["MOZ_UPDATER"]:
|
||||
extra_files.append((
|
||||
diff --git a/browser/installer/package-manifest.in b/browser/installer/package-manifest.in
|
||||
index 605af7a29185..70c1b894be93 100644
|
||||
--- a/browser/installer/package-manifest.in
|
||||
+++ b/browser/installer/package-manifest.in
|
||||
@@ -42,7 +42,6 @@
|
||||
@APPNAME@/Contents/PkgInfo
|
||||
@RESPATH@/firefox.icns
|
||||
@RESPATH@/document.icns
|
||||
-@RESPATH@/Assets.car
|
||||
@RESPATH@/@LPROJ_ROOT@.lproj/*
|
||||
#endif
|
||||
|
||||
--
|
||||
2.47.3
|
||||
|
||||
@@ -1,31 +0,0 @@
|
||||
From 6c60f71343ada19cf657593af1dcc1d3d3da3d80 Mon Sep 17 00:00:00 2001
|
||||
From: LibreWolf Developers <noreply@librewolf.net>
|
||||
Date: Sun, 6 Sep 2026 10:11:32 +0100
|
||||
Subject: [PATCH 35/52] macos-relaunch-without-updater.patch
|
||||
|
||||
---
|
||||
toolkit/xre/nsCommandLineServiceMac.mm | 8 ++++++--
|
||||
1 file changed, 6 insertions(+), 2 deletions(-)
|
||||
|
||||
diff --git a/toolkit/xre/nsCommandLineServiceMac.mm b/toolkit/xre/nsCommandLineServiceMac.mm
|
||||
index 3fc9808a5524..a20e7114bd69 100644
|
||||
--- a/toolkit/xre/nsCommandLineServiceMac.mm
|
||||
+++ b/toolkit/xre/nsCommandLineServiceMac.mm
|
||||
@@ -61,8 +61,12 @@ void SetupMacCommandLine(int& argc, char**& argv, bool forRestart) {
|
||||
NSString* updaterPath = [[path stringByDeletingLastPathComponent]
|
||||
stringByAppendingPathComponent:
|
||||
@"updater.app/Contents/MacOS/org.mozilla.updater"];
|
||||
- AddToCommandLine(updaterPath.UTF8String);
|
||||
- AddToCommandLine("--openAppBundle");
|
||||
+ // Only use the updater as a relauncher when it exists. When the updater is
|
||||
+ // disabled, fall back to relaunching the .app bundle directly via NSWorkspace.
|
||||
+ if ([[NSFileManager defaultManager] fileExistsAtPath:updaterPath]) {
|
||||
+ AddToCommandLine(updaterPath.UTF8String);
|
||||
+ AddToCommandLine("--openAppBundle");
|
||||
+ }
|
||||
}
|
||||
|
||||
// We adjust the path to point to the .app bundle, rather than the executable
|
||||
--
|
||||
2.47.3
|
||||
|
||||
-96
@@ -1,96 +0,0 @@
|
||||
From 484614c225f0e13d9713ee5f85d579938b4dfe96 Mon Sep 17 00:00:00 2001
|
||||
From: LibreWolf Developers <noreply@librewolf.net>
|
||||
Date: Sun, 6 Sep 2026 10:11:36 +0100
|
||||
Subject: [PATCH 36/52] ui-patches/add-translate-page-context-menu.patch
|
||||
|
||||
---
|
||||
.../base/content/browser-context.inc.xhtml | 2 +
|
||||
browser/base/content/browser-context.js | 3 ++
|
||||
browser/base/content/nsContextMenu.sys.mjs | 37 +++++++++++++++++++
|
||||
3 files changed, 42 insertions(+)
|
||||
|
||||
diff --git a/browser/base/content/browser-context.inc.xhtml b/browser/base/content/browser-context.inc.xhtml
|
||||
index 621be24e4e0c..b5ec280b761f 100644
|
||||
--- a/browser/base/content/browser-context.inc.xhtml
|
||||
+++ b/browser/base/content/browser-context.inc.xhtml
|
||||
@@ -369,6 +369,8 @@
|
||||
<menuitem id="context-searchselect-private"/>
|
||||
<menuitem id="context-translate-selection"
|
||||
data-l10n-id="main-context-menu-translate-selection"/>
|
||||
+ <menuitem id="context-translate-page"
|
||||
+ data-l10n-id="main-context-menu-translate-page"/>
|
||||
<menu id="context-ask-chat"/>
|
||||
|
||||
<menuseparator id="frame-sep"/>
|
||||
diff --git a/browser/base/content/browser-context.js b/browser/base/content/browser-context.js
|
||||
index 042341cecb1a..a59e92ab302d 100644
|
||||
--- a/browser/base/content/browser-context.js
|
||||
+++ b/browser/base/content/browser-context.js
|
||||
@@ -212,6 +212,9 @@ document.addEventListener(
|
||||
case "context-translate-selection":
|
||||
gContextMenu.openSelectTranslationsPanel(event);
|
||||
break;
|
||||
+ case "context-translate-page":
|
||||
+ gContextMenu.openFullPageTranslationsPanel(event);
|
||||
+ break;
|
||||
case "context-showonlythisframe":
|
||||
gContextMenu.showOnlyThisFrame();
|
||||
break;
|
||||
diff --git a/browser/base/content/nsContextMenu.sys.mjs b/browser/base/content/nsContextMenu.sys.mjs
|
||||
index 305a6b1eb41d..d1a9aba3cc94 100644
|
||||
--- a/browser/base/content/nsContextMenu.sys.mjs
|
||||
+++ b/browser/base/content/nsContextMenu.sys.mjs
|
||||
@@ -906,6 +906,7 @@ export class nsContextMenu {
|
||||
|
||||
this.showAndFormatSearchContextItem();
|
||||
this.showTranslateSelectionItem();
|
||||
+ this.showTranslatePageItem();
|
||||
lazy.GenAI.buildAskChatMenu(document.getElementById("context-ask-chat"), {
|
||||
browser: this.browser,
|
||||
selectionInfo: this.selectionInfo,
|
||||
@@ -2608,6 +2609,42 @@ export class nsContextMenu {
|
||||
this.window.openTrustedLinkIn(drmInfoURL, dest);
|
||||
}
|
||||
|
||||
+ /**
|
||||
+ * Opens the FullPageTranslationsPanel singleton instance.
|
||||
+ *
|
||||
+ * @param {Event} event - The triggering event for opening the panel.
|
||||
+ */
|
||||
+ openFullPageTranslationsPanel(event) {
|
||||
+ this.window.FullPageTranslationsPanel.open(event);
|
||||
+ }
|
||||
+
|
||||
+ /**
|
||||
+ * Displays or hides the translate-page item in the context menu.
|
||||
+ */
|
||||
+ showTranslatePageItem() {
|
||||
+ const translatePageItem = this.document.getElementById(
|
||||
+ "context-translate-page"
|
||||
+ );
|
||||
+ const translationsEnabled = lazy.TranslationsParent.AIFeature.isEnabled;
|
||||
+ const isAboutPage = this.browser?.currentURI?.schemeIs?.("about");
|
||||
+
|
||||
+ translatePageItem.hidden =
|
||||
+ // Only show the item if the feature is enabled.
|
||||
+ !translationsEnabled ||
|
||||
+ // Only show the item if Translations is supported on this hardware.
|
||||
+ !lazy.TranslationsParent.getIsTranslationsEngineSupported() ||
|
||||
+ // Do not show page translation on internal about: pages.
|
||||
+ isAboutPage ||
|
||||
+ // Do not show page translation for page contexts where it does not make sense.
|
||||
+ this.onTextInput ||
|
||||
+ this.isContentSelected ||
|
||||
+ this.onLink ||
|
||||
+ this.onImage ||
|
||||
+ this.onCanvas ||
|
||||
+ this.onVideo ||
|
||||
+ this.onAudio;
|
||||
+ }
|
||||
+
|
||||
/**
|
||||
* Opens the SelectTranslationsPanel singleton instance.
|
||||
*
|
||||
--
|
||||
2.47.3
|
||||
|
||||
@@ -1,173 +0,0 @@
|
||||
From 0eaea882ee730683f16d3e9bde8cc52a4ce8f4cc Mon Sep 17 00:00:00 2001
|
||||
From: LibreWolf Developers <noreply@librewolf.net>
|
||||
Date: Sun, 6 Sep 2026 10:11:42 +0100
|
||||
Subject: [PATCH 37/52] ui-patches/allow_cookies_for_site.patch
|
||||
|
||||
---
|
||||
browser/base/content/browser-siteIdentity.js | 32 +++++++++++++++++
|
||||
browser/base/content/browser-trustPanel.js | 35 +++++++++++++++++++
|
||||
.../content/identityPanel.inc.xhtml | 5 +++
|
||||
.../content/trustPanel.inc.xhtml | 7 ++++
|
||||
4 files changed, 79 insertions(+)
|
||||
|
||||
diff --git a/browser/base/content/browser-siteIdentity.js b/browser/base/content/browser-siteIdentity.js
|
||||
index 16b222280f85..2d0ba31d5ff8 100644
|
||||
--- a/browser/base/content/browser-siteIdentity.js
|
||||
+++ b/browser/base/content/browser-siteIdentity.js
|
||||
@@ -231,6 +231,9 @@ var gIdentityHandler = {
|
||||
"identity-popup-clear-sitedata-button": event => {
|
||||
this.clearSiteData(event);
|
||||
},
|
||||
+ "identity-popup-allow-sitedata-button": () => {
|
||||
+ this.toggleSiteData();
|
||||
+ },
|
||||
"identity-popup-remove-cert-exception": () => {
|
||||
this.removeCertException();
|
||||
},
|
||||
@@ -483,6 +486,33 @@ var gIdentityHandler = {
|
||||
event.stopPropagation();
|
||||
},
|
||||
|
||||
+ async refreshSiteData() {
|
||||
+ document.getElementById("identity-popup-allow-sitedata-toggle").toggleAttribute(
|
||||
+ "pressed",
|
||||
+ Services.perms.testExactPermissionFromPrincipal(
|
||||
+ gBrowser.contentPrincipal,
|
||||
+ "persist-data-on-shutdown"
|
||||
+ ) === Services.perms.ALLOW_ACTION
|
||||
+ );
|
||||
+ },
|
||||
+
|
||||
+ async toggleSiteData() {
|
||||
+ const pressed = document.getElementById("identity-popup-allow-sitedata-toggle").toggleAttribute(
|
||||
+ "pressed"
|
||||
+ );
|
||||
+
|
||||
+ if (pressed) {
|
||||
+ Services.perms.addFromPrincipal(
|
||||
+ gBrowser.contentPrincipal,
|
||||
+ "persist-data-on-shutdown",
|
||||
+ Services.perms.ALLOW_ACTION,
|
||||
+ Services.perms.EXPIRE_NEVER
|
||||
+ );
|
||||
+ } else {
|
||||
+ Services.perms.removeFromPrincipal(gBrowser.contentPrincipal, "persist-data-on-shutdown");
|
||||
+ }
|
||||
+ },
|
||||
+
|
||||
/**
|
||||
* Handler for mouseclicks on the "More Information" button in the
|
||||
* "identity-popup" panel.
|
||||
@@ -1234,6 +1264,8 @@ var gIdentityHandler = {
|
||||
this._identityPopupContentOwner.textContent = owner;
|
||||
this._identityPopupContentSupp.textContent = supplemental;
|
||||
this._identityPopupContentVerif.textContent = verifier;
|
||||
+
|
||||
+ this.refreshSiteData();
|
||||
},
|
||||
|
||||
setURI(uri) {
|
||||
diff --git a/browser/base/content/browser-trustPanel.js b/browser/base/content/browser-trustPanel.js
|
||||
index a749cead9842..f607b960c9e5 100644
|
||||
--- a/browser/base/content/browser-trustPanel.js
|
||||
+++ b/browser/base/content/browser-trustPanel.js
|
||||
@@ -341,6 +341,9 @@ class TrustPanel {
|
||||
document
|
||||
.getElementById("trustpanel-toggle")
|
||||
.addEventListener("click", () => this.#toggleTrackingProtection());
|
||||
+ document
|
||||
+ .getElementById("identity-popup-allow-sitedata-button")
|
||||
+ .addEventListener("click", () => this.#toggleCookiesAllowed());
|
||||
document
|
||||
.getElementById("identity-popup-remove-cert-exception")
|
||||
.addEventListener("click", () => this.#removeCertException());
|
||||
@@ -353,6 +356,30 @@ class TrustPanel {
|
||||
}
|
||||
}
|
||||
|
||||
+ #toggleCookiesAllowed() {
|
||||
+ const pressed = document.getElementById("identity-popup-allow-sitedata-toggle").toggleAttribute(
|
||||
+ "pressed"
|
||||
+ );
|
||||
+
|
||||
+ if (pressed) {
|
||||
+ Services.perms.addFromPrincipal(
|
||||
+ gBrowser.contentPrincipal,
|
||||
+ "persist-data-on-shutdown",
|
||||
+ Services.perms.ALLOW_ACTION,
|
||||
+ Services.perms.EXPIRE_NEVER
|
||||
+ );
|
||||
+ } else {
|
||||
+ Services.perms.removeFromPrincipal(gBrowser.contentPrincipal, "persist-data-on-shutdown");
|
||||
+ }
|
||||
+ }
|
||||
+
|
||||
+ #areCookiesAllowed() {
|
||||
+ return Services.perms.testExactPermissionFromPrincipal(
|
||||
+ gBrowser.contentPrincipal,
|
||||
+ "persist-data-on-shutdown"
|
||||
+ ) === Services.perms.ALLOW_ACTION;
|
||||
+ }
|
||||
+
|
||||
async showPopup(opts = {}) {
|
||||
this.#initializePopup();
|
||||
|
||||
@@ -742,6 +769,9 @@ class TrustPanel {
|
||||
{ host: this.#displayHost }
|
||||
);
|
||||
|
||||
+ let toggleCookies = document.getElementById("identity-popup-allow-sitedata-toggle");
|
||||
+ toggleCookies.toggleAttribute("pressed", this.#areCookiesAllowed());
|
||||
+
|
||||
let hostElement = document.getElementById("trustpanel-popup-host");
|
||||
hostElement.setAttribute("value", this.#displayHost);
|
||||
hostElement.setAttribute("tooltiptext", this.#displayHost);
|
||||
@@ -781,6 +811,11 @@ class TrustPanel {
|
||||
"hidden",
|
||||
isPrivate
|
||||
);
|
||||
+ this.#updateAttribute(
|
||||
+ document.getElementById("trustpanel-allow-cookies-footer"),
|
||||
+ "hidden",
|
||||
+ isPrivate
|
||||
+ );
|
||||
if (!isPrivate) {
|
||||
try {
|
||||
let baseDomain = SiteDataManager.getBaseDomainFromHost(this.#uri.host);
|
||||
diff --git a/browser/components/controlcenter/content/identityPanel.inc.xhtml b/browser/components/controlcenter/content/identityPanel.inc.xhtml
|
||||
index d7f214f471f7..088662a045a3 100644
|
||||
--- a/browser/components/controlcenter/content/identityPanel.inc.xhtml
|
||||
+++ b/browser/components/controlcenter/content/identityPanel.inc.xhtml
|
||||
@@ -98,6 +98,11 @@
|
||||
<toolbarbutton id="identity-popup-clear-sitedata-button"
|
||||
data-l10n-id="identity-clear-site-data"
|
||||
class="subviewbutton"/>
|
||||
+ <toolbarbutton id="identity-popup-allow-sitedata-button"
|
||||
+ class="subviewbutton">
|
||||
+ <label data-l10n-id="identity-allow-site-data" flex="1"></label>
|
||||
+ <html:moz-toggle id="identity-popup-allow-sitedata-toggle" style="pointer-events: none;"></html:moz-toggle>
|
||||
+ </toolbarbutton>
|
||||
</vbox>
|
||||
</panelview>
|
||||
|
||||
diff --git a/browser/components/controlcenter/content/trustPanel.inc.xhtml b/browser/components/controlcenter/content/trustPanel.inc.xhtml
|
||||
index 65f8089b0a5f..51794158610c 100644
|
||||
--- a/browser/components/controlcenter/content/trustPanel.inc.xhtml
|
||||
+++ b/browser/components/controlcenter/content/trustPanel.inc.xhtml
|
||||
@@ -75,6 +75,13 @@
|
||||
<toolbarbutton data-l10n-id="trustpanel-clear-cookies-button" id="trustpanel-clear-cookies-button" class="subviewbutton subviewbutton-nav"></toolbarbutton>
|
||||
</vbox>
|
||||
|
||||
+ <vbox id="trustpanel-allow-cookies-footer">
|
||||
+ <toolbarbutton id="identity-popup-allow-sitedata-button" class="subviewbutton">
|
||||
+ <label data-l10n-id="identity-allow-site-data" flex="1"></label>
|
||||
+ <html:moz-toggle id="identity-popup-allow-sitedata-toggle" style="pointer-events: none;"></html:moz-toggle>
|
||||
+ </toolbarbutton>
|
||||
+ </vbox>
|
||||
+
|
||||
<toolbarseparator></toolbarseparator>
|
||||
<toolbarbutton id="trustpanel-privacy-link" data-l10n-id="trustpanel-privacy-link" class="subviewbutton"></toolbarbutton>
|
||||
</vbox>
|
||||
--
|
||||
2.47.3
|
||||
|
||||
@@ -1,28 +0,0 @@
|
||||
From d908628306c93f7cc9cc3bce321d156099efdf0a Mon Sep 17 00:00:00 2001
|
||||
From: LibreWolf Developers <noreply@librewolf.net>
|
||||
Date: Sun, 6 Sep 2026 10:11:45 +0100
|
||||
Subject: [PATCH 38/52] ui-patches/home-preferences.patch
|
||||
|
||||
---
|
||||
browser/themes/shared/preferences/preferences.css | 5 +++++
|
||||
1 file changed, 5 insertions(+)
|
||||
|
||||
diff --git a/browser/themes/shared/preferences/preferences.css b/browser/themes/shared/preferences/preferences.css
|
||||
index 7116d47f1004..a7e7a4fd1dfd 100644
|
||||
--- a/browser/themes/shared/preferences/preferences.css
|
||||
+++ b/browser/themes/shared/preferences/preferences.css
|
||||
@@ -1615,6 +1615,11 @@ setting-pane[onsearchpane] {
|
||||
}
|
||||
}
|
||||
|
||||
+#support-firefox,
|
||||
+.mission-message {
|
||||
+ display: none;
|
||||
+}
|
||||
+
|
||||
#dohProviderSelect {
|
||||
--select-max-width: 235px;
|
||||
}
|
||||
--
|
||||
2.47.3
|
||||
|
||||
@@ -1,62 +0,0 @@
|
||||
From 1af7edf004da29ad5291089cdac62f3d9a9411b0 Mon Sep 17 00:00:00 2001
|
||||
From: LibreWolf Developers <noreply@librewolf.net>
|
||||
Date: Sun, 6 Sep 2026 10:11:51 +0100
|
||||
Subject: [PATCH 39/52] ui-patches/lw-logo-devtools.patch
|
||||
|
||||
---
|
||||
devtools/client/aboutdebugging/src/actions/runtimes.js | 4 +---
|
||||
devtools/client/jar.mn | 1 +
|
||||
.../themes/images/aboutdebugging-firefox-librewolf.svg | 1 +
|
||||
.../client/themes/images/aboutdebugging-firefox-logo.svg | 7 +------
|
||||
4 files changed, 4 insertions(+), 9 deletions(-)
|
||||
create mode 100644 devtools/client/themes/images/aboutdebugging-firefox-librewolf.svg
|
||||
|
||||
diff --git a/devtools/client/aboutdebugging/src/actions/runtimes.js b/devtools/client/aboutdebugging/src/actions/runtimes.js
|
||||
index 52148f80b280..74eac40db721 100644
|
||||
--- a/devtools/client/aboutdebugging/src/actions/runtimes.js
|
||||
+++ b/devtools/client/aboutdebugging/src/actions/runtimes.js
|
||||
@@ -71,9 +71,7 @@ async function getRuntimeIcon(runtime, channel) {
|
||||
}
|
||||
}
|
||||
|
||||
- return channel === "release" || channel === "beta" || channel === "aurora"
|
||||
- ? `chrome://devtools/skin/images/aboutdebugging-firefox-${channel}.svg`
|
||||
- : "chrome://devtools/skin/images/aboutdebugging-firefox-nightly.svg";
|
||||
+ return "chrome://devtools/skin/images/aboutdebugging-firefox-librewolf.svg";
|
||||
}
|
||||
|
||||
function onRemoteDevToolsClientClosed() {
|
||||
diff --git a/devtools/client/jar.mn b/devtools/client/jar.mn
|
||||
index 4e0494c098b3..501d8b24cd8d 100644
|
||||
--- a/devtools/client/jar.mn
|
||||
+++ b/devtools/client/jar.mn
|
||||
@@ -384,6 +384,7 @@ devtools.jar:
|
||||
skin/images/aboutdebugging-firefox-logo.svg (themes/images/aboutdebugging-firefox-logo.svg)
|
||||
skin/images/aboutdebugging-firefox-nightly.svg (themes/images/aboutdebugging-firefox-nightly.svg)
|
||||
skin/images/aboutdebugging-firefox-release.svg (themes/images/aboutdebugging-firefox-release.svg)
|
||||
+ skin/images/aboutdebugging-firefox-librewolf.svg (themes/images/aboutdebugging-firefox-librewolf.svg)
|
||||
skin/images/aboutdebugging-globe-icon.svg (themes/images/aboutdebugging-globe-icon.svg)
|
||||
skin/images/aboutdebugging-information.svg (themes/images/aboutdebugging-information.svg)
|
||||
skin/images/aboutdebugging-process-icon.svg (themes/images/aboutdebugging-process-icon.svg)
|
||||
diff --git a/devtools/client/themes/images/aboutdebugging-firefox-librewolf.svg b/devtools/client/themes/images/aboutdebugging-firefox-librewolf.svg
|
||||
new file mode 100644
|
||||
index 000000000000..386c02a5fd57
|
||||
--- /dev/null
|
||||
+++ b/devtools/client/themes/images/aboutdebugging-firefox-librewolf.svg
|
||||
@@ -0,0 +1 @@
|
||||
+<svg xmlns="http://www.w3.org/2000/svg" width="256" height="256" viewBox="0 0 67.733 67.733"><g transform="translate(-42.107 -153.898)"><circle cx="75.973" cy="187.765" r="33.867" fill="#00acff"/><path d="M72.544 214.677c-4.744-.609-9.282-2.5-13.242-5.518-1.292-.985-3.715-3.424-4.773-4.804-2.963-3.865-4.805-8.25-5.412-12.887-.26-1.984-.26-5.633.003-7.447 1.308-9.068 7.014-16.846 15.209-20.73 3.811-1.806 7.3-2.57 11.73-2.57 7.166 0 13.527 2.567 18.681 7.54 2.483 2.396 4.148 4.668 5.574 7.607 1.929 3.975 2.71 7.433 2.71 11.995 0 6.006-1.735 11.244-5.337 16.117-1.07 1.448-3.162 3.647-4.55 4.785-3.806 3.12-8.658 5.232-13.473 5.863-1.663.218-5.593.245-7.12.05zm10.041-4.865c2.898-.914 5.26-2.142 7.54-3.92 1.213-.946 3.309-3.062 4.188-4.227 2.383-3.162 4.004-7.122 4.482-10.946.23-1.842.096-5.738-.255-7.43-.93-4.48-2.932-8.265-6.086-11.503-1.966-2.02-3.757-3.35-6.06-4.505-3.495-1.752-6.49-2.46-10.424-2.464-4.164-.004-7.815.95-11.429 2.987-3.29 1.855-6.69 5.26-8.553 8.563-1.372 2.433-2.376 5.32-2.767 7.96-.257 1.73-.262 5.164-.01 6.82.504 3.316 1.76 6.592 3.584 9.34.995 1.5.964 1.484 1.842.981 1.57-.898 1.98-1.333 2.836-3.01 1-1.96 2.07-3.673 3.037-4.863 1.116-1.373 1.27-1.618 1.83-2.915.28-.652.786-1.61 1.122-2.13l.611-.942-.79-.777c-1.05-1.032-1.923-2.201-2.087-2.796-.168-.608.03-.947.818-1.402.798-.461 1.368-.593 3.5-.812 1.037-.107 2.163-.302 2.518-.437.353-.134 1.408-.708 2.344-1.276 2.703-1.639 2.932-1.723 4.552-1.688 1.369.03 1.371.029 2.183-.462 1.7-1.028 4.143-2.883 7.357-5.587.616-.519 1.21-.926 1.32-.905.454.088 1.289 2.137 1.416 3.476.077.812-.08 1.615-.562 2.873-.132.343-.192.67-.135.727.138.137.61-.453.61-.763 0-.394.262-.439.617-.106.258.242.481.312 1 .312.567 0 .708.052.93.348.375.5.463 1.866.175 2.732-.28.842-1.125 1.813-1.892 2.173-.686.323-2.075 1.68-2.726 2.662a31.64 31.64 0 00-1.037 1.742c-.321.582-.86 1.461-1.198 1.954-.664.97-1.233 2.323-1.782 4.238-.323 1.126-.35 1.419-.363 3.928-.016 3.032-.173 3.776-.993 4.71-.931 1.06-1.862 3.391-1.94 4.86-.05.928-.192 1.832-.395 2.502-.09.295.077.291 1.072-.022z" fill="#fff"/><path d="M77.062 181.654l1.222-1.565 1.966-.275-1.222 1.564z" fill="#00acff"/></g></svg>
|
||||
diff --git a/devtools/client/themes/images/aboutdebugging-firefox-logo.svg b/devtools/client/themes/images/aboutdebugging-firefox-logo.svg
|
||||
index fe4d116b1660..fbbc08c9af6b 100644
|
||||
--- a/devtools/client/themes/images/aboutdebugging-firefox-logo.svg
|
||||
+++ b/devtools/client/themes/images/aboutdebugging-firefox-logo.svg
|
||||
@@ -1,6 +1 @@
|
||||
-<!-- This Source Code Form is subject to the terms of the Mozilla Public
|
||||
- - License, v. 2.0. If a copy of the MPL was not distributed with this
|
||||
- - file, You can obtain one at http://mozilla.org/MPL/2.0/. -->
|
||||
-<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512">
|
||||
- <path fill="context-fill #20123a" d="M190.368 150.591c0.157 0.009 0.079 0.003 0 0zm-57.874-28.933c0.158 0.008 0.079 0.003 0 0zm346.228 44.674c-10.445-25.123-31.6-52.248-48.211-60.82 13.52 26.5 21.345 53.093 24.335 72.935 0 0.04 0.015 0.136 0.047 0.4-27.175-67.732-73.254-95.047-110.886-154.512-1.9-3.008-3.805-6.022-5.661-9.2a73.237 73.237 0 0 1-2.646-4.972 43.757 43.757 0 0 1-3.585-9.5 0.625 0.625 0 0 0-0.546-0.644 0.8 0.8 0 0 0-0.451 0c-0.033 0.011-0.084 0.051-0.119 0.065-0.053 0.02-0.12 0.069-0.176 0.095 0.026-0.036 0.083-0.117 0.1-0.135-53.437 31.3-75.587 86.093-81.282 120.97a128.057 128.057 0 0 0-47.624 12.153 6.144 6.144 0 0 0-3.041 7.63 6.034 6.034 0 0 0 8.192 3.525 116.175 116.175 0 0 1 41.481-10.826c0.468-0.033 0.937-0.062 1.405-0.1a117.624 117.624 0 0 1 5.932-0.211 120.831 120.831 0 0 1 34.491 4.777c0.654 0.192 1.295 0.414 1.946 0.616a120.15 120.15 0 0 1 5.539 1.842 121.852 121.852 0 0 1 3.992 1.564c1.074 0.434 2.148 0.868 3.206 1.331a118.453 118.453 0 0 1 4.9 2.307c0.743 0.368 1.485 0.735 2.217 1.117a120.535 120.535 0 0 1 4.675 2.587 107.785 107.785 0 0 1 2.952 1.776 123.018 123.018 0 0 1 42.028 43.477c-12.833-9.015-35.81-17.918-57.947-14.068 86.441 43.214 63.234 192.027-56.545 186.408a106.7 106.7 0 0 1-31.271-6.031 132.461 132.461 0 0 1-7.059-2.886c-1.356-0.618-2.711-1.243-4.051-1.935-29.349-15.168-53.583-43.833-56.611-78.643 0 0 11.093-41.335 79.433-41.335 7.388 0 28.508-20.614 28.9-26.593-0.09-1.953-41.917-18.59-58.223-34.656-8.714-8.585-12.851-12.723-16.514-15.829a71.7 71.7 0 0 0-6.225-4.7 111.335 111.335 0 0 1-0.675-58.733c-24.687 11.242-43.89 29.011-57.849 44.7h-0.111c-9.528-12.067-8.855-51.873-8.312-60.184-0.114-0.516-7.107 3.63-8.024 4.254a175.21 175.21 0 0 0-23.486 20.12 210.5 210.5 0 0 0-22.443 26.913c0 0.012-0.007 0.025-0.011 0.037 0-0.012 0.007-0.025 0.011-0.038a202.837 202.837 0 0 0-32.244 72.81c-0.058 0.265-2.29 10.054-3.92 22.147a265.794 265.794 0 0 0-0.769 5.651c-0.558 3.636-0.992 7.6-1.42 13.767-0.019 0.239-0.031 0.474-0.048 0.712a591.152 591.152 0 0 0-0.481 7.995c0 0.411-0.025 0.816-0.025 1.227 0 132.709 107.6 240.29 240.324 240.29 118.865 0 217.559-86.288 236.882-199.63 0.407-3.075 0.732-6.168 1.092-9.27 4.777-41.21-0.53-84.525-15.588-120.747zm-164.068 72.1z" />
|
||||
-</svg>
|
||||
+<svg xmlns="http://www.w3.org/2000/svg" width="256" height="256" viewBox="0 0 67.733 67.733"><path d="M33.867 0A33.867 33.867 0 000 33.867a33.867 33.867 0 0033.867 33.866 33.867 33.867 0 0033.866-33.866A33.867 33.867 0 0033.867 0zm.086 6.822c7.166 0 13.526 2.568 18.68 7.54 2.484 2.397 4.149 4.669 5.575 7.608 1.928 3.975 2.71 7.432 2.71 11.995 0 6.006-1.735 11.244-5.337 16.117-1.07 1.448-3.162 3.647-4.55 4.785-3.807 3.12-8.659 5.231-13.473 5.863-1.664.218-5.594.245-7.121.049-4.744-.609-9.282-2.5-13.242-5.519-1.291-.984-3.715-3.423-4.773-4.803C9.46 46.592 7.618 42.206 7.01 37.57c-.26-1.985-.259-5.633.003-7.447 1.308-9.068 7.014-16.845 15.209-20.73 3.811-1.806 7.3-2.57 11.731-2.57zm-.089 4.097c-4.164-.004-7.815.95-11.43 2.987-3.289 1.855-6.69 5.26-8.553 8.563-1.371 2.433-2.375 5.32-2.767 7.96-.257 1.729-.262 5.164-.01 6.82.504 3.315 1.761 6.591 3.584 9.34.995 1.5.964 1.484 1.842.981 1.571-.898 1.981-1.334 2.837-3.01 1-1.96 2.07-3.673 3.037-4.863 1.116-1.374 1.269-1.618 1.829-2.915a17.5 17.5 0 011.123-2.13l.61-.942-.79-.777c-1.05-1.032-1.923-2.202-2.087-2.797-.168-.607.03-.946.82-1.402.796-.46 1.367-.593 3.498-.812 1.037-.106 2.163-.302 2.518-.436.353-.134 1.408-.709 2.344-1.276 2.703-1.639 2.932-1.724 4.553-1.688 1.368.03 1.37.029 2.182-.462 1.701-1.028 4.144-2.883 7.358-5.587.616-.519 1.21-.926 1.319-.905.454.088 1.29 2.136 1.416 3.476.077.812-.08 1.615-.562 2.872-.131.343-.192.67-.134.728.137.137.61-.453.61-.763 0-.394.261-.44.616-.106.259.242.482.311 1 .311.568 0 .708.053.93.348.375.501.463 1.867.176 2.733-.28.842-1.125 1.812-1.892 2.173-.686.322-2.076 1.68-2.726 2.662-.249.376-.716 1.16-1.037 1.742-.322.582-.861 1.461-1.199 1.954-.664.97-1.233 2.322-1.782 4.238-.322 1.125-.35 1.418-.363 3.928-.016 3.032-.173 3.776-.992 4.71-.932 1.06-1.862 3.391-1.94 4.86-.05.928-.193 1.832-.396 2.502-.089.294.078.29 1.073-.023 2.898-.913 5.26-2.14 7.54-3.92 1.213-.945 3.308-3.06 4.187-4.226 2.383-3.162 4.005-7.122 4.482-10.947.23-1.841.097-5.738-.254-7.429-.93-4.48-2.932-8.265-6.087-11.503-1.966-2.02-3.756-3.35-6.06-4.505-3.495-1.752-6.49-2.46-10.423-2.464zm4.279 14.997l-1.966.275-1.222 1.565 1.966-.276 1.222-1.564z" fill="context-fill #00acff"/></svg>
|
||||
--
|
||||
2.47.3
|
||||
|
||||
@@ -1,97 +0,0 @@
|
||||
From 8801c367f1dba73a857bcca0df5693e0d538819f Mon Sep 17 00:00:00 2001
|
||||
From: LibreWolf Developers <noreply@librewolf.net>
|
||||
Date: Sun, 6 Sep 2026 10:11:57 +0100
|
||||
Subject: [PATCH 40/52] ui-patches/neterror.patch
|
||||
|
||||
---
|
||||
toolkit/content/errors/net-error-illustrations.mjs | 7 ++-----
|
||||
toolkit/content/net-error-card.mjs | 12 +++++++++---
|
||||
toolkit/themes/shared/aboutNetError.css | 2 +-
|
||||
toolkit/themes/shared/desktop-jar.inc.mn | 1 +
|
||||
toolkit/themes/shared/illustrations/warning.svg | 8 ++++++++
|
||||
5 files changed, 21 insertions(+), 9 deletions(-)
|
||||
create mode 100644 toolkit/themes/shared/illustrations/warning.svg
|
||||
|
||||
diff --git a/toolkit/content/errors/net-error-illustrations.mjs b/toolkit/content/errors/net-error-illustrations.mjs
|
||||
index d785e4381ad2..24e6026d94ae 100644
|
||||
--- a/toolkit/content/errors/net-error-illustrations.mjs
|
||||
+++ b/toolkit/content/errors/net-error-illustrations.mjs
|
||||
@@ -3,11 +3,8 @@
|
||||
* file, You can obtain one at http://mozilla.org/MPL/2.0/. */
|
||||
|
||||
export const NET_ERROR_ILLUSTRATIONS = {
|
||||
- noConnection: {
|
||||
- src: "chrome://global/skin/illustrations/no-connection.svg",
|
||||
- className: "no-connection",
|
||||
- },
|
||||
+ noConnection: {},
|
||||
securityError: {
|
||||
- src: "chrome://global/skin/illustrations/security-error.svg",
|
||||
+ src: "chrome://global/skin/illustrations/warning.svg",
|
||||
},
|
||||
};
|
||||
diff --git a/toolkit/content/net-error-card.mjs b/toolkit/content/net-error-card.mjs
|
||||
index 8f51084ea10e..e964c4fd6862 100644
|
||||
--- a/toolkit/content/net-error-card.mjs
|
||||
+++ b/toolkit/content/net-error-card.mjs
|
||||
@@ -1098,9 +1098,15 @@ export class NetErrorCard extends MozLitElement {
|
||||
aria-labelledby="error-title"
|
||||
aria-describedby="error-intro whatCanYouDo"
|
||||
>
|
||||
- <div class="img-container">
|
||||
- <img src=${src} class=${ifDefined(className)} alt=${alt} />
|
||||
- </div>
|
||||
+ ${src &&
|
||||
+ html`
|
||||
+ <div class="img-container">
|
||||
+ <img
|
||||
+ src=${src}
|
||||
+ ${alt && `data-l10n-id=${alt} data-l10n-attrs="alt"`}
|
||||
+ />
|
||||
+ </div>
|
||||
+ `}
|
||||
<div class="container">
|
||||
${this.showCustomNetErrorCard
|
||||
? html`${this.customNetErrorContainerTemplate()}`
|
||||
diff --git a/toolkit/themes/shared/aboutNetError.css b/toolkit/themes/shared/aboutNetError.css
|
||||
index eac2c03a57e1..e56fb33b1b0b 100644
|
||||
--- a/toolkit/themes/shared/aboutNetError.css
|
||||
+++ b/toolkit/themes/shared/aboutNetError.css
|
||||
@@ -251,7 +251,7 @@ button:disabled {
|
||||
}
|
||||
|
||||
.img-container > img {
|
||||
- width: 8.75em;
|
||||
+ width: 3.5em;
|
||||
margin-block-start: 2em;
|
||||
margin-inline-end: 2.5em;
|
||||
|
||||
diff --git a/toolkit/themes/shared/desktop-jar.inc.mn b/toolkit/themes/shared/desktop-jar.inc.mn
|
||||
index a2b1b894f4e4..836d47d1b02b 100644
|
||||
--- a/toolkit/themes/shared/desktop-jar.inc.mn
|
||||
+++ b/toolkit/themes/shared/desktop-jar.inc.mn
|
||||
@@ -153,6 +153,7 @@
|
||||
skin/classic/global/illustrations/shield-check.svg (../../shared/illustrations/shield-check.svg)
|
||||
skin/classic/global/illustrations/shield-alert.svg (../../shared/illustrations/shield-alert.svg)
|
||||
skin/classic/global/illustrations/no-connection.svg (../../shared/illustrations/no-connection.svg)
|
||||
+ skin/classic/global/illustrations/warning.svg (../../shared/illustrations/warning.svg)
|
||||
skin/classic/global/illustrations/kit-concerned.svg (../../shared/illustrations/kit-concerned.svg)
|
||||
skin/classic/global/illustrations/kit-confetti.svg (../../shared/illustrations/kit-confetti.svg)
|
||||
skin/classic/global/illustrations/kit-happy.svg (../../shared/illustrations/kit-happy.svg)
|
||||
diff --git a/toolkit/themes/shared/illustrations/warning.svg b/toolkit/themes/shared/illustrations/warning.svg
|
||||
new file mode 100644
|
||||
index 000000000000..e93301c81087
|
||||
--- /dev/null
|
||||
+++ b/toolkit/themes/shared/illustrations/warning.svg
|
||||
@@ -0,0 +1,8 @@
|
||||
+<!-- This Source Code Form is subject to the terms of the Mozilla Public
|
||||
+ - License, v. 2.0. If a copy of the MPL was not distributed with this
|
||||
+ - file, You can obtain one at http://mozilla.org/MPL/2.0/. -->
|
||||
+<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 16 16" width="16" height="16"
|
||||
+ fill="context-fill light-dark(#ffa436, #ffbd4f)" fill-opacity="context-fill-opacity">
|
||||
+ <path
|
||||
+ d="m14.875 12.037-5.497-10C8.997 1.346 8.311 1 7.625 1s-1.372.346-1.752 1.037l-5.497 10C-.358 13.37.607 15 2.128 15l10.995 0c1.52 0 2.485-1.63 1.752-2.963zM8.25 11.75 8 12l-.75 0-.25-.25L7 11l.25-.25.75 0 .25.25 0 .75zm0-2.688a.625.625 0 0 1-1.25 0l0-3.437a.625.625 0 0 1 1.25 0l0 3.437z" />
|
||||
+</svg>
|
||||
--
|
||||
2.47.3
|
||||
|
||||
@@ -1,34 +0,0 @@
|
||||
From 0585672972a84f7e454028b54a7001283f394699 Mon Sep 17 00:00:00 2001
|
||||
From: LibreWolf Developers <noreply@librewolf.net>
|
||||
Date: Sun, 6 Sep 2026 10:12:00 +0100
|
||||
Subject: [PATCH 41/52] ui-patches/pref-naming.patch
|
||||
|
||||
---
|
||||
browser/locales/en-US/browser/preferences/preferences.ftl | 4 ++--
|
||||
1 file changed, 2 insertions(+), 2 deletions(-)
|
||||
|
||||
diff --git a/browser/locales/en-US/browser/preferences/preferences.ftl b/browser/locales/en-US/browser/preferences/preferences.ftl
|
||||
index 8227dc4b8437..d72fdb67fe31 100644
|
||||
--- a/browser/locales/en-US/browser/preferences/preferences.ftl
|
||||
+++ b/browser/locales/en-US/browser/preferences/preferences.ftl
|
||||
@@ -744,7 +744,7 @@ play-drm-content =
|
||||
.label = Play DRM-controlled content
|
||||
.accesskey = P
|
||||
|
||||
-play-drm-content-learn-more = Learn more
|
||||
+play-drm-content-learn-more = Why we disable it
|
||||
|
||||
## About Firefox
|
||||
|
||||
@@ -765,7 +765,7 @@ update-application-updates-managed-by-os =
|
||||
|
||||
# Variables:
|
||||
# $version (string) - Firefox version
|
||||
-update-application-version = Version { $version } <a data-l10n-name="learn-more">What’s new</a>
|
||||
+update-application-version = Version { $version } <a data-l10n-name="learn-more">Visit the repositories</a>
|
||||
|
||||
update-history-2 =
|
||||
.label = Show update history
|
||||
--
|
||||
2.47.3
|
||||
|
||||
@@ -1,318 +0,0 @@
|
||||
From df1c4c1b1e969881f543f2609a3bdf9916cee46b Mon Sep 17 00:00:00 2001
|
||||
From: LibreWolf Developers <noreply@librewolf.net>
|
||||
Date: Sun, 6 Sep 2026 10:12:08 +0100
|
||||
Subject: [PATCH 42/52] ui-patches/privacy-preferences.patch
|
||||
|
||||
---
|
||||
.../preferences/config/permissions-data.mjs | 108 ------------------
|
||||
.../components/preferences/config/privacy.mjs | 28 -----
|
||||
browser/components/preferences/preferences.js | 2 +-
|
||||
.../components/preferences/privacy.inc.xhtml | 34 +++---
|
||||
browser/components/preferences/privacy.js | 2 -
|
||||
.../en-US/browser/preferences/preferences.ftl | 2 -
|
||||
browser/themes/shared/preferences/privacy.css | 7 +-
|
||||
7 files changed, 21 insertions(+), 162 deletions(-)
|
||||
|
||||
diff --git a/browser/components/preferences/config/permissions-data.mjs b/browser/components/preferences/config/permissions-data.mjs
|
||||
index e9f9ae828c2c..962160b64225 100644
|
||||
--- a/browser/components/preferences/config/permissions-data.mjs
|
||||
+++ b/browser/components/preferences/config/permissions-data.mjs
|
||||
@@ -728,112 +728,4 @@ SettingGroupManager.registerGroups({
|
||||
},
|
||||
],
|
||||
},
|
||||
- dataCollection: {
|
||||
- items: [
|
||||
- {
|
||||
- id: "dataCollectionCategory",
|
||||
- l10nId: "data-collection",
|
||||
- control: "moz-fieldset",
|
||||
- iconSrc: "chrome://global/skin/icons/trending.svg",
|
||||
- controlAttrs: {
|
||||
- headinglevel: 2,
|
||||
- "data-l10n-attrs": "searchkeywords",
|
||||
- },
|
||||
- items: [
|
||||
- {
|
||||
- id: "dataCollectionLink",
|
||||
- control: "a",
|
||||
- l10nId: "data-collection-link",
|
||||
- slot: "support-link",
|
||||
- controlAttrs: {
|
||||
- id: "dataCollectionPrivacyNoticeLink",
|
||||
- target: "_blank",
|
||||
- },
|
||||
- },
|
||||
- {
|
||||
- id: "preferencesPrivacyProfiles",
|
||||
- control: "moz-message-bar",
|
||||
- l10nId: "data-collection-preferences-across-profiles",
|
||||
- controlAttrs: {
|
||||
- role: "status",
|
||||
- },
|
||||
- items: [
|
||||
- {
|
||||
- id: "privacyProfilesLink",
|
||||
- control: "a",
|
||||
- l10nId: "data-collection-profiles-link",
|
||||
- slot: "support-link",
|
||||
- controlAttrs: {
|
||||
- id: "dataCollectionViewProfiles",
|
||||
- target: "_blank",
|
||||
- href: "",
|
||||
- },
|
||||
- },
|
||||
- ],
|
||||
- },
|
||||
- {
|
||||
- id: "telemetryContainer",
|
||||
- control: "moz-message-bar",
|
||||
- l10nId: "data-collection-health-report-telemetry-disabled",
|
||||
- supportPage: "telemetry-clientid",
|
||||
- controlAttrs: {
|
||||
- role: "status",
|
||||
- },
|
||||
- },
|
||||
- {
|
||||
- id: "backup-multi-profile-warning-message-bar",
|
||||
- control: "moz-message-bar",
|
||||
- l10nId: "backup-multi-profile-warning-message",
|
||||
- controlAttrs: {
|
||||
- dismissable: true,
|
||||
- },
|
||||
- },
|
||||
- {
|
||||
- id: "submitHealthReportBox",
|
||||
- supportPage: "technical-and-interaction-data",
|
||||
- subcategory: "reports",
|
||||
- items: [
|
||||
- {
|
||||
- id: "addonRecommendationEnabled",
|
||||
- l10nId: "addon-recommendations3",
|
||||
- supportPage: "personalized-addons",
|
||||
- },
|
||||
- {
|
||||
- id: "optOutStudiesEnabled",
|
||||
- l10nId: "data-collection-run-studies",
|
||||
- items: [
|
||||
- {
|
||||
- id: "viewShieldStudies",
|
||||
- control: "moz-box-link",
|
||||
- l10nId: "data-collection-studies-link",
|
||||
- controlAttrs: {
|
||||
- href: "about:studies",
|
||||
- },
|
||||
- },
|
||||
- ],
|
||||
- },
|
||||
- ],
|
||||
- },
|
||||
-
|
||||
- {
|
||||
- id: "enableNimbusRollouts",
|
||||
- l10nId: "nimbus-rollouts",
|
||||
- supportPage: "remote-improvements",
|
||||
- },
|
||||
- {
|
||||
- id: "submitUsagePingBox",
|
||||
- l10nId: "data-collection-usage-ping",
|
||||
- subcategory: "reports",
|
||||
- supportPage: "usage-ping-settings",
|
||||
- },
|
||||
- {
|
||||
- id: "automaticallySubmitCrashesBox",
|
||||
- l10nId: "data-collection-backlogged-crash-reports",
|
||||
- subcategory: "reports",
|
||||
- supportPage: "crash-reports",
|
||||
- },
|
||||
- ],
|
||||
- },
|
||||
- ],
|
||||
- },
|
||||
});
|
||||
diff --git a/browser/components/preferences/config/privacy.mjs b/browser/components/preferences/config/privacy.mjs
|
||||
index dccc0f1b2819..9d34147f5423 100644
|
||||
--- a/browser/components/preferences/config/privacy.mjs
|
||||
+++ b/browser/components/preferences/config/privacy.mjs
|
||||
@@ -890,34 +890,6 @@ SettingGroupManager.registerGroups({
|
||||
l10nId: "history-group",
|
||||
headingLevel: 2,
|
||||
items: [
|
||||
- {
|
||||
- id: "historyMode",
|
||||
- control: "moz-select",
|
||||
- options: [
|
||||
- {
|
||||
- value: "remember",
|
||||
- l10nId: "history-remember-option-all2",
|
||||
- },
|
||||
- { value: "dontremember", l10nId: "history-remember-option-never2" },
|
||||
- { value: "custom", l10nId: "history-remember-option-custom2" },
|
||||
- ],
|
||||
- controlAttrs: {
|
||||
- "search-l10n-ids": `
|
||||
- history-remember-description4,
|
||||
- history-dontremember-description4,
|
||||
- history-custom-description4,
|
||||
- history-private-browsing-permanent.label,
|
||||
- history-remember-browser-option.label,
|
||||
- history-remember-search-option.label,
|
||||
- history-clear-on-close-option.label,
|
||||
- history-clear-on-close-settings.label
|
||||
- `,
|
||||
- },
|
||||
- },
|
||||
- {
|
||||
- id: "privateBrowsingAutoStart",
|
||||
- l10nId: "history-private-browsing-permanent",
|
||||
- },
|
||||
{
|
||||
id: "rememberHistory",
|
||||
l10nId: "history-remember-browser-option",
|
||||
diff --git a/browser/components/preferences/preferences.js b/browser/components/preferences/preferences.js
|
||||
index 94612d8e28af..01f60127bbe9 100644
|
||||
--- a/browser/components/preferences/preferences.js
|
||||
+++ b/browser/components/preferences/preferences.js
|
||||
@@ -395,7 +395,7 @@ const CONFIG_PANES = Object.freeze({
|
||||
permissionsData: {
|
||||
l10nId: "permissions-data-section",
|
||||
iconSrc: "chrome://browser/skin/permissions.svg",
|
||||
- groupIds: ["permissions", "dataCollection"],
|
||||
+ groupIds: ["permissions"],
|
||||
module: "chrome://browser/content/preferences/config/permissions-data.mjs",
|
||||
visible: () => srdSectionEnabled("permissionsData"),
|
||||
},
|
||||
diff --git a/browser/components/preferences/privacy.inc.xhtml b/browser/components/preferences/privacy.inc.xhtml
|
||||
index 78e2e934cf33..052afa00e06c 100644
|
||||
--- a/browser/components/preferences/privacy.inc.xhtml
|
||||
+++ b/browser/components/preferences/privacy.inc.xhtml
|
||||
@@ -50,20 +50,6 @@
|
||||
permissions-exceptions-manage-etp-desc,
|
||||
"/>
|
||||
</hbox>
|
||||
- <hbox id="rfpIncompatibilityWarning" class="info-box-container" hidden="true">
|
||||
- <vbox class="info-icon-container">
|
||||
- <html:img class="info-icon"></html:img>
|
||||
- </vbox>
|
||||
- <vbox flex="1">
|
||||
- <description>
|
||||
- <html:span data-l10n-id="content-blocking-rfp-incompatibility-warning"/>
|
||||
- <html:a is="moz-support-link"
|
||||
- class="learnMore"
|
||||
- support-page="resist-fingerprinting"
|
||||
- />
|
||||
- </description>
|
||||
- </vbox>
|
||||
- </hbox>
|
||||
<hbox id="fpiIncompatibilityWarning" class="info-box-container" hidden="true">
|
||||
<vbox class="info-icon-container">
|
||||
<html:img class="info-icon"></html:img>
|
||||
@@ -78,7 +64,7 @@
|
||||
<radiogroup id="contentBlockingCategoryRadio"
|
||||
preference="browser.contentblocking.category"
|
||||
aria-labelledby="trackingProtectionMenuDesc">
|
||||
- <vbox id="contentBlockingOptionStandard" class="privacy-detailedoption info-box-container">
|
||||
+ <vbox id="contentBlockingOptionStandard" class="privacy-detailedoption info-box-container" hidden="true">
|
||||
<hbox>
|
||||
<radio id="standardRadio"
|
||||
value="standard"
|
||||
@@ -243,7 +229,7 @@
|
||||
is="highlightable-button"
|
||||
data-l10n-id="content-blocking-reload-tabs-button"/>
|
||||
</html:div>
|
||||
- <vbox class="content-blocking-warning info-box-container">
|
||||
+ <vbox class="content-blocking-warning info-box-container" hidden="true">
|
||||
<hbox>
|
||||
<image class="content-blocking-warning-image"/>
|
||||
<label class="content-blocking-warning-title" data-l10n-id="content-blocking-warning-title-2"/>
|
||||
@@ -259,7 +245,7 @@
|
||||
</vbox>
|
||||
</vbox>
|
||||
</vbox>
|
||||
- <vbox id="contentBlockingOptionCustom" class="privacy-detailedoption info-box-container">
|
||||
+ <vbox id="contentBlockingOptionCustom" class="privacy-detailedoption info-box-container" hidden="true">
|
||||
<hbox>
|
||||
<radio id="customRadio"
|
||||
value="custom"
|
||||
@@ -392,6 +378,20 @@
|
||||
</vbox>
|
||||
</radiogroup>
|
||||
</vbox>
|
||||
+ <hbox id="rfpIncompatibilityWarning" class="info-box-container" hidden="true">
|
||||
+ <vbox class="info-icon-container">
|
||||
+ <html:img class="info-icon"></html:img>
|
||||
+ </vbox>
|
||||
+ <vbox flex="1">
|
||||
+ <description>
|
||||
+ <html:span data-l10n-id="content-blocking-rfp-incompatibility-warning"/>
|
||||
+ <html:a is="moz-support-link"
|
||||
+ class="learnMore"
|
||||
+ support-page="resist-fingerprinting"
|
||||
+ />
|
||||
+ </description>
|
||||
+ </vbox>
|
||||
+ </hbox>
|
||||
</vbox>
|
||||
</groupbox>
|
||||
<html:setting-group id="nonTechnicalPrivacyGroup" groupid="nonTechnicalPrivacy" data-category="panePrivacy" hidden="true" data-srd-groupid="nonTechnicalPrivacy2"/>
|
||||
diff --git a/browser/components/preferences/privacy.js b/browser/components/preferences/privacy.js
|
||||
index a78085493646..5400217b0fc3 100644
|
||||
--- a/browser/components/preferences/privacy.js
|
||||
+++ b/browser/components/preferences/privacy.js
|
||||
@@ -618,7 +618,6 @@ var gPrivacyPane = {
|
||||
initSettingGroup("securityPrivacyStatus");
|
||||
initSettingGroup("securityPrivacyWarnings");
|
||||
initSettingGroup("httpsOnly");
|
||||
- initSettingGroup("browsingProtection");
|
||||
initSettingGroup("cookiesAndSiteData");
|
||||
initSettingGroup("cookiesAndSiteData2");
|
||||
initSettingGroup("certificates");
|
||||
@@ -626,7 +625,6 @@ var gPrivacyPane = {
|
||||
initSettingGroup("history");
|
||||
initSettingGroup("history2");
|
||||
initSettingGroup("permissions");
|
||||
- initSettingGroup("dataCollection");
|
||||
initSettingGroup("privacyPanel");
|
||||
initSettingGroup("dnsOverHttps");
|
||||
initSettingGroup("dnsOverHttpsAdvanced");
|
||||
diff --git a/browser/locales/en-US/browser/preferences/preferences.ftl b/browser/locales/en-US/browser/preferences/preferences.ftl
|
||||
index d72fdb67fe31..9590dd1d08c6 100644
|
||||
--- a/browser/locales/en-US/browser/preferences/preferences.ftl
|
||||
+++ b/browser/locales/en-US/browser/preferences/preferences.ftl
|
||||
@@ -1934,8 +1934,6 @@ sitedata-cookies-exceptions3 =
|
||||
|
||||
content-blocking-enhanced-tracking-protection = Enhanced Tracking Protection
|
||||
|
||||
-content-blocking-section-top-level-description = Trackers follow you around online to collect information about your browsing habits and interests. { -brand-short-name } blocks many of these trackers and other malicious scripts.
|
||||
-
|
||||
content-blocking-learn-more = Learn more
|
||||
|
||||
content-blocking-fpi-incompatibility-warning = You are using First Party Isolation (FPI), which overrides some of { -brand-short-name }’s cookie settings.
|
||||
diff --git a/browser/themes/shared/preferences/privacy.css b/browser/themes/shared/preferences/privacy.css
|
||||
index cbe70bc6455d..85f340cee183 100644
|
||||
--- a/browser/themes/shared/preferences/privacy.css
|
||||
+++ b/browser/themes/shared/preferences/privacy.css
|
||||
@@ -233,7 +233,7 @@
|
||||
}
|
||||
|
||||
.extra-information-label {
|
||||
- margin-top: 18px;
|
||||
+ margin-top: 5px;
|
||||
}
|
||||
|
||||
/* Apply display: block to the containers of all the category information, as
|
||||
@@ -269,9 +269,8 @@
|
||||
}
|
||||
|
||||
.content-blocking-extra-blocking-desc {
|
||||
- margin-inline-start: 0.5em;
|
||||
- position: relative;
|
||||
- top: 0.65em;
|
||||
+ margin-top: 1em;
|
||||
+ margin-bottom: 0.5em;
|
||||
}
|
||||
|
||||
.content-blocking-label,
|
||||
--
|
||||
2.47.3
|
||||
|
||||
@@ -1,91 +0,0 @@
|
||||
From 1fe59d97e86904f7bf983497a5a18127d3ed8ce1 Mon Sep 17 00:00:00 2001
|
||||
From: LibreWolf Developers <noreply@librewolf.net>
|
||||
Date: Sun, 6 Sep 2026 10:12:12 +0100
|
||||
Subject: [PATCH 43/52] ui-patches/remove-cfrprefs.patch
|
||||
|
||||
---
|
||||
.../preferences/config/tabs-browsing.mjs | 41 -------------------
|
||||
browser/components/preferences/preferences.js | 1 -
|
||||
2 files changed, 42 deletions(-)
|
||||
|
||||
diff --git a/browser/components/preferences/config/tabs-browsing.mjs b/browser/components/preferences/config/tabs-browsing.mjs
|
||||
index 7d4b5bec8b53..0cfde7bd0d09 100644
|
||||
--- a/browser/components/preferences/config/tabs-browsing.mjs
|
||||
+++ b/browser/components/preferences/config/tabs-browsing.mjs
|
||||
@@ -541,16 +541,6 @@ Preferences.addSetting({
|
||||
},
|
||||
});
|
||||
|
||||
-// Recommendations settings
|
||||
-Preferences.addSetting({
|
||||
- id: "cfrRecommendations",
|
||||
- pref: "browser.newtabpage.activity-stream.asrouter.userprefs.cfr.addons",
|
||||
-});
|
||||
-Preferences.addSetting({
|
||||
- id: "cfrRecommendations-features",
|
||||
- pref: "browser.newtabpage.activity-stream.asrouter.userprefs.cfr.features",
|
||||
-});
|
||||
-
|
||||
// Browser layout settings
|
||||
Preferences.addSetting({
|
||||
id: "browserLayoutRadioGroup",
|
||||
@@ -783,25 +773,6 @@ SettingGroupManager.registerGroups({
|
||||
},
|
||||
],
|
||||
},
|
||||
- recommendations: {
|
||||
- l10nId: "recommendations-group",
|
||||
- headingLevel: 2,
|
||||
- iconSrc: "chrome://browser/skin/lightning-bolt.svg",
|
||||
- items: [
|
||||
- {
|
||||
- id: "cfrRecommendations",
|
||||
- l10nId: "browsing-cfr-recommendations",
|
||||
- supportPage: "extensionrecommendations",
|
||||
- subcategory: "cfraddons",
|
||||
- },
|
||||
- {
|
||||
- id: "cfrRecommendations-features",
|
||||
- l10nId: "browsing-cfr-features",
|
||||
- supportPage: "extensionrecommendations",
|
||||
- subcategory: "cfrfeatures",
|
||||
- },
|
||||
- ],
|
||||
- },
|
||||
// Bug 2028609: the following sections are needed to ensure settings keep
|
||||
// working in legacy views, and can be removed when the pref is flipped
|
||||
drm: {
|
||||
@@ -833,18 +804,6 @@ SettingGroupManager.registerGroups({
|
||||
},
|
||||
],
|
||||
},
|
||||
- {
|
||||
- id: "cfrRecommendations",
|
||||
- l10nId: "browsing-cfr-recommendations",
|
||||
- supportPage: "extensionrecommendations",
|
||||
- subcategory: "cfraddons",
|
||||
- },
|
||||
- {
|
||||
- id: "cfrRecommendations-features",
|
||||
- l10nId: "browsing-cfr-features",
|
||||
- supportPage: "extensionrecommendations",
|
||||
- subcategory: "cfrfeatures",
|
||||
- },
|
||||
{
|
||||
id: "linkPreviewEnabled",
|
||||
l10nId: "link-preview-settings-enable",
|
||||
diff --git a/browser/components/preferences/preferences.js b/browser/components/preferences/preferences.js
|
||||
index 01f60127bbe9..2798ad677d20 100644
|
||||
--- a/browser/components/preferences/preferences.js
|
||||
+++ b/browser/components/preferences/preferences.js
|
||||
@@ -477,7 +477,6 @@ const CONFIG_PANES = Object.freeze({
|
||||
"keyboardShortcuts",
|
||||
"media",
|
||||
"performance",
|
||||
- "recommendations",
|
||||
],
|
||||
iconSrc: "chrome://global/skin/icons/cursor-arrow.svg",
|
||||
module: "chrome://browser/content/preferences/config/tabs-browsing.mjs",
|
||||
--
|
||||
2.47.3
|
||||
|
||||
-25
@@ -1,25 +0,0 @@
|
||||
From a46bad5a4815206b904f707cfc36a0b01857ba75 Mon Sep 17 00:00:00 2001
|
||||
From: LibreWolf Developers <noreply@librewolf.net>
|
||||
Date: Sun, 6 Sep 2026 10:12:15 +0100
|
||||
Subject: [PATCH 44/52] ui-patches/remove-organization-policy-banner.patch
|
||||
|
||||
---
|
||||
browser/components/preferences/preferences.js | 2 --
|
||||
1 file changed, 2 deletions(-)
|
||||
|
||||
diff --git a/browser/components/preferences/preferences.js b/browser/components/preferences/preferences.js
|
||||
index 2798ad677d20..89b032bedba7 100644
|
||||
--- a/browser/components/preferences/preferences.js
|
||||
+++ b/browser/components/preferences/preferences.js
|
||||
@@ -639,8 +639,6 @@ function init_all() {
|
||||
gotoPref(event.target.view);
|
||||
});
|
||||
|
||||
- maybeDisplayPoliciesNotice();
|
||||
-
|
||||
window.addEventListener("hashchange", onHashChange);
|
||||
window.addEventListener("beforeunload", onBeforeunload);
|
||||
|
||||
--
|
||||
2.47.3
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
@@ -1,66 +0,0 @@
|
||||
From b746f4cbe29321eeca3955c6ea04cb993f5960e2 Mon Sep 17 00:00:00 2001
|
||||
From: LibreWolf Developers <noreply@librewolf.net>
|
||||
Date: Sun, 6 Sep 2026 10:12:32 +0100
|
||||
Subject: [PATCH 46/52] ui-patches/trustpanel.patch
|
||||
|
||||
---
|
||||
browser/themes/shared/controlcenter/panel.css | 43 +++++++++++++++++++
|
||||
1 file changed, 43 insertions(+)
|
||||
|
||||
diff --git a/browser/themes/shared/controlcenter/panel.css b/browser/themes/shared/controlcenter/panel.css
|
||||
index 7a5d6a777c54..db270a154bbd 100644
|
||||
--- a/browser/themes/shared/controlcenter/panel.css
|
||||
+++ b/browser/themes/shared/controlcenter/panel.css
|
||||
@@ -828,6 +828,49 @@
|
||||
padding-block-end: var(--space-small);
|
||||
}
|
||||
|
||||
+/* Hide ETP description (reads like ad) */
|
||||
+#trustpanel-etp-description {
|
||||
+ display: none;
|
||||
+}
|
||||
+
|
||||
+/* Hide most of graphic but show tracker count */
|
||||
+#trustpanel-graphic-image,
|
||||
+#trustpanel-graphic-section-text,
|
||||
+#trustpanel-blocker-section > label:nth-child(2) {
|
||||
+ display: none;
|
||||
+}
|
||||
+#trustpanel-graphic-section,
|
||||
+#trustpanel-blocker-section,
|
||||
+#trustpanel-toggle-section {
|
||||
+ background: none !important;
|
||||
+ border: none !important;
|
||||
+ padding: 0 !important;
|
||||
+}
|
||||
+#trustpanel-toggle-section {
|
||||
+ margin-bottom: 0 !important;
|
||||
+}
|
||||
+#trustpanel-graphic-section {
|
||||
+ margin-top: 0 !important;
|
||||
+}
|
||||
+#trustpanel-blocker-section {
|
||||
+ flex-direction: row;
|
||||
+ justify-content: space-between;
|
||||
+ align-items: start;
|
||||
+}
|
||||
+
|
||||
+/* Make tracker count non-bold */
|
||||
+#trustpanel-blocker-section > label:nth-child(1) {
|
||||
+ font-weight: normal;
|
||||
+}
|
||||
+
|
||||
+/* Place toggle before tracker count */
|
||||
+#trustpanel-header-row {
|
||||
+ order: -2;
|
||||
+}
|
||||
+#trustpanel-toggle-section {
|
||||
+ order: -1;
|
||||
+}
|
||||
+
|
||||
#trustpanel-header-row {
|
||||
justify-content: space-between;
|
||||
padding-block-start: var(--space-small);
|
||||
--
|
||||
2.47.3
|
||||
|
||||
@@ -1,37 +0,0 @@
|
||||
From 2d86291ed691dab5f38ba637774a9ff577066319 Mon Sep 17 00:00:00 2001
|
||||
From: LibreWolf Developers <noreply@librewolf.net>
|
||||
Date: Sun, 6 Sep 2026 10:12:36 +0100
|
||||
Subject: [PATCH 47/52] ui-patches/wallpapers.patch
|
||||
|
||||
---
|
||||
.../extensions/newtab/lib/Wallpapers/WallpaperFeed.sys.mjs | 7 ++++---
|
||||
1 file changed, 4 insertions(+), 3 deletions(-)
|
||||
|
||||
diff --git a/browser/extensions/newtab/lib/Wallpapers/WallpaperFeed.sys.mjs b/browser/extensions/newtab/lib/Wallpapers/WallpaperFeed.sys.mjs
|
||||
index 467b01f0d102..4239d5e5a919 100644
|
||||
--- a/browser/extensions/newtab/lib/Wallpapers/WallpaperFeed.sys.mjs
|
||||
+++ b/browser/extensions/newtab/lib/Wallpapers/WallpaperFeed.sys.mjs
|
||||
@@ -155,16 +155,17 @@ export class WallpaperFeed {
|
||||
}
|
||||
|
||||
// retrieving all records in collection
|
||||
- let records;
|
||||
+ let records = [];
|
||||
try {
|
||||
- records = await this.wallpaperClient.get();
|
||||
+ if (Services.prefs.getBoolPref("librewolf.externalWallpapers.enabled", false)) {
|
||||
+ records = await this.wallpaperClient.get();
|
||||
+ }
|
||||
} catch (error) {
|
||||
// Fall through so the custom-wallpaper upload entry is still surfaced.
|
||||
console.error(
|
||||
"Error fetching wallpaper records from remote settings",
|
||||
error
|
||||
);
|
||||
- records = [];
|
||||
}
|
||||
|
||||
const customWallpaperEnabled = Services.prefs.getBoolPref(
|
||||
--
|
||||
2.47.3
|
||||
|
||||
@@ -1,57 +0,0 @@
|
||||
From 3d859b146eda48ed7143b3a44452493c31b1fa6b Mon Sep 17 00:00:00 2001
|
||||
From: LibreWolf Developers <noreply@librewolf.net>
|
||||
Date: Sun, 6 Sep 2026 10:12:39 +0100
|
||||
Subject: [PATCH 48/52] ui-patches/website-appearance-ui-rfp.patch
|
||||
|
||||
---
|
||||
.../preferences/config/appearance.mjs | 27 +++++++++++++++++++
|
||||
1 file changed, 27 insertions(+)
|
||||
|
||||
diff --git a/browser/components/preferences/config/appearance.mjs b/browser/components/preferences/config/appearance.mjs
|
||||
index 45faa8c4c26f..1eba3052e344 100644
|
||||
--- a/browser/components/preferences/config/appearance.mjs
|
||||
+++ b/browser/components/preferences/config/appearance.mjs
|
||||
@@ -270,6 +270,27 @@ if (Services.prefs.getBoolPref("browser.settings-redesign.enabled", false)) {
|
||||
});
|
||||
}
|
||||
|
||||
+Preferences.addSetting({
|
||||
+ id: "librewolfRFPWarning",
|
||||
+ deps: ["librewolfRFP"],
|
||||
+ visible: ({librewolfRFP}) => {
|
||||
+ const interval = setInterval(() => {
|
||||
+ const chooser = document.getElementById("web-appearance-chooser");
|
||||
+ if (chooser) {
|
||||
+ clearInterval(interval);
|
||||
+ if (librewolfRFP.value) {
|
||||
+ chooser.style.opacity = "0.3";
|
||||
+ chooser.style.pointerEvents = "none";
|
||||
+ } else {
|
||||
+ chooser.style.opacity = "1";
|
||||
+ chooser.style.pointerEvents = "all";
|
||||
+ }
|
||||
+ }
|
||||
+ }, 100);
|
||||
+ return librewolfRFP.value;
|
||||
+ },
|
||||
+});
|
||||
+
|
||||
SettingGroupManager.registerGroups({
|
||||
appearance: {
|
||||
l10nId: "appearance-group2",
|
||||
@@ -284,6 +305,12 @@ SettingGroupManager.registerGroups({
|
||||
role: "status",
|
||||
},
|
||||
},
|
||||
+ {
|
||||
+ id: "librewolfRFPWarning",
|
||||
+ l10nId: "librewolf-rfp-warning",
|
||||
+ supportPage: "rfp-theme",
|
||||
+ control: "moz-message-bar",
|
||||
+ },
|
||||
{
|
||||
id: "web-appearance-chooser",
|
||||
control: "moz-visual-picker",
|
||||
--
|
||||
2.47.3
|
||||
|
||||
@@ -1,58 +0,0 @@
|
||||
From 828d539224f49b9fa5084b14b5aa0c7a6f7ce236 Mon Sep 17 00:00:00 2001
|
||||
From: LibreWolf Developers <noreply@librewolf.net>
|
||||
Date: Sun, 6 Sep 2026 10:12:44 +0100
|
||||
Subject: [PATCH 49/52] vendor-name.patch
|
||||
|
||||
---
|
||||
toolkit/components/extensions/parent/ext-runtime.js | 10 +++++++++-
|
||||
toolkit/xre/nsAppRunner.cpp | 6 ------
|
||||
2 files changed, 9 insertions(+), 7 deletions(-)
|
||||
|
||||
diff --git a/toolkit/components/extensions/parent/ext-runtime.js b/toolkit/components/extensions/parent/ext-runtime.js
|
||||
index 22f03e99a871..875fca7be972 100644
|
||||
--- a/toolkit/components/extensions/parent/ext-runtime.js
|
||||
+++ b/toolkit/components/extensions/parent/ext-runtime.js
|
||||
@@ -334,7 +334,15 @@ this.runtime = class extends ExtensionAPIPersistent {
|
||||
|
||||
getBrowserInfo: function () {
|
||||
const { name, vendor, version, appBuildID } = Services.appinfo;
|
||||
- const info = { name, vendor, version, buildID: appBuildID };
|
||||
+ const useFirefoxDefaults = Services.prefs.getBoolPref(
|
||||
+ "librewolf.getBrowserInfo.setToFirefoxDefaults",
|
||||
+ true
|
||||
+ );
|
||||
+
|
||||
+ const info = useFirefoxDefaults
|
||||
+ ? { name: "Firefox", vendor: "Mozilla", version, buildID: appBuildID }
|
||||
+ : { name, vendor, version, buildID: appBuildID };
|
||||
+
|
||||
return Promise.resolve(info);
|
||||
},
|
||||
|
||||
diff --git a/toolkit/xre/nsAppRunner.cpp b/toolkit/xre/nsAppRunner.cpp
|
||||
index cd9485c34497..140c31d08353 100644
|
||||
--- a/toolkit/xre/nsAppRunner.cpp
|
||||
+++ b/toolkit/xre/nsAppRunner.cpp
|
||||
@@ -2257,9 +2257,6 @@ static void DumpHelp() {
|
||||
}
|
||||
|
||||
static inline void DumpVersion() {
|
||||
- if (gAppData->vendor && *gAppData->vendor) {
|
||||
- printf("%s ", (const char*)gAppData->vendor);
|
||||
- }
|
||||
printf("%s ", (const char*)gAppData->name);
|
||||
|
||||
// Use the displayed version
|
||||
@@ -2273,9 +2270,6 @@ static inline void DumpVersion() {
|
||||
}
|
||||
|
||||
static inline void DumpFullVersion() {
|
||||
- if (gAppData->vendor && *gAppData->vendor) {
|
||||
- printf("%s ", (const char*)gAppData->vendor);
|
||||
- }
|
||||
printf("%s ", (const char*)gAppData->name);
|
||||
|
||||
// Use the displayed version
|
||||
--
|
||||
2.47.3
|
||||
|
||||
@@ -1,614 +0,0 @@
|
||||
From 9c9f33a51b1676b1bcc3f85e10347115b40e2ff4 Mon Sep 17 00:00:00 2001
|
||||
From: LibreWolf Developers <noreply@librewolf.net>
|
||||
Date: Sun, 6 Sep 2026 10:12:55 +0100
|
||||
Subject: [PATCH 50/52] webgl-permission.patch
|
||||
|
||||
---
|
||||
.../content/popup-notifications.inc.xhtml | 7 +
|
||||
browser/modules/ObserverForwarder.sys.mjs | 5 +
|
||||
.../WebGLPermissionPromptHelper.sys.mjs | 132 +++++++++++++++++
|
||||
browser/themes/shared/icons/webgl-blocked.svg | 18 +++
|
||||
browser/themes/shared/icons/webgl.svg | 17 +++
|
||||
browser/themes/shared/jar.inc.mn | 3 +
|
||||
browser/themes/shared/notification-icons.css | 9 ++
|
||||
.../notification-icons/webgl-blocked.svg | 18 +++
|
||||
.../shared/notification-icons/webgl.svg | 17 +++
|
||||
dom/canvas/ClientWebGLContext.cpp | 140 ++++++++++++++++++
|
||||
dom/ipc/BrowserParent.cpp | 23 +++
|
||||
dom/ipc/BrowserParent.h | 2 +
|
||||
dom/ipc/PBrowser.ipdl | 8 +
|
||||
modules/libpref/init/StaticPrefList.yaml | 14 ++
|
||||
modules/libpref/moz.build | 1 +
|
||||
15 files changed, 414 insertions(+)
|
||||
create mode 100644 browser/modules/WebGLPermissionPromptHelper.sys.mjs
|
||||
create mode 100644 browser/themes/shared/icons/webgl-blocked.svg
|
||||
create mode 100644 browser/themes/shared/icons/webgl.svg
|
||||
create mode 100644 browser/themes/shared/notification-icons/webgl-blocked.svg
|
||||
create mode 100644 browser/themes/shared/notification-icons/webgl.svg
|
||||
|
||||
diff --git a/browser/base/content/popup-notifications.inc.xhtml b/browser/base/content/popup-notifications.inc.xhtml
|
||||
index 4e2f449c8199..256e4c94719a 100644
|
||||
--- a/browser/base/content/popup-notifications.inc.xhtml
|
||||
+++ b/browser/base/content/popup-notifications.inc.xhtml
|
||||
@@ -175,6 +175,13 @@
|
||||
</popupnotificationcontent>
|
||||
</popupnotification>
|
||||
|
||||
+ <popupnotification id="webgl-permissions-prompt-notification" hidden="true">
|
||||
+ <popupnotificationcontent orient="vertical">
|
||||
+ <description class="popup-notification-description"/>
|
||||
+ <label id="webgl-permissions-prompt-warning"/>
|
||||
+ </popupnotificationcontent>
|
||||
+ </popupnotification>
|
||||
+
|
||||
<popupnotification id="contextual-feature-recommendation-notification"
|
||||
buttonhighlight="true"
|
||||
hidden="true">
|
||||
diff --git a/browser/modules/ObserverForwarder.sys.mjs b/browser/modules/ObserverForwarder.sys.mjs
|
||||
index b62b572cdb11..222765c2754e 100644
|
||||
--- a/browser/modules/ObserverForwarder.sys.mjs
|
||||
+++ b/browser/modules/ObserverForwarder.sys.mjs
|
||||
@@ -14,6 +14,8 @@ let lazy = {};
|
||||
ChromeUtils.defineESModuleGetters(lazy, {
|
||||
CanvasPermissionPromptHelper:
|
||||
"moz-src:///browser/modules/CanvasPermissionPromptHelper.sys.mjs",
|
||||
+ WebGLPermissionPromptHelper:
|
||||
+ "moz-src:///browser/modules/WebGLPermissionPromptHelper.sys.mjs",
|
||||
FilePickerCrashed: "resource:///modules/FilePickerCrashed.sys.mjs",
|
||||
PluginManager: "resource:///actors/PluginParent.sys.mjs",
|
||||
SerialDeviceSharingHelper:
|
||||
@@ -29,6 +31,9 @@ let gObservers = {
|
||||
"canvas-permissions-prompt": ["CanvasPermissionPromptHelper"],
|
||||
"canvas-permissions-prompt-hide-doorhanger": ["CanvasPermissionPromptHelper"],
|
||||
|
||||
+ "webgl-permissions-prompt": ["WebGLPermissionPromptHelper"],
|
||||
+ "webgl-permissions-prompt-hide-doorhanger": ["WebGLPermissionPromptHelper"],
|
||||
+
|
||||
"file-picker-crashed": ["FilePickerCrashed"],
|
||||
"gmp-plugin-crash": ["PluginManager"],
|
||||
"plugin-crashed": ["PluginManager"],
|
||||
diff --git a/browser/modules/WebGLPermissionPromptHelper.sys.mjs b/browser/modules/WebGLPermissionPromptHelper.sys.mjs
|
||||
new file mode 100644
|
||||
index 000000000000..7c647a147894
|
||||
--- /dev/null
|
||||
+++ b/browser/modules/WebGLPermissionPromptHelper.sys.mjs
|
||||
@@ -0,0 +1,132 @@
|
||||
+/* This Source Code Form is subject to the terms of the Mozilla Public
|
||||
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
|
||||
+ * file, You can obtain one at https://mozilla.org/MPL/2.0/. */
|
||||
+
|
||||
+import { PrivateBrowsingUtils } from "resource://gre/modules/PrivateBrowsingUtils.sys.mjs";
|
||||
+
|
||||
+export let WebGLPermissionPromptHelper = {
|
||||
+ _permissionsPrompt: "webgl-permissions-prompt",
|
||||
+ _permissionsPromptHideDoorHanger: "webgl-permissions-prompt-hide-doorhanger",
|
||||
+ _notificationIcon: "webgl-notification-icon",
|
||||
+
|
||||
+ // aSubject is an nsIBrowser (e10s) or an nsIDOMWindow (non-e10s).
|
||||
+ // aData is an Origin string.
|
||||
+ observe(aSubject, aTopic, aData) {
|
||||
+ if (
|
||||
+ aTopic != this._permissionsPrompt &&
|
||||
+ aTopic != this._permissionsPromptHideDoorHanger
|
||||
+ ) {
|
||||
+ return;
|
||||
+ }
|
||||
+
|
||||
+ let browser;
|
||||
+ if (aSubject instanceof Ci.nsIDOMWindow) {
|
||||
+ browser = aSubject.docShell.chromeEventHandler;
|
||||
+ } else {
|
||||
+ browser = aSubject;
|
||||
+ }
|
||||
+
|
||||
+ let window = browser?.documentGlobal;
|
||||
+ if (!window) {
|
||||
+ // Without knowing where this came from, we can't show the prompt.
|
||||
+ return;
|
||||
+ }
|
||||
+
|
||||
+ let principal =
|
||||
+ Services.scriptSecurityManager.createContentPrincipalFromOrigin(aData);
|
||||
+ let permission = Services.perms.testPermissionFromPrincipal(principal, "webgl");
|
||||
+ if (permission === Ci.nsIPermissionManager.DENY_ACTION ||
|
||||
+ permission === Ci.nsIPermissionManager.ALLOW_ACTION) {
|
||||
+ return;
|
||||
+ }
|
||||
+
|
||||
+ if (window.PopupNotifications.getNotification(
|
||||
+ this._permissionsPrompt,
|
||||
+ browser
|
||||
+ )) {
|
||||
+ return;
|
||||
+ }
|
||||
+
|
||||
+ let { gNavigatorBundle, gBrowserBundle } = window;
|
||||
+ let message = gNavigatorBundle.getFormattedString(
|
||||
+ "webgl.siteprompt2",
|
||||
+ ["<>"],
|
||||
+ 1
|
||||
+ );
|
||||
+
|
||||
+ function setWebGLPermission(aPerm, aPersistent) {
|
||||
+ Services.perms.addFromPrincipal(
|
||||
+ principal,
|
||||
+ "webgl",
|
||||
+ aPerm,
|
||||
+ aPersistent
|
||||
+ ? Ci.nsIPermissionManager.EXPIRE_NEVER
|
||||
+ : Ci.nsIPermissionManager.EXPIRE_SESSION
|
||||
+ );
|
||||
+ }
|
||||
+
|
||||
+ let mainAction = {
|
||||
+ label: gNavigatorBundle.getString("webgl.allow2"),
|
||||
+ accessKey: gNavigatorBundle.getString("webgl.allow2.accesskey"),
|
||||
+ callback(state) {
|
||||
+ setWebGLPermission(
|
||||
+ Ci.nsIPermissionManager.ALLOW_ACTION,
|
||||
+ state && state.checkboxChecked
|
||||
+ );
|
||||
+ let tab = window?.gBrowser?.getTabForBrowser(browser);
|
||||
+ if (tab) {
|
||||
+ window.gBrowser.reloadTab(tab);
|
||||
+ }
|
||||
+ },
|
||||
+ };
|
||||
+
|
||||
+ let secondaryActions = [
|
||||
+ {
|
||||
+ label: gNavigatorBundle.getString("webgl.block"),
|
||||
+ accessKey: gNavigatorBundle.getString("webgl.block.accesskey"),
|
||||
+ callback(state) {
|
||||
+ setWebGLPermission(
|
||||
+ Ci.nsIPermissionManager.DENY_ACTION,
|
||||
+ state && state.checkboxChecked
|
||||
+ );
|
||||
+ },
|
||||
+ },
|
||||
+ ];
|
||||
+
|
||||
+ let checkbox = {
|
||||
+ // In PB mode, we don't want the "always remember" checkbox
|
||||
+ show: !PrivateBrowsingUtils.isWindowPrivate(window),
|
||||
+ };
|
||||
+ if (checkbox.show) {
|
||||
+ checkbox.checked = true;
|
||||
+ checkbox.label = gBrowserBundle.GetStringFromName("webgl.remember2");
|
||||
+ }
|
||||
+
|
||||
+ let options = {
|
||||
+ checkbox,
|
||||
+ name: principal.host,
|
||||
+ learnMoreURL:
|
||||
+ Services.urlFormatter.formatURLPref("app.support.baseURL") +
|
||||
+ "webgl-prompt",
|
||||
+ dismissed: aTopic == this._permissionsPromptHideDoorHanger,
|
||||
+ eventCallback(e) {
|
||||
+ if (e == "showing" && this?.browser?.ownerDocument) {
|
||||
+ this.browser.ownerDocument.getElementById(
|
||||
+ "webgl-permissions-prompt-warning"
|
||||
+ ).textContent = gBrowserBundle.GetStringFromName(
|
||||
+ "webgl.siteprompt2.warning"
|
||||
+ );
|
||||
+ }
|
||||
+ },
|
||||
+ };
|
||||
+ window.PopupNotifications.show(
|
||||
+ browser,
|
||||
+ this._permissionsPrompt,
|
||||
+ message,
|
||||
+ this._notificationIcon,
|
||||
+ mainAction,
|
||||
+ secondaryActions,
|
||||
+ options
|
||||
+ );
|
||||
+ },
|
||||
+};
|
||||
diff --git a/browser/themes/shared/icons/webgl-blocked.svg b/browser/themes/shared/icons/webgl-blocked.svg
|
||||
new file mode 100644
|
||||
index 000000000000..6e18b7cf5401
|
||||
--- /dev/null
|
||||
+++ b/browser/themes/shared/icons/webgl-blocked.svg
|
||||
@@ -0,0 +1,18 @@
|
||||
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||
+<svg
|
||||
+ width="16"
|
||||
+ height="16"
|
||||
+ viewBox="0 0 16 16"
|
||||
+ version="1.1"
|
||||
+ id="svg1"
|
||||
+ xml:space="preserve"
|
||||
+ xmlns="http://www.w3.org/2000/svg"
|
||||
+ xmlns:svg="http://www.w3.org/2000/svg"
|
||||
+ fill="context-fill"
|
||||
+ fill-opacity="context-fill-opacity"><defs
|
||||
+ id="defs1" /><g
|
||||
+ id="g30"
|
||||
+ transform="translate(-95.002999,-238.87424)"><path
|
||||
+ id="path30"
|
||||
+ style="stroke-linecap:round;paint-order:stroke fill markers"
|
||||
+ d="m 95.604562,238.87619 c -0.463094,0.0319 -0.839908,0.6221 -0.419922,1.06446 l 1,1 1.820312,1.82031 v 10.48437 a 0.625,0.625 0 0 0 0.625,0.625 0.625,0.625 0 0 0 0.625,-0.625 v -1.35547 h 7.878908 l 2.80078,2.80079 c 0.24466,0.24372 0.6401,0.24372 0.88477,0 0.24415,-0.24409 0.24415,-0.64068 0,-0.88477 l -2.0625,-2.06445 -1.10157,-1.10157 h -0.002 l -3.72656,-3.72656 v -0.002 l -0.96289,-0.96289 h -0.002 l -1.82031,-1.82031 -1.249999,-1.25 -0.636719,-0.63672 -2.367187,-2.36719 -0.462891,-0.46289 -0.355469,-0.35547 c -0.147451,-0.13999 -0.31048,-0.19033 -0.464843,-0.17969 z m 6.056638,4.00196 1.25,1.25 h 5.07422 c 0.42057,0 0.74894,0.32747 0.75,0.74804 l 0.0117,5.01953 c 5e-5,0.0215 -0.004,0.0416 -0.006,0.0625 l 0.96289,0.96289 c 0.18374,-0.30216 0.29391,-0.65288 0.29297,-1.02929 l -0.0117,-5.01953 c -0.003,-1.09501 -0.90499,-1.99414 -2,-1.99414 z m -2.406248,1.25 h 0.117188 l 2.13867,2.14062 a 1.4999924,1.4999924 0 0 0 -0.50976,1.10547 1.4999924,1.4999924 0 0 0 1.5,1.5 1.4999924,1.4999924 0 0 0 1.11718,-0.5 l 2.26563,2.26562 h -6.628908 z" /></g></svg>
|
||||
diff --git a/browser/themes/shared/icons/webgl.svg b/browser/themes/shared/icons/webgl.svg
|
||||
new file mode 100644
|
||||
index 000000000000..ffbf97c74dc7
|
||||
--- /dev/null
|
||||
+++ b/browser/themes/shared/icons/webgl.svg
|
||||
@@ -0,0 +1,17 @@
|
||||
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||
+<svg
|
||||
+ width="16"
|
||||
+ height="16"
|
||||
+ viewBox="0 0 16 16"
|
||||
+ version="1.1"
|
||||
+ id="svg1"
|
||||
+ xml:space="preserve"
|
||||
+ xmlns="http://www.w3.org/2000/svg"
|
||||
+ xmlns:svg="http://www.w3.org/2000/svg"
|
||||
+ fill="context-fill"
|
||||
+ fill-opacity="context-fill-opacity"><defs
|
||||
+ id="defs1" /><g
|
||||
+ id="g27"
|
||||
+ transform="translate(-95.002767,-238.87424)"><path
|
||||
+ id="path26"
|
||||
+ d="m 96.625679,239.87424 a 0.625,0.625 0 0 0 -0.625,0.625 0.625,0.625 0 0 0 0.625,0.625 h 0.626953 c 0.422091,-7e-5 0.751953,0.32791 0.751953,0.75 v 11.37109 a 0.625,0.625 0 0 0 0.625,0.625 0.625,0.625 0 0 0 0.624997,-0.625 v -1.35547 h 8.749998 c 1.095,0 1.99494,-0.90304 1.99219,-1.99804 l -0.0117,-5.01953 c -0.003,-1.09501 -0.90499,-1.99414 -2,-1.99414 h -8.730468 v -1.00391 c 0,-1.09772 -0.904231,-2.00019 -2.00195,-2 z m 2.628903,4.25391 h 8.730468 c 0.42057,0 0.74894,0.32747 0.75,0.74804 l 0.0117,5.01953 c 10e-4,0.41835 -0.32385,0.74415 -0.74219,0.74414 h -8.749998 z m 3.246088,1.74609 a 1.4999924,1.4999924 0 0 0 -1.5,1.5 1.4999924,1.4999924 0 0 0 1.5,1.5 1.4999924,1.4999924 0 0 0 1.5,-1.5 1.4999924,1.4999924 0 0 0 -1.5,-1.5 z" /></g></svg>
|
||||
diff --git a/browser/themes/shared/jar.inc.mn b/browser/themes/shared/jar.inc.mn
|
||||
index 450bff017b14..731979c9d588 100644
|
||||
--- a/browser/themes/shared/jar.inc.mn
|
||||
+++ b/browser/themes/shared/jar.inc.mn
|
||||
@@ -212,6 +212,9 @@
|
||||
skin/classic/browser/calendar-24.svg (../shared/icons/calendar-24.svg)
|
||||
skin/classic/browser/canvas.svg (../shared/icons/canvas.svg)
|
||||
skin/classic/browser/canvas-blocked.svg (../shared/icons/canvas-blocked.svg)
|
||||
+ skin/classic/browser/webgl.svg (../shared/icons/webgl.svg)
|
||||
+ skin/classic/browser/webgl-blocked.svg (../shared/icons/webgl-blocked.svg)
|
||||
+ skin/classic/browser/notification-icons/webgl.svg (../shared/notification-icons/webgl.svg)
|
||||
skin/classic/browser/characterEncoding.svg (../shared/icons/characterEncoding.svg)
|
||||
skin/classic/browser/chevron-animation.svg (../shared/icons/chevron-animation.svg)
|
||||
skin/classic/browser/circle-check-dotted.svg (../shared/icons/circle-check-dotted.svg)
|
||||
diff --git a/browser/themes/shared/notification-icons.css b/browser/themes/shared/notification-icons.css
|
||||
index 7d3f1207266e..fbc37db2709e 100644
|
||||
--- a/browser/themes/shared/notification-icons.css
|
||||
+++ b/browser/themes/shared/notification-icons.css
|
||||
@@ -211,6 +211,15 @@
|
||||
list-style-image: url(chrome://browser/skin/canvas-blocked.svg);
|
||||
}
|
||||
|
||||
+#webgl-notification-icon,
|
||||
+.webgl-icon {
|
||||
+ list-style-image: url(chrome://browser/skin/webgl.svg);
|
||||
+}
|
||||
+
|
||||
+.webgl-icon.blocked-permission-icon {
|
||||
+ list-style-image: url(chrome://browser/skin/webgl-blocked.svg);
|
||||
+}
|
||||
+
|
||||
#webauthn-notification-icon,
|
||||
.popup-notification-icon[popupid^="webauthn-prompt-"] {
|
||||
list-style-image: url(chrome://browser/skin/fingerprint.svg);
|
||||
diff --git a/browser/themes/shared/notification-icons/webgl-blocked.svg b/browser/themes/shared/notification-icons/webgl-blocked.svg
|
||||
new file mode 100644
|
||||
index 000000000000..6e18b7cf5401
|
||||
--- /dev/null
|
||||
+++ b/browser/themes/shared/notification-icons/webgl-blocked.svg
|
||||
@@ -0,0 +1,18 @@
|
||||
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||
+<svg
|
||||
+ width="16"
|
||||
+ height="16"
|
||||
+ viewBox="0 0 16 16"
|
||||
+ version="1.1"
|
||||
+ id="svg1"
|
||||
+ xml:space="preserve"
|
||||
+ xmlns="http://www.w3.org/2000/svg"
|
||||
+ xmlns:svg="http://www.w3.org/2000/svg"
|
||||
+ fill="context-fill"
|
||||
+ fill-opacity="context-fill-opacity"><defs
|
||||
+ id="defs1" /><g
|
||||
+ id="g30"
|
||||
+ transform="translate(-95.002999,-238.87424)"><path
|
||||
+ id="path30"
|
||||
+ style="stroke-linecap:round;paint-order:stroke fill markers"
|
||||
+ d="m 95.604562,238.87619 c -0.463094,0.0319 -0.839908,0.6221 -0.419922,1.06446 l 1,1 1.820312,1.82031 v 10.48437 a 0.625,0.625 0 0 0 0.625,0.625 0.625,0.625 0 0 0 0.625,-0.625 v -1.35547 h 7.878908 l 2.80078,2.80079 c 0.24466,0.24372 0.6401,0.24372 0.88477,0 0.24415,-0.24409 0.24415,-0.64068 0,-0.88477 l -2.0625,-2.06445 -1.10157,-1.10157 h -0.002 l -3.72656,-3.72656 v -0.002 l -0.96289,-0.96289 h -0.002 l -1.82031,-1.82031 -1.249999,-1.25 -0.636719,-0.63672 -2.367187,-2.36719 -0.462891,-0.46289 -0.355469,-0.35547 c -0.147451,-0.13999 -0.31048,-0.19033 -0.464843,-0.17969 z m 6.056638,4.00196 1.25,1.25 h 5.07422 c 0.42057,0 0.74894,0.32747 0.75,0.74804 l 0.0117,5.01953 c 5e-5,0.0215 -0.004,0.0416 -0.006,0.0625 l 0.96289,0.96289 c 0.18374,-0.30216 0.29391,-0.65288 0.29297,-1.02929 l -0.0117,-5.01953 c -0.003,-1.09501 -0.90499,-1.99414 -2,-1.99414 z m -2.406248,1.25 h 0.117188 l 2.13867,2.14062 a 1.4999924,1.4999924 0 0 0 -0.50976,1.10547 1.4999924,1.4999924 0 0 0 1.5,1.5 1.4999924,1.4999924 0 0 0 1.11718,-0.5 l 2.26563,2.26562 h -6.628908 z" /></g></svg>
|
||||
diff --git a/browser/themes/shared/notification-icons/webgl.svg b/browser/themes/shared/notification-icons/webgl.svg
|
||||
new file mode 100644
|
||||
index 000000000000..ffbf97c74dc7
|
||||
--- /dev/null
|
||||
+++ b/browser/themes/shared/notification-icons/webgl.svg
|
||||
@@ -0,0 +1,17 @@
|
||||
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||
+<svg
|
||||
+ width="16"
|
||||
+ height="16"
|
||||
+ viewBox="0 0 16 16"
|
||||
+ version="1.1"
|
||||
+ id="svg1"
|
||||
+ xml:space="preserve"
|
||||
+ xmlns="http://www.w3.org/2000/svg"
|
||||
+ xmlns:svg="http://www.w3.org/2000/svg"
|
||||
+ fill="context-fill"
|
||||
+ fill-opacity="context-fill-opacity"><defs
|
||||
+ id="defs1" /><g
|
||||
+ id="g27"
|
||||
+ transform="translate(-95.002767,-238.87424)"><path
|
||||
+ id="path26"
|
||||
+ d="m 96.625679,239.87424 a 0.625,0.625 0 0 0 -0.625,0.625 0.625,0.625 0 0 0 0.625,0.625 h 0.626953 c 0.422091,-7e-5 0.751953,0.32791 0.751953,0.75 v 11.37109 a 0.625,0.625 0 0 0 0.625,0.625 0.625,0.625 0 0 0 0.624997,-0.625 v -1.35547 h 8.749998 c 1.095,0 1.99494,-0.90304 1.99219,-1.99804 l -0.0117,-5.01953 c -0.003,-1.09501 -0.90499,-1.99414 -2,-1.99414 h -8.730468 v -1.00391 c 0,-1.09772 -0.904231,-2.00019 -2.00195,-2 z m 2.628903,4.25391 h 8.730468 c 0.42057,0 0.74894,0.32747 0.75,0.74804 l 0.0117,5.01953 c 10e-4,0.41835 -0.32385,0.74415 -0.74219,0.74414 h -8.749998 z m 3.246088,1.74609 a 1.4999924,1.4999924 0 0 0 -1.5,1.5 1.4999924,1.4999924 0 0 0 1.5,1.5 1.4999924,1.4999924 0 0 0 1.5,-1.5 1.4999924,1.4999924 0 0 0 -1.5,-1.5 z" /></g></svg>
|
||||
diff --git a/dom/canvas/ClientWebGLContext.cpp b/dom/canvas/ClientWebGLContext.cpp
|
||||
index afed0c39f23a..e9af0b03ffb8 100644
|
||||
--- a/dom/canvas/ClientWebGLContext.cpp
|
||||
+++ b/dom/canvas/ClientWebGLContext.cpp
|
||||
@@ -24,7 +24,9 @@
|
||||
#include "mozilla/RandomNum.h"
|
||||
#include "mozilla/ResultVariant.h"
|
||||
#include "mozilla/ScopeExit.h"
|
||||
+#include "mozilla/StaticPrefs_librewolf.h"
|
||||
#include "mozilla/StaticPrefs_webgl.h"
|
||||
+#include "mozilla/dom/BrowserChild.h"
|
||||
#include "mozilla/dom/BufferSourceBinding.h"
|
||||
#include "mozilla/dom/Document.h"
|
||||
#include "mozilla/dom/GeneratePlaceholderCanvasData.h"
|
||||
@@ -45,6 +47,8 @@
|
||||
#include "mozilla/layers/WebRenderUserData.h"
|
||||
#include "nsContentUtils.h"
|
||||
#include "nsDisplayList.h"
|
||||
+#include "nsIPrincipal.h"
|
||||
+#include "nsIPermissionManager.h"
|
||||
|
||||
namespace mozilla {
|
||||
|
||||
@@ -862,6 +866,131 @@ void ClientWebGLContext::ResetBitmap() {
|
||||
Run<RPROC(Resize)>(size); // No-change resize still clears/resets everything.
|
||||
}
|
||||
|
||||
+static uint32_t GetWebGLPermission(nsIPrincipal* aPrincipal) {
|
||||
+ if (!aPrincipal) {
|
||||
+ return nsIPermissionManager::UNKNOWN_ACTION;
|
||||
+ }
|
||||
+
|
||||
+ if (IsUnrestrictedPrincipal(aPrincipal)) {
|
||||
+ return true;
|
||||
+ }
|
||||
+
|
||||
+ nsresult rv;
|
||||
+ nsCOMPtr<nsIPermissionManager> permissionManager =
|
||||
+ do_GetService(NS_PERMISSIONMANAGER_CONTRACTID, &rv);
|
||||
+ NS_ENSURE_SUCCESS(rv, nsIPermissionManager::UNKNOWN_ACTION);
|
||||
+
|
||||
+ uint32_t permission;
|
||||
+ rv = permissionManager->TestPermissionFromPrincipal(
|
||||
+ aPrincipal, "webgl"_ns, &permission);
|
||||
+ NS_ENSURE_SUCCESS(rv, nsIPermissionManager::UNKNOWN_ACTION);
|
||||
+
|
||||
+ return permission;
|
||||
+}
|
||||
+
|
||||
+static bool IsWebGLAllowed_impl(
|
||||
+ bool webGLDisabled, JSContext* aCx,
|
||||
+ nsIPrincipal* aPrincipal,
|
||||
+ const std::function<void(const nsAutoString&)>& aReportToConsole,
|
||||
+ const std::function<void(bool)>& aTryPrompt) {
|
||||
+
|
||||
+ if(!webGLDisabled) {
|
||||
+ return true;
|
||||
+ }
|
||||
+
|
||||
+ if (!aCx) {
|
||||
+ return false;
|
||||
+ }
|
||||
+
|
||||
+ if (IsUnrestrictedPrincipal(aPrincipal)) {
|
||||
+ return true;
|
||||
+ }
|
||||
+
|
||||
+ Maybe<nsAutoCString> origin = Nothing();
|
||||
+ auto getOrigin = [&]() {
|
||||
+ if (origin.isSome()) {
|
||||
+ return origin->IsEmpty();
|
||||
+ }
|
||||
+
|
||||
+ nsAutoCString originResult;
|
||||
+ nsresult rv = NS_ERROR_FAILURE;
|
||||
+ if (aPrincipal) {
|
||||
+ rv = aPrincipal->GetOrigin(originResult);
|
||||
+ }
|
||||
+ origin = NS_SUCCEEDED(rv) ? Some(originResult) : Some(""_ns);
|
||||
+
|
||||
+ return NS_SUCCEEDED(rv);
|
||||
+ };
|
||||
+
|
||||
+ uint64_t permission = GetWebGLPermission(aPrincipal);
|
||||
+ switch (permission) {
|
||||
+ case nsIPermissionManager::ALLOW_ACTION:
|
||||
+ return true;
|
||||
+ case nsIPermissionManager::DENY_ACTION:
|
||||
+ return false;
|
||||
+ default:
|
||||
+ break;
|
||||
+ }
|
||||
+
|
||||
+ bool hidePermissionDoorhanger = StaticPrefs::librewolf_webgl_prompt_hide();
|
||||
+
|
||||
+ nsAutoString message;
|
||||
+ message.AppendPrintf("Blocked %s from creating WebGL context but prompting the user.",
|
||||
+ getOrigin() ? origin->get() : "unknown");
|
||||
+ aReportToConsole(message);
|
||||
+
|
||||
+ aTryPrompt(hidePermissionDoorhanger);
|
||||
+
|
||||
+ return false;
|
||||
+}
|
||||
+
|
||||
+static bool IsWebGLAllowed(dom::Document* aDocument, JSContext* aCx,
|
||||
+ nsIPrincipal* aPrincipal) {
|
||||
+ if(NS_WARN_IF(!aDocument)) {
|
||||
+ return false;
|
||||
+ }
|
||||
+
|
||||
+ bool webGLDisabled = StaticPrefs::librewolf_webgl_prompt();
|
||||
+
|
||||
+ if (!webGLDisabled) {
|
||||
+ return true;
|
||||
+ }
|
||||
+
|
||||
+ auto reportToConsole = [&](const nsAutoString& message) {
|
||||
+ nsContentUtils::ReportToConsoleNonLocalized(
|
||||
+ message, nsIScriptError::warningFlag, "Security"_ns, aDocument);
|
||||
+ };
|
||||
+
|
||||
+ auto prompt = [&](bool hidePermissionDoorhanger) {
|
||||
+ if (!aPrincipal) {
|
||||
+ return;
|
||||
+ }
|
||||
+
|
||||
+ nsAutoCString origin;
|
||||
+ nsresult rv = aPrincipal->GetOrigin(origin);
|
||||
+ if (NS_FAILED(rv)) {
|
||||
+ return;
|
||||
+ }
|
||||
+
|
||||
+ if (!XRE_IsContentProcess()) {
|
||||
+ MOZ_ASSERT_UNREACHABLE(
|
||||
+ "Who's calling this from the parent process without a chrome window "
|
||||
+ "(it would have been exempt from the RFP targets)?");
|
||||
+ return;
|
||||
+ }
|
||||
+
|
||||
+ nsPIDOMWindowOuter* win = aDocument->GetWindow();
|
||||
+ if (RefPtr<dom::BrowserChild> browserChild =
|
||||
+ dom::BrowserChild::GetFrom(win)) {
|
||||
+ browserChild->SendShowWebGLPermissionPrompt(origin, hidePermissionDoorhanger);
|
||||
+ }
|
||||
+ };
|
||||
+
|
||||
+ return IsWebGLAllowed_impl(
|
||||
+ webGLDisabled, aCx, aPrincipal,
|
||||
+ reportToConsole, prompt);
|
||||
+}
|
||||
+
|
||||
bool ClientWebGLContext::CreateHostContext(const uvec2& requestedSize) {
|
||||
const auto pNotLost = MakeRefPtr<webgl::NotLostData>(*this);
|
||||
auto& notLost = *pNotLost;
|
||||
@@ -900,6 +1029,17 @@ bool ClientWebGLContext::CreateHostContext(const uvec2& requestedSize) {
|
||||
.options = options,
|
||||
};
|
||||
|
||||
+ if (mCanvasElement && !StaticPrefs::webgl_disabled()) {
|
||||
+ if(!IsWebGLAllowed(mCanvasElement->OwnerDoc(),
|
||||
+ nsContentUtils::GetCurrentJSContext(),
|
||||
+ mCanvasElement->NodePrincipal())) {
|
||||
+
|
||||
+ return Err("WebGL is currently disabled.");
|
||||
+ }
|
||||
+ }
|
||||
+
|
||||
+
|
||||
+
|
||||
// -
|
||||
|
||||
ScopedGfxFeatureReporter reporter("IpcWebGL");
|
||||
diff --git a/dom/ipc/BrowserParent.cpp b/dom/ipc/BrowserParent.cpp
|
||||
index 4fbe13919101..2473600d45c4 100644
|
||||
--- a/dom/ipc/BrowserParent.cpp
|
||||
+++ b/dom/ipc/BrowserParent.cpp
|
||||
@@ -4229,6 +4229,29 @@ mozilla::ipc::IPCResult BrowserParent::RecvShowCanvasPermissionPrompt(
|
||||
return IPC_OK();
|
||||
}
|
||||
|
||||
+mozilla::ipc::IPCResult BrowserParent::RecvShowWebGLPermissionPrompt(const nsCString& aOrigin, const bool& aHideDoorHanger) {
|
||||
+ nsCOMPtr<nsIBrowser> browser =
|
||||
+ mFrameElement ? mFrameElement->AsBrowser() : nullptr;
|
||||
+ if (!browser) {
|
||||
+ // If the tab is being closed, the browser may not be available.
|
||||
+ // In this case we can ignore the request.
|
||||
+ return IPC_OK();
|
||||
+ }
|
||||
+ nsCOMPtr<nsIObserverService> os = services::GetObserverService();
|
||||
+ if (!os) {
|
||||
+ return IPC_FAIL_NO_REASON(this);
|
||||
+ }
|
||||
+ nsresult rv = os->NotifyObservers(
|
||||
+ browser,
|
||||
+ aHideDoorHanger ? "webgl-permissions-prompt-hide-doorhanger"
|
||||
+ : "webgl-permissions-prompt",
|
||||
+ NS_ConvertUTF8toUTF16(aOrigin).get());
|
||||
+ if (NS_FAILED(rv)) {
|
||||
+ return IPC_FAIL_NO_REASON(this);
|
||||
+ }
|
||||
+ return IPC_OK();
|
||||
+}
|
||||
+
|
||||
mozilla::ipc::IPCResult BrowserParent::RecvVisitURI(
|
||||
nsIURI* aURI, nsIURI* aLastVisitedURI, const uint32_t& aFlags,
|
||||
const uint64_t& aBrowserId) {
|
||||
diff --git a/dom/ipc/BrowserParent.h b/dom/ipc/BrowserParent.h
|
||||
index f2537eccb928..c74a4e4c1251 100644
|
||||
--- a/dom/ipc/BrowserParent.h
|
||||
+++ b/dom/ipc/BrowserParent.h
|
||||
@@ -757,6 +757,8 @@ class BrowserParent final : public PBrowserParent,
|
||||
mozilla::ipc::IPCResult RecvShowCanvasPermissionPrompt(
|
||||
const nsCString& aOrigin, const bool& aHideDoorHanger);
|
||||
|
||||
+ mozilla::ipc::IPCResult RecvShowWebGLPermissionPrompt(const nsCString& aOrigin, const bool& aHideDoorHanger);
|
||||
+
|
||||
mozilla::ipc::IPCResult RecvSetSystemFont(const nsCString& aFontName);
|
||||
mozilla::ipc::IPCResult RecvGetSystemFont(nsCString* aFontName);
|
||||
|
||||
diff --git a/dom/ipc/PBrowser.ipdl b/dom/ipc/PBrowser.ipdl
|
||||
index 2be0054f75be..ee483b2fa6ce 100644
|
||||
--- a/dom/ipc/PBrowser.ipdl
|
||||
+++ b/dom/ipc/PBrowser.ipdl
|
||||
@@ -650,6 +650,14 @@ parent:
|
||||
*/
|
||||
async ShowCanvasPermissionPrompt(nsCString aOrigin,
|
||||
bool aHideDoorHanger);
|
||||
+ /**
|
||||
+ * This function is used to notify the parent that it should display a
|
||||
+ * WebGL permission prompt.
|
||||
+ *
|
||||
+ * @param aOrigin origin string of the document that is requesting access.
|
||||
+ */
|
||||
+ async ShowWebGLPermissionPrompt(nsCString aOrigin,
|
||||
+ bool aHideDoorHanger);
|
||||
|
||||
sync SetSystemFont(nsCString aFontName);
|
||||
sync GetSystemFont() returns (nsCString retval);
|
||||
diff --git a/modules/libpref/init/StaticPrefList.yaml b/modules/libpref/init/StaticPrefList.yaml
|
||||
index d073433aa9b5..27fc0906de46 100644
|
||||
--- a/modules/libpref/init/StaticPrefList.yaml
|
||||
+++ b/modules/libpref/init/StaticPrefList.yaml
|
||||
@@ -11976,6 +11976,20 @@
|
||||
value: true
|
||||
mirror: always
|
||||
|
||||
+#---------------------------------------------------------------------------
|
||||
+# Prefs starting with "librewolf."
|
||||
+#---------------------------------------------------------------------------
|
||||
+
|
||||
+- name: librewolf.webgl.prompt
|
||||
+ type: RelaxedAtomicBool
|
||||
+ value: true
|
||||
+ mirror: always
|
||||
+
|
||||
+- name: librewolf.webgl.prompt.hide
|
||||
+ type: RelaxedAtomicBool
|
||||
+ value: true
|
||||
+ mirror: always
|
||||
+
|
||||
#---------------------------------------------------------------------------
|
||||
# Prefs starting with "logging."
|
||||
#---------------------------------------------------------------------------
|
||||
diff --git a/modules/libpref/moz.build b/modules/libpref/moz.build
|
||||
index 2c8b218c618f..16805711b4e2 100644
|
||||
--- a/modules/libpref/moz.build
|
||||
+++ b/modules/libpref/moz.build
|
||||
@@ -56,6 +56,7 @@ pref_groups = [
|
||||
"javascript",
|
||||
"layers",
|
||||
"layout",
|
||||
+ "librewolf",
|
||||
"logging",
|
||||
"mathml",
|
||||
"media",
|
||||
--
|
||||
2.47.3
|
||||
|
||||
@@ -1,66 +0,0 @@
|
||||
From f260cad296fb06a2be6b1816bb03f1015b9f8f14 Mon Sep 17 00:00:00 2001
|
||||
From: LibreWolf Developers <noreply@librewolf.net>
|
||||
Date: Sun, 6 Sep 2026 10:12:58 +0100
|
||||
Subject: [PATCH 51/52] windows-theming-bug.patch
|
||||
|
||||
---
|
||||
browser/app/librewolf.exe.manifest | 47 ++++++++++++++++++++++++++++++
|
||||
1 file changed, 47 insertions(+)
|
||||
create mode 100644 browser/app/librewolf.exe.manifest
|
||||
|
||||
diff --git a/browser/app/librewolf.exe.manifest b/browser/app/librewolf.exe.manifest
|
||||
new file mode 100644
|
||||
index 000000000000..cad0ac6b6a87
|
||||
--- /dev/null
|
||||
+++ b/browser/app/librewolf.exe.manifest
|
||||
@@ -0,0 +1,47 @@
|
||||
+<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
|
||||
+<assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0">
|
||||
+<assemblyIdentity
|
||||
+ version="1.0.0.0"
|
||||
+ processorArchitecture="*"
|
||||
+ name="LibreWolf"
|
||||
+ type="win32"
|
||||
+/>
|
||||
+<description>LibreWolf</description>
|
||||
+<dependency>
|
||||
+ <dependentAssembly>
|
||||
+ <assemblyIdentity
|
||||
+ type="win32"
|
||||
+ name="Microsoft.Windows.Common-Controls"
|
||||
+ version="6.0.0.0"
|
||||
+ processorArchitecture="*"
|
||||
+ publicKeyToken="6595b64144ccf1df"
|
||||
+ language="*"
|
||||
+ />
|
||||
+ </dependentAssembly>
|
||||
+</dependency>
|
||||
+<dependency>
|
||||
+ <dependentAssembly>
|
||||
+ <assemblyIdentity
|
||||
+ type="win32"
|
||||
+ name="mozglue"
|
||||
+ version="1.0.0.0"
|
||||
+ language="*"
|
||||
+ />
|
||||
+ </dependentAssembly>
|
||||
+</dependency>
|
||||
+<ms_asmv3:trustInfo xmlns:ms_asmv3="urn:schemas-microsoft-com:asm.v3">
|
||||
+ <ms_asmv3:security>
|
||||
+ <ms_asmv3:requestedPrivileges>
|
||||
+ <ms_asmv3:requestedExecutionLevel level="asInvoker" uiAccess="false" />
|
||||
+ </ms_asmv3:requestedPrivileges>
|
||||
+ </ms_asmv3:security>
|
||||
+</ms_asmv3:trustInfo>
|
||||
+ <compatibility xmlns="urn:schemas-microsoft-com:compatibility.v1">
|
||||
+ <application>
|
||||
+ <supportedOS Id="{8e0f7a12-bfb3-4fe8-b9a5-48fd50a15a9a}"/>
|
||||
+ <supportedOS Id="{1f676c76-80e1-4239-95bb-83d0f6d0da78}"/>
|
||||
+ <supportedOS Id="{4a2f28e3-53b9-4441-ba9c-d69d4a4a6e38}"/>
|
||||
+ <supportedOS Id="{35138b9a-5d96-4fbd-8e2d-a2440225f93a}"/>
|
||||
+ </application>
|
||||
+ </compatibility>
|
||||
+</assembly>
|
||||
--
|
||||
2.47.3
|
||||
|
||||
@@ -1,107 +0,0 @@
|
||||
From 8c23ea05790f53956fa4c0d8d13c5f1f1080ead6 Mon Sep 17 00:00:00 2001
|
||||
From: LibreWolf Developers <noreply@librewolf.net>
|
||||
Date: Sun, 6 Sep 2026 10:13:02 +0100
|
||||
Subject: [PATCH 52/52] xdg-dir.patch
|
||||
|
||||
---
|
||||
toolkit/xre/nsXREDirProvider.cpp | 47 ++++++++++++--------------------
|
||||
1 file changed, 18 insertions(+), 29 deletions(-)
|
||||
|
||||
diff --git a/toolkit/xre/nsXREDirProvider.cpp b/toolkit/xre/nsXREDirProvider.cpp
|
||||
index 004c767956f2..902b5c81092b 100644
|
||||
--- a/toolkit/xre/nsXREDirProvider.cpp
|
||||
+++ b/toolkit/xre/nsXREDirProvider.cpp
|
||||
@@ -1341,7 +1341,8 @@ nsresult nsXREDirProvider::AppendFromAppData(nsIFile* aFile, bool aIsDotted) {
|
||||
// Similar to nsXREDirProvider::AppendProfilePath.
|
||||
// TODO: Bug 1990407 - Evaluate if refactoring might be required there in the
|
||||
// future?
|
||||
- if (gAppData->profile) {
|
||||
+ // Use aIsDotted for a different purpose here, will probably break in the future
|
||||
+ if (gAppData->profile && aIsDotted) {
|
||||
nsAutoCString profile;
|
||||
# if defined(MOZ_THUNDERBIRD)
|
||||
if (gAppData->profile[0] != '.') {
|
||||
@@ -1349,6 +1350,7 @@ nsresult nsXREDirProvider::AppendFromAppData(nsIFile* aFile, bool aIsDotted) {
|
||||
}
|
||||
# endif
|
||||
profile.Append(gAppData->profile);
|
||||
+ profile = "."_ns + nsDependentCString(gAppData->profile);
|
||||
MOZ_TRY(aFile->AppendRelativeNativePath(profile));
|
||||
} else {
|
||||
nsAutoCString vendor;
|
||||
@@ -1358,8 +1360,6 @@ nsresult nsXREDirProvider::AppendFromAppData(nsIFile* aFile, bool aIsDotted) {
|
||||
ToLowerCase(vendor);
|
||||
ToLowerCase(appName);
|
||||
|
||||
- MOZ_TRY(aFile->AppendRelativeNativePath(aIsDotted ? ("."_ns + vendor)
|
||||
- : vendor));
|
||||
MOZ_TRY(aFile->AppendRelativeNativePath(appName));
|
||||
}
|
||||
|
||||
@@ -1396,6 +1396,14 @@ bool nsXREDirProvider::LegacyHomeExists(nsIFile** aFile) {
|
||||
rv = localDir->Exists(&exists);
|
||||
NS_ENSURE_SUCCESS(rv, false);
|
||||
|
||||
+ if (exists) {
|
||||
+ rv = localDir->AppendNative("profiles.ini"_ns);
|
||||
+ NS_ENSURE_SUCCESS(rv, false);
|
||||
+
|
||||
+ rv = localDir->Exists(&exists);
|
||||
+ NS_ENSURE_SUCCESS(rv, false);
|
||||
+ }
|
||||
+
|
||||
// Give a chance to (3)
|
||||
if (!exists) {
|
||||
nsCOMPtr<nsIFile> userDir;
|
||||
@@ -1526,41 +1534,22 @@ nsresult nsXREDirProvider::GetLegacyOrXDGHomePath(const char* aHomeDir,
|
||||
return NS_OK;
|
||||
}
|
||||
|
||||
- // If the build was made against a specific profile name, MOZ_APP_PROFILE=
|
||||
- // then make sure we respect this and dont move to XDG directory
|
||||
- //
|
||||
- // Only do this on Firefox.
|
||||
- //
|
||||
- // For Thunderbird, it always defines MOZ_APP_PROFILE=thunderbird. Hence,
|
||||
- // check if the gAppData->profile value is set to something else, indicating
|
||||
- // of a specific build where legacy needs to be forced, similar to the
|
||||
- // Firefox handling. Both casing are verified to account for systems where
|
||||
- // that matters.
|
||||
- if (gAppData->profile
|
||||
-# if defined(MOZ_THUNDERBIRD)
|
||||
- && strcmp(gAppData->profile, "thunderbird") != 0 &&
|
||||
- strcmp(gAppData->profile, "Thunderbird") != 0
|
||||
-# endif
|
||||
- ) {
|
||||
- MOZ_TRY(NS_NewNativeLocalFile(nsDependentCString(aHomeDir),
|
||||
- getter_AddRefs(localDir)));
|
||||
- } else {
|
||||
- MOZ_TRY(GetLegacyOrXDGConfigHome(aHomeDir, getter_AddRefs(localDir)));
|
||||
- MOZ_TRY(localDir->Clone(getter_AddRefs(parentDir)));
|
||||
- }
|
||||
+ // Since we set gAppData->profile and don't want to force legacy behaviour
|
||||
+ MOZ_TRY(GetLegacyOrXDGConfigHome(aHomeDir, getter_AddRefs(localDir)));
|
||||
+ MOZ_TRY(localDir->Clone(getter_AddRefs(parentDir)));
|
||||
|
||||
MOZ_TRY(AppendFromAppData(localDir, false));
|
||||
}
|
||||
|
||||
+ // The profile root directory needs to exists at that point.
|
||||
+ MOZ_TRY(EnsureDirectoryExists(localDir));
|
||||
+
|
||||
// If required return the parent directory that matches the profile root
|
||||
// directory.
|
||||
if (aFile) {
|
||||
- parentDir.forget(aFile);
|
||||
+ localDir.forget(aFile);
|
||||
}
|
||||
|
||||
- // The profile root directory needs to exists at that point.
|
||||
- MOZ_TRY(EnsureDirectoryExists(localDir));
|
||||
-
|
||||
return NS_OK;
|
||||
}
|
||||
#endif // defined(MOZ_WIDGET_GTK)
|
||||
--
|
||||
2.47.3
|
||||
|
||||
@@ -1,4 +0,0 @@
|
||||
# SPDX-License-Identifier: GPL-3.0-or-later
|
||||
|
||||
tree="default"
|
||||
rev="fb95137a04eb8fe1196cb12f26b100c1e060295c" # FIREFOX_155_0_1_RELEASE
|
||||
@@ -1,39 +0,0 @@
|
||||
ac_add_options --enable-application=browser
|
||||
|
||||
ac_add_options --disable-crashreporter
|
||||
ac_add_options --disable-debug
|
||||
ac_add_options --disable-default-browser-agent
|
||||
ac_add_options --disable-tests
|
||||
ac_add_options --disable-updater
|
||||
ac_add_options --disable-cargo-incremental
|
||||
ac_add_options --enable-hardening
|
||||
ac_add_options --enable-stl-hardening
|
||||
ac_add_options --enable-optimize
|
||||
ac_add_options --enable-release
|
||||
ac_add_options --enable-rust-simd
|
||||
# allow replacing malloc manually, will not affect regular systems
|
||||
# not compatible with ac_add_options --disable-jemalloc, which only works when preloading custom malloc
|
||||
ac_add_options --enable-replace-malloc
|
||||
ac_add_options --enable-jemalloc
|
||||
|
||||
ac_add_options --with-app-name=librewolf
|
||||
ac_add_options --with-branding=browser/branding/librewolf
|
||||
|
||||
ac_add_options --with-l10n-base=$PWD/lw/l10n
|
||||
|
||||
export MOZ_TELEMETRY_REPORTING=
|
||||
export MOZ_REQUIRE_SIGNING=
|
||||
export MOZILLA_OFFICIAL=1
|
||||
export MOZ_APP_REMOTINGNAME=LibreWolf
|
||||
|
||||
mk_add_options MOZ_CRASHREPORTER=0
|
||||
mk_add_options MOZ_DATA_REPORTING=0
|
||||
mk_add_options MOZ_SERVICES_HEALTHREPORT=0
|
||||
mk_add_options MOZ_TELEMETRY_REPORTING=0
|
||||
|
||||
export CFLAGS="-ftrivial-auto-var-init=zero -fwrapv -Wno-backend-plugin $CFLAGS"
|
||||
export CXXFLAGS="-ftrivial-auto-var-init=zero -fwrapv -Wno-backend-plugin $CXXFLAGS"
|
||||
#export LDFLAGS=
|
||||
|
||||
# Add your own stuff, libraries, architecture, etc..
|
||||
# ex: `cat mozconfig.orig mozconfig.my > mozconfig`
|
||||
@@ -1,3 +0,0 @@
|
||||
# SPDX-License-Identifier: GPL-3.0-or-later
|
||||
|
||||
tree="default"
|
||||
@@ -1,52 +0,0 @@
|
||||
# Application and Branding
|
||||
ac_add_options --enable-application=browser
|
||||
ac_add_options --with-app-name=librewolf
|
||||
ac_add_options --with-branding=browser/branding/librewolf
|
||||
ac_add_options --with-l10n-base=$PWD/lw/l10n
|
||||
|
||||
# Performance Optimizations
|
||||
ac_add_options --enable-release
|
||||
ac_add_options --enable-optimize
|
||||
ac_add_options --enable-lto=full
|
||||
ac_add_options --enable-rust-simd
|
||||
ac_add_options --enable-wasm-avx
|
||||
ac_add_options --enable-jemalloc
|
||||
ac_add_options --linker=lld
|
||||
ac_add_options MOZ_PGO=1
|
||||
|
||||
# Build Hardening & Size
|
||||
ac_add_options --enable-hardening
|
||||
ac_add_options --enable-stl-hardening
|
||||
ac_add_options --enable-sandbox
|
||||
ac_add_options --enable-jxl
|
||||
ac_add_options --enable-bootstrap
|
||||
ac_add_options --enable-strip
|
||||
ac_add_options --enable-install-strip
|
||||
|
||||
# Disable Debugging & Tests
|
||||
ac_add_options --disable-debug
|
||||
ac_add_options --disable-debug-symbols
|
||||
ac_add_options --disable-debug-js-modules
|
||||
ac_add_options --disable-tests
|
||||
|
||||
# Disable Unwanted Features
|
||||
ac_add_options --disable-cargo-incremental
|
||||
ac_add_options --disable-default-browser-agent
|
||||
ac_add_options --disable-updater
|
||||
ac_add_options --disable-crashreporter
|
||||
ac_add_options --disable-parental-controls
|
||||
|
||||
# Environment Flags (CPU-specific optimization)
|
||||
export CFLAGS="-O3 -march=native -mtune=native"
|
||||
export CXXFLAGS="$CFLAGS"
|
||||
export LDFLAGS="-Wl,--no-keep-memory"
|
||||
|
||||
# Disable Telemetry
|
||||
export MOZ_TELEMETRY_REPORTING=
|
||||
export MOZ_REQUIRE_SIGNING=
|
||||
export MOZILLA_OFFICIAL=1
|
||||
export MOZ_APP_REMOTINGNAME=LibreWolfHellFire
|
||||
mk_add_options MOZ_CRASHREPORTER=0
|
||||
mk_add_options MOZ_DATA_REPORTING=0
|
||||
mk_add_options MOZ_SERVICES_HEALTHREPORT=0
|
||||
mk_add_options MOZ_TELEMETRY_REPORTING=0
|
||||
@@ -1,3 +0,0 @@
|
||||
# SPDX-License-Identifier: GPL-3.0-or-later
|
||||
|
||||
tree="default"
|
||||
@@ -0,0 +1,6 @@
|
||||
{bios_extract}{
|
||||
rev: 0a7bc1d71735ef97b00dfec0fd54a02fcc5d1bb0
|
||||
loc: bios_extract
|
||||
url: https://review.coreboot.org/bios_extract
|
||||
bkup_url: https://github.com/coreboot/bios_extract/
|
||||
}
|
||||
@@ -0,0 +1,6 @@
|
||||
{biosutilities}{
|
||||
rev: 03ae0cf0706ede5a2a15da0986c19c776d0e6b26
|
||||
loc: biosutilities
|
||||
url: https://codeberg.org/libreboot/BIOSUtilities
|
||||
bkup_url: https://github.com/platomav/BIOSUtilities
|
||||
}
|
||||
@@ -0,0 +1,6 @@
|
||||
{coreboot}{
|
||||
rev: HEAD
|
||||
loc: coreboot/coreboot
|
||||
url: https://review.coreboot.org/coreboot
|
||||
bkup_url: https://github.com/coreboot/coreboot.git
|
||||
}
|
||||
@@ -0,0 +1,30 @@
|
||||
{docs}{
|
||||
rev: 06ac864b9a738b5daec3736ddb0fb2f94f127ee0
|
||||
loc: docs
|
||||
url: https://codeberg.org/vimuser/untitled
|
||||
bkup_url: https://notabug.org/untitled/untitled
|
||||
depend: mdfiles
|
||||
depend: untitledwww
|
||||
}
|
||||
|
||||
{mdfiles}{
|
||||
rev: 6ebb88528e342cae48ee75a6f1bfa1b71002e1c3
|
||||
loc: docs/www/html
|
||||
url: https://codeberg.org/libreboot/lbwww
|
||||
bkup_url: https://git.disroot.org/libreboot/lbwww
|
||||
depend: imgfiles
|
||||
}
|
||||
|
||||
{imgfiles}{
|
||||
rev: 918c0ba07cf45f07836fa8c312fc51b48db32e0a
|
||||
loc: docs/www/html/site/img
|
||||
url: https://codeberg.org/libreboot/lbwww-img
|
||||
bkup_url: https://git.disroot.org/libreboot/lbwww-img
|
||||
}
|
||||
|
||||
{untitledwww}{
|
||||
rev: 78cdadea40143a7e55b8eae48f4239d31ebb5c16
|
||||
loc: docs/www/untitled
|
||||
url: https://codeberg.org/vimuser/untitled-website
|
||||
bkup_url: https://notabug.org/untitled/untitled-website
|
||||
}
|
||||
@@ -1,5 +0,0 @@
|
||||
# SPDX-License-Identifier: GPL-3.0-or-later
|
||||
|
||||
rev="HEAD"
|
||||
url="https://github.com/mozilla-firefox/firefox"
|
||||
bkup_url="https://github.com/mozilla-firefox/firefox"
|
||||
@@ -0,0 +1,6 @@
|
||||
{flashrom}{
|
||||
rev: fba29da188b4a3aa8a3cf6f5a3d13c37a5d9e1d7
|
||||
loc: flashrom
|
||||
url: https://review.coreboot.org/flashrom.git
|
||||
bkup_url: https://github.com/flashrom/flashrom
|
||||
}
|
||||
@@ -0,0 +1,14 @@
|
||||
{grub}{
|
||||
rev: 64e3cee72ab8f5876abfebb263b5e6cf7c4a9a4e
|
||||
loc: grub
|
||||
url: git://git.savannah.gnu.org/grub.git
|
||||
bkup_url: https://codeberg.org/libreboot/grub
|
||||
depend: gnulib
|
||||
}
|
||||
|
||||
{gnulib}{
|
||||
rev: 9f48fb992a3d7e96610c4ce8be969cff2d61a01b
|
||||
loc: grub/gnulib
|
||||
url: git://git.sv.gnu.org/gnulib
|
||||
bkup_url: https://codeberg.org/libreboot/gnulib
|
||||
}
|
||||
@@ -0,0 +1,6 @@
|
||||
{memtest86plus}{
|
||||
rev: 5dcd424ea7afb857c1171e747ef064d98d26afeb
|
||||
loc: memtest86plus
|
||||
url: https://codeberg.org/libreboot/memtest86plus
|
||||
bkup_url: https://github.com/memtest86plus/memtest86plus.git
|
||||
}
|
||||
@@ -0,0 +1,6 @@
|
||||
{pico-sdk}{
|
||||
rev: 6a7db34ff63345a7badec79ebea3aaef1712f374
|
||||
loc: pico-sdk
|
||||
url: https://codeberg.org/libreboot/pico-sdk
|
||||
bkup_url: https://github.com/raspberrypi/pico-sdk
|
||||
}
|
||||
@@ -0,0 +1,7 @@
|
||||
{pico-serprog}{
|
||||
rev: c8c16e9c11fe9e5b7230ff358f79de3f1951e1d9
|
||||
loc: pico-serprog
|
||||
url: https://codeberg.org/libreboot/pico-serprog
|
||||
bkup_url: https://git.disroot.org/libreboot/pico-serprog
|
||||
depend: pico-sdk
|
||||
}
|
||||
@@ -0,0 +1,6 @@
|
||||
{seabios}{
|
||||
rev: HEAD
|
||||
loc: seabios/seabios
|
||||
url: https://review.coreboot.org/seabios
|
||||
bkup_url: https://github.com/coreboot/seabios
|
||||
}
|
||||
@@ -0,0 +1,6 @@
|
||||
{stm32-vserprog}{
|
||||
rev: 8fcf0a4d41800631b571fa7bbd1d8b251f0a2111
|
||||
loc: stm32-vserprog
|
||||
url: https://codeberg.org/libreboot/stm32-vserprog
|
||||
bkup_url: https://git.disroot.org/libreboot/stm32-vserprog
|
||||
}
|
||||
@@ -0,0 +1,6 @@
|
||||
{u-boot}{
|
||||
rev: HEAD
|
||||
loc: u-boot/u-boot
|
||||
url: https://source.denx.de/u-boot/u-boot.git
|
||||
bkup_url: https://github.com/u-boot/u-boot.git
|
||||
}
|
||||
@@ -0,0 +1,6 @@
|
||||
{uefitool}{
|
||||
rev: 4a41c33596e9bc3ae812e763965d91ac57553e02
|
||||
loc: uefitool
|
||||
url: https://codeberg.org/libreboot/UEFITool
|
||||
bkup_url: https://github.com/LongSoft/UEFITool
|
||||
}
|
||||
@@ -0,0 +1,3 @@
|
||||
The deer logo for Libreboot is copyright 2014 Marcus Moeller and released under
|
||||
CC-0: https://creativecommons.org/publicdomain/zero/1.0/legalcode
|
||||
The grey backgrounds with it were made by Leah Rowe in 2016, also CC-0
|
||||
Binary file not shown.
|
After Width: | Height: | Size: 4.8 KiB |
Binary file not shown.
|
After Width: | Height: | Size: 3.4 KiB |
@@ -0,0 +1,2 @@
|
||||
Copyright (C) 2014, 2015, 2016, 2020, 2021, 2023 Leah Rowe <leah@libreboot.org>
|
||||
Copyright (C) 2015 Klemens Nanni <contact@autoboot.org>
|
||||
@@ -0,0 +1,695 @@
|
||||
# GRUB configuration files under resources/grub/config/
|
||||
|
||||
# This program is free software: you can redistribute it and/or modify
|
||||
# it under the terms of the GNU General Public License as published by
|
||||
# the Free Software Foundation, either version 3 of the License, or
|
||||
# (at your option) any later version.
|
||||
#
|
||||
# This program is distributed in the hope that it will be useful,
|
||||
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
# GNU General Public License for more details.
|
||||
#
|
||||
# You should have received a copy of the GNU General Public License
|
||||
# along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
#
|
||||
|
||||
# See AUTHORS for copyright holder information.
|
||||
|
||||
# Full terms of GPLv3 below, taken from https://www.gnu.org/licenses/licenses.html
|
||||
________________________________________________________________________
|
||||
|
||||
GNU GENERAL PUBLIC LICENSE
|
||||
Version 3, 29 June 2007
|
||||
|
||||
Copyright (C) 2007 Free Software Foundation, Inc. <http://fsf.org/>
|
||||
Everyone is permitted to copy and distribute verbatim copies
|
||||
of this license document, but changing it is not allowed.
|
||||
|
||||
Preamble
|
||||
|
||||
The GNU General Public License is a free, copyleft license for
|
||||
software and other kinds of works.
|
||||
|
||||
The licenses for most software and other practical works are designed
|
||||
to take away your freedom to share and change the works. By contrast,
|
||||
the GNU General Public License is intended to guarantee your freedom to
|
||||
share and change all versions of a program--to make sure it remains free
|
||||
software for all its users. We, the Free Software Foundation, use the
|
||||
GNU General Public License for most of our software; it applies also to
|
||||
any other work released this way by its authors. You can apply it to
|
||||
your programs, too.
|
||||
|
||||
When we speak of free software, we are referring to freedom, not
|
||||
price. Our General Public Licenses are designed to make sure that you
|
||||
have the freedom to distribute copies of free software (and charge for
|
||||
them if you wish), that you receive source code or can get it if you
|
||||
want it, that you can change the software or use pieces of it in new
|
||||
free programs, and that you know you can do these things.
|
||||
|
||||
To protect your rights, we need to prevent others from denying you
|
||||
these rights or asking you to surrender the rights. Therefore, you have
|
||||
certain responsibilities if you distribute copies of the software, or if
|
||||
you modify it: responsibilities to respect the freedom of others.
|
||||
|
||||
For example, if you distribute copies of such a program, whether
|
||||
gratis or for a fee, you must pass on to the recipients the same
|
||||
freedoms that you received. You must make sure that they, too, receive
|
||||
or can get the source code. And you must show them these terms so they
|
||||
know their rights.
|
||||
|
||||
Developers that use the GNU GPL protect your rights with two steps:
|
||||
(1) assert copyright on the software, and (2) offer you this License
|
||||
giving you legal permission to copy, distribute and/or modify it.
|
||||
|
||||
For the developers' and authors' protection, the GPL clearly explains
|
||||
that there is no warranty for this free software. For both users' and
|
||||
authors' sake, the GPL requires that modified versions be marked as
|
||||
changed, so that their problems will not be attributed erroneously to
|
||||
authors of previous versions.
|
||||
|
||||
Some devices are designed to deny users access to install or run
|
||||
modified versions of the software inside them, although the manufacturer
|
||||
can do so. This is fundamentally incompatible with the aim of
|
||||
protecting users' freedom to change the software. The systematic
|
||||
pattern of such abuse occurs in the area of products for individuals to
|
||||
use, which is precisely where it is most unacceptable. Therefore, we
|
||||
have designed this version of the GPL to prohibit the practice for those
|
||||
products. If such problems arise substantially in other domains, we
|
||||
stand ready to extend this provision to those domains in future versions
|
||||
of the GPL, as needed to protect the freedom of users.
|
||||
|
||||
Finally, every program is threatened constantly by software patents.
|
||||
States should not allow patents to restrict development and use of
|
||||
software on general-purpose computers, but in those that do, we wish to
|
||||
avoid the special danger that patents applied to a free program could
|
||||
make it effectively proprietary. To prevent this, the GPL assures that
|
||||
patents cannot be used to render the program non-free.
|
||||
|
||||
The precise terms and conditions for copying, distribution and
|
||||
modification follow.
|
||||
|
||||
TERMS AND CONDITIONS
|
||||
|
||||
0. Definitions.
|
||||
|
||||
"This License" refers to version 3 of the GNU General Public License.
|
||||
|
||||
"Copyright" also means copyright-like laws that apply to other kinds of
|
||||
works, such as semiconductor masks.
|
||||
|
||||
"The Program" refers to any copyrightable work licensed under this
|
||||
License. Each licensee is addressed as "you". "Licensees" and
|
||||
"recipients" may be individuals or organizations.
|
||||
|
||||
To "modify" a work means to copy from or adapt all or part of the work
|
||||
in a fashion requiring copyright permission, other than the making of an
|
||||
exact copy. The resulting work is called a "modified version" of the
|
||||
earlier work or a work "based on" the earlier work.
|
||||
|
||||
A "covered work" means either the unmodified Program or a work based
|
||||
on the Program.
|
||||
|
||||
To "propagate" a work means to do anything with it that, without
|
||||
permission, would make you directly or secondarily liable for
|
||||
infringement under applicable copyright law, except executing it on a
|
||||
computer or modifying a private copy. Propagation includes copying,
|
||||
distribution (with or without modification), making available to the
|
||||
public, and in some countries other activities as well.
|
||||
|
||||
To "convey" a work means any kind of propagation that enables other
|
||||
parties to make or receive copies. Mere interaction with a user through
|
||||
a computer network, with no transfer of a copy, is not conveying.
|
||||
|
||||
An interactive user interface displays "Appropriate Legal Notices"
|
||||
to the extent that it includes a convenient and prominently visible
|
||||
feature that (1) displays an appropriate copyright notice, and (2)
|
||||
tells the user that there is no warranty for the work (except to the
|
||||
extent that warranties are provided), that licensees may convey the
|
||||
work under this License, and how to view a copy of this License. If
|
||||
the interface presents a list of user commands or options, such as a
|
||||
menu, a prominent item in the list meets this criterion.
|
||||
|
||||
1. Source Code.
|
||||
|
||||
The "source code" for a work means the preferred form of the work
|
||||
for making modifications to it. "Object code" means any non-source
|
||||
form of a work.
|
||||
|
||||
A "Standard Interface" means an interface that either is an official
|
||||
standard defined by a recognized standards body, or, in the case of
|
||||
interfaces specified for a particular programming language, one that
|
||||
is widely used among developers working in that language.
|
||||
|
||||
The "System Libraries" of an executable work include anything, other
|
||||
than the work as a whole, that (a) is included in the normal form of
|
||||
packaging a Major Component, but which is not part of that Major
|
||||
Component, and (b) serves only to enable use of the work with that
|
||||
Major Component, or to implement a Standard Interface for which an
|
||||
implementation is available to the public in source code form. A
|
||||
"Major Component", in this context, means a major essential component
|
||||
(kernel, window system, and so on) of the specific operating system
|
||||
(if any) on which the executable work runs, or a compiler used to
|
||||
produce the work, or an object code interpreter used to run it.
|
||||
|
||||
The "Corresponding Source" for a work in object code form means all
|
||||
the source code needed to generate, install, and (for an executable
|
||||
work) run the object code and to modify the work, including scripts to
|
||||
control those activities. However, it does not include the work's
|
||||
System Libraries, or general-purpose tools or generally available free
|
||||
programs which are used unmodified in performing those activities but
|
||||
which are not part of the work. For example, Corresponding Source
|
||||
includes interface definition files associated with source files for
|
||||
the work, and the source code for shared libraries and dynamically
|
||||
linked subprograms that the work is specifically designed to require,
|
||||
such as by intimate data communication or control flow between those
|
||||
subprograms and other parts of the work.
|
||||
|
||||
The Corresponding Source need not include anything that users
|
||||
can regenerate automatically from other parts of the Corresponding
|
||||
Source.
|
||||
|
||||
The Corresponding Source for a work in source code form is that
|
||||
same work.
|
||||
|
||||
2. Basic Permissions.
|
||||
|
||||
All rights granted under this License are granted for the term of
|
||||
copyright on the Program, and are irrevocable provided the stated
|
||||
conditions are met. This License explicitly affirms your unlimited
|
||||
permission to run the unmodified Program. The output from running a
|
||||
covered work is covered by this License only if the output, given its
|
||||
content, constitutes a covered work. This License acknowledges your
|
||||
rights of fair use or other equivalent, as provided by copyright law.
|
||||
|
||||
You may make, run and propagate covered works that you do not
|
||||
convey, without conditions so long as your license otherwise remains
|
||||
in force. You may convey covered works to others for the sole purpose
|
||||
of having them make modifications exclusively for you, or provide you
|
||||
with facilities for running those works, provided that you comply with
|
||||
the terms of this License in conveying all material for which you do
|
||||
not control copyright. Those thus making or running the covered works
|
||||
for you must do so exclusively on your behalf, under your direction
|
||||
and control, on terms that prohibit them from making any copies of
|
||||
your copyrighted material outside their relationship with you.
|
||||
|
||||
Conveying under any other circumstances is permitted solely under
|
||||
the conditions stated below. Sublicensing is not allowed; section 10
|
||||
makes it unnecessary.
|
||||
|
||||
3. Protecting Users' Legal Rights From Anti-Circumvention Law.
|
||||
|
||||
No covered work shall be deemed part of an effective technological
|
||||
measure under any applicable law fulfilling obligations under article
|
||||
11 of the WIPO copyright treaty adopted on 20 December 1996, or
|
||||
similar laws prohibiting or restricting circumvention of such
|
||||
measures.
|
||||
|
||||
When you convey a covered work, you waive any legal power to forbid
|
||||
circumvention of technological measures to the extent such circumvention
|
||||
is effected by exercising rights under this License with respect to
|
||||
the covered work, and you disclaim any intention to limit operation or
|
||||
modification of the work as a means of enforcing, against the work's
|
||||
users, your or third parties' legal rights to forbid circumvention of
|
||||
technological measures.
|
||||
|
||||
4. Conveying Verbatim Copies.
|
||||
|
||||
You may convey verbatim copies of the Program's source code as you
|
||||
receive it, in any medium, provided that you conspicuously and
|
||||
appropriately publish on each copy an appropriate copyright notice;
|
||||
keep intact all notices stating that this License and any
|
||||
non-permissive terms added in accord with section 7 apply to the code;
|
||||
keep intact all notices of the absence of any warranty; and give all
|
||||
recipients a copy of this License along with the Program.
|
||||
|
||||
You may charge any price or no price for each copy that you convey,
|
||||
and you may offer support or warranty protection for a fee.
|
||||
|
||||
5. Conveying Modified Source Versions.
|
||||
|
||||
You may convey a work based on the Program, or the modifications to
|
||||
produce it from the Program, in the form of source code under the
|
||||
terms of section 4, provided that you also meet all of these conditions:
|
||||
|
||||
a) The work must carry prominent notices stating that you modified
|
||||
it, and giving a relevant date.
|
||||
|
||||
b) The work must carry prominent notices stating that it is
|
||||
released under this License and any conditions added under section
|
||||
7. This requirement modifies the requirement in section 4 to
|
||||
"keep intact all notices".
|
||||
|
||||
c) You must license the entire work, as a whole, under this
|
||||
License to anyone who comes into possession of a copy. This
|
||||
License will therefore apply, along with any applicable section 7
|
||||
additional terms, to the whole of the work, and all its parts,
|
||||
regardless of how they are packaged. This License gives no
|
||||
permission to license the work in any other way, but it does not
|
||||
invalidate such permission if you have separately received it.
|
||||
|
||||
d) If the work has interactive user interfaces, each must display
|
||||
Appropriate Legal Notices; however, if the Program has interactive
|
||||
interfaces that do not display Appropriate Legal Notices, your
|
||||
work need not make them do so.
|
||||
|
||||
A compilation of a covered work with other separate and independent
|
||||
works, which are not by their nature extensions of the covered work,
|
||||
and which are not combined with it such as to form a larger program,
|
||||
in or on a volume of a storage or distribution medium, is called an
|
||||
"aggregate" if the compilation and its resulting copyright are not
|
||||
used to limit the access or legal rights of the compilation's users
|
||||
beyond what the individual works permit. Inclusion of a covered work
|
||||
in an aggregate does not cause this License to apply to the other
|
||||
parts of the aggregate.
|
||||
|
||||
6. Conveying Non-Source Forms.
|
||||
|
||||
You may convey a covered work in object code form under the terms
|
||||
of sections 4 and 5, provided that you also convey the
|
||||
machine-readable Corresponding Source under the terms of this License,
|
||||
in one of these ways:
|
||||
|
||||
a) Convey the object code in, or embodied in, a physical product
|
||||
(including a physical distribution medium), accompanied by the
|
||||
Corresponding Source fixed on a durable physical medium
|
||||
customarily used for software interchange.
|
||||
|
||||
b) Convey the object code in, or embodied in, a physical product
|
||||
(including a physical distribution medium), accompanied by a
|
||||
written offer, valid for at least three years and valid for as
|
||||
long as you offer spare parts or customer support for that product
|
||||
model, to give anyone who possesses the object code either (1) a
|
||||
copy of the Corresponding Source for all the software in the
|
||||
product that is covered by this License, on a durable physical
|
||||
medium customarily used for software interchange, for a price no
|
||||
more than your reasonable cost of physically performing this
|
||||
conveying of source, or (2) access to copy the
|
||||
Corresponding Source from a network server at no charge.
|
||||
|
||||
c) Convey individual copies of the object code with a copy of the
|
||||
written offer to provide the Corresponding Source. This
|
||||
alternative is allowed only occasionally and noncommercially, and
|
||||
only if you received the object code with such an offer, in accord
|
||||
with subsection 6b.
|
||||
|
||||
d) Convey the object code by offering access from a designated
|
||||
place (gratis or for a charge), and offer equivalent access to the
|
||||
Corresponding Source in the same way through the same place at no
|
||||
further charge. You need not require recipients to copy the
|
||||
Corresponding Source along with the object code. If the place to
|
||||
copy the object code is a network server, the Corresponding Source
|
||||
may be on a different server (operated by you or a third party)
|
||||
that supports equivalent copying facilities, provided you maintain
|
||||
clear directions next to the object code saying where to find the
|
||||
Corresponding Source. Regardless of what server hosts the
|
||||
Corresponding Source, you remain obligated to ensure that it is
|
||||
available for as long as needed to satisfy these requirements.
|
||||
|
||||
e) Convey the object code using peer-to-peer transmission, provided
|
||||
you inform other peers where the object code and Corresponding
|
||||
Source of the work are being offered to the general public at no
|
||||
charge under subsection 6d.
|
||||
|
||||
A separable portion of the object code, whose source code is excluded
|
||||
from the Corresponding Source as a System Library, need not be
|
||||
included in conveying the object code work.
|
||||
|
||||
A "User Product" is either (1) a "consumer product", which means any
|
||||
tangible personal property which is normally used for personal, family,
|
||||
or household purposes, or (2) anything designed or sold for incorporation
|
||||
into a dwelling. In determining whether a product is a consumer product,
|
||||
doubtful cases shall be resolved in favor of coverage. For a particular
|
||||
product received by a particular user, "normally used" refers to a
|
||||
typical or common use of that class of product, regardless of the status
|
||||
of the particular user or of the way in which the particular user
|
||||
actually uses, or expects or is expected to use, the product. A product
|
||||
is a consumer product regardless of whether the product has substantial
|
||||
commercial, industrial or non-consumer uses, unless such uses represent
|
||||
the only significant mode of use of the product.
|
||||
|
||||
"Installation Information" for a User Product means any methods,
|
||||
procedures, authorization keys, or other information required to install
|
||||
and execute modified versions of a covered work in that User Product from
|
||||
a modified version of its Corresponding Source. The information must
|
||||
suffice to ensure that the continued functioning of the modified object
|
||||
code is in no case prevented or interfered with solely because
|
||||
modification has been made.
|
||||
|
||||
If you convey an object code work under this section in, or with, or
|
||||
specifically for use in, a User Product, and the conveying occurs as
|
||||
part of a transaction in which the right of possession and use of the
|
||||
User Product is transferred to the recipient in perpetuity or for a
|
||||
fixed term (regardless of how the transaction is characterized), the
|
||||
Corresponding Source conveyed under this section must be accompanied
|
||||
by the Installation Information. But this requirement does not apply
|
||||
if neither you nor any third party retains the ability to install
|
||||
modified object code on the User Product (for example, the work has
|
||||
been installed in ROM).
|
||||
|
||||
The requirement to provide Installation Information does not include a
|
||||
requirement to continue to provide support service, warranty, or updates
|
||||
for a work that has been modified or installed by the recipient, or for
|
||||
the User Product in which it has been modified or installed. Access to a
|
||||
network may be denied when the modification itself materially and
|
||||
adversely affects the operation of the network or violates the rules and
|
||||
protocols for communication across the network.
|
||||
|
||||
Corresponding Source conveyed, and Installation Information provided,
|
||||
in accord with this section must be in a format that is publicly
|
||||
documented (and with an implementation available to the public in
|
||||
source code form), and must require no special password or key for
|
||||
unpacking, reading or copying.
|
||||
|
||||
7. Additional Terms.
|
||||
|
||||
"Additional permissions" are terms that supplement the terms of this
|
||||
License by making exceptions from one or more of its conditions.
|
||||
Additional permissions that are applicable to the entire Program shall
|
||||
be treated as though they were included in this License, to the extent
|
||||
that they are valid under applicable law. If additional permissions
|
||||
apply only to part of the Program, that part may be used separately
|
||||
under those permissions, but the entire Program remains governed by
|
||||
this License without regard to the additional permissions.
|
||||
|
||||
When you convey a copy of a covered work, you may at your option
|
||||
remove any additional permissions from that copy, or from any part of
|
||||
it. (Additional permissions may be written to require their own
|
||||
removal in certain cases when you modify the work.) You may place
|
||||
additional permissions on material, added by you to a covered work,
|
||||
for which you have or can give appropriate copyright permission.
|
||||
|
||||
Notwithstanding any other provision of this License, for material you
|
||||
add to a covered work, you may (if authorized by the copyright holders of
|
||||
that material) supplement the terms of this License with terms:
|
||||
|
||||
a) Disclaiming warranty or limiting liability differently from the
|
||||
terms of sections 15 and 16 of this License; or
|
||||
|
||||
b) Requiring preservation of specified reasonable legal notices or
|
||||
author attributions in that material or in the Appropriate Legal
|
||||
Notices displayed by works containing it; or
|
||||
|
||||
c) Prohibiting misrepresentation of the origin of that material, or
|
||||
requiring that modified versions of such material be marked in
|
||||
reasonable ways as different from the original version; or
|
||||
|
||||
d) Limiting the use for publicity purposes of names of licensors or
|
||||
authors of the material; or
|
||||
|
||||
e) Declining to grant rights under trademark law for use of some
|
||||
trade names, trademarks, or service marks; or
|
||||
|
||||
f) Requiring indemnification of licensors and authors of that
|
||||
material by anyone who conveys the material (or modified versions of
|
||||
it) with contractual assumptions of liability to the recipient, for
|
||||
any liability that these contractual assumptions directly impose on
|
||||
those licensors and authors.
|
||||
|
||||
All other non-permissive additional terms are considered "further
|
||||
restrictions" within the meaning of section 10. If the Program as you
|
||||
received it, or any part of it, contains a notice stating that it is
|
||||
governed by this License along with a term that is a further
|
||||
restriction, you may remove that term. If a license document contains
|
||||
a further restriction but permits relicensing or conveying under this
|
||||
License, you may add to a covered work material governed by the terms
|
||||
of that license document, provided that the further restriction does
|
||||
not survive such relicensing or conveying.
|
||||
|
||||
If you add terms to a covered work in accord with this section, you
|
||||
must place, in the relevant source files, a statement of the
|
||||
additional terms that apply to those files, or a notice indicating
|
||||
where to find the applicable terms.
|
||||
|
||||
Additional terms, permissive or non-permissive, may be stated in the
|
||||
form of a separately written license, or stated as exceptions;
|
||||
the above requirements apply either way.
|
||||
|
||||
8. Termination.
|
||||
|
||||
You may not propagate or modify a covered work except as expressly
|
||||
provided under this License. Any attempt otherwise to propagate or
|
||||
modify it is void, and will automatically terminate your rights under
|
||||
this License (including any patent licenses granted under the third
|
||||
paragraph of section 11).
|
||||
|
||||
However, if you cease all violation of this License, then your
|
||||
license from a particular copyright holder is reinstated (a)
|
||||
provisionally, unless and until the copyright holder explicitly and
|
||||
finally terminates your license, and (b) permanently, if the copyright
|
||||
holder fails to notify you of the violation by some reasonable means
|
||||
prior to 60 days after the cessation.
|
||||
|
||||
Moreover, your license from a particular copyright holder is
|
||||
reinstated permanently if the copyright holder notifies you of the
|
||||
violation by some reasonable means, this is the first time you have
|
||||
received notice of violation of this License (for any work) from that
|
||||
copyright holder, and you cure the violation prior to 30 days after
|
||||
your receipt of the notice.
|
||||
|
||||
Termination of your rights under this section does not terminate the
|
||||
licenses of parties who have received copies or rights from you under
|
||||
this License. If your rights have been terminated and not permanently
|
||||
reinstated, you do not qualify to receive new licenses for the same
|
||||
material under section 10.
|
||||
|
||||
9. Acceptance Not Required for Having Copies.
|
||||
|
||||
You are not required to accept this License in order to receive or
|
||||
run a copy of the Program. Ancillary propagation of a covered work
|
||||
occurring solely as a consequence of using peer-to-peer transmission
|
||||
to receive a copy likewise does not require acceptance. However,
|
||||
nothing other than this License grants you permission to propagate or
|
||||
modify any covered work. These actions infringe copyright if you do
|
||||
not accept this License. Therefore, by modifying or propagating a
|
||||
covered work, you indicate your acceptance of this License to do so.
|
||||
|
||||
10. Automatic Licensing of Downstream Recipients.
|
||||
|
||||
Each time you convey a covered work, the recipient automatically
|
||||
receives a license from the original licensors, to run, modify and
|
||||
propagate that work, subject to this License. You are not responsible
|
||||
for enforcing compliance by third parties with this License.
|
||||
|
||||
An "entity transaction" is a transaction transferring control of an
|
||||
organization, or substantially all assets of one, or subdividing an
|
||||
organization, or merging organizations. If propagation of a covered
|
||||
work results from an entity transaction, each party to that
|
||||
transaction who receives a copy of the work also receives whatever
|
||||
licenses to the work the party's predecessor in interest had or could
|
||||
give under the previous paragraph, plus a right to possession of the
|
||||
Corresponding Source of the work from the predecessor in interest, if
|
||||
the predecessor has it or can get it with reasonable efforts.
|
||||
|
||||
You may not impose any further restrictions on the exercise of the
|
||||
rights granted or affirmed under this License. For example, you may
|
||||
not impose a license fee, royalty, or other charge for exercise of
|
||||
rights granted under this License, and you may not initiate litigation
|
||||
(including a cross-claim or counterclaim in a lawsuit) alleging that
|
||||
any patent claim is infringed by making, using, selling, offering for
|
||||
sale, or importing the Program or any portion of it.
|
||||
|
||||
11. Patents.
|
||||
|
||||
A "contributor" is a copyright holder who authorizes use under this
|
||||
License of the Program or a work on which the Program is based. The
|
||||
work thus licensed is called the contributor's "contributor version".
|
||||
|
||||
A contributor's "essential patent claims" are all patent claims
|
||||
owned or controlled by the contributor, whether already acquired or
|
||||
hereafter acquired, that would be infringed by some manner, permitted
|
||||
by this License, of making, using, or selling its contributor version,
|
||||
but do not include claims that would be infringed only as a
|
||||
consequence of further modification of the contributor version. For
|
||||
purposes of this definition, "control" includes the right to grant
|
||||
patent sublicenses in a manner consistent with the requirements of
|
||||
this License.
|
||||
|
||||
Each contributor grants you a non-exclusive, worldwide, royalty-free
|
||||
patent license under the contributor's essential patent claims, to
|
||||
make, use, sell, offer for sale, import and otherwise run, modify and
|
||||
propagate the contents of its contributor version.
|
||||
|
||||
In the following three paragraphs, a "patent license" is any express
|
||||
agreement or commitment, however denominated, not to enforce a patent
|
||||
(such as an express permission to practice a patent or covenant not to
|
||||
sue for patent infringement). To "grant" such a patent license to a
|
||||
party means to make such an agreement or commitment not to enforce a
|
||||
patent against the party.
|
||||
|
||||
If you convey a covered work, knowingly relying on a patent license,
|
||||
and the Corresponding Source of the work is not available for anyone
|
||||
to copy, free of charge and under the terms of this License, through a
|
||||
publicly available network server or other readily accessible means,
|
||||
then you must either (1) cause the Corresponding Source to be so
|
||||
available, or (2) arrange to deprive yourself of the benefit of the
|
||||
patent license for this particular work, or (3) arrange, in a manner
|
||||
consistent with the requirements of this License, to extend the patent
|
||||
license to downstream recipients. "Knowingly relying" means you have
|
||||
actual knowledge that, but for the patent license, your conveying the
|
||||
covered work in a country, or your recipient's use of the covered work
|
||||
in a country, would infringe one or more identifiable patents in that
|
||||
country that you have reason to believe are valid.
|
||||
|
||||
If, pursuant to or in connection with a single transaction or
|
||||
arrangement, you convey, or propagate by procuring conveyance of, a
|
||||
covered work, and grant a patent license to some of the parties
|
||||
receiving the covered work authorizing them to use, propagate, modify
|
||||
or convey a specific copy of the covered work, then the patent license
|
||||
you grant is automatically extended to all recipients of the covered
|
||||
work and works based on it.
|
||||
|
||||
A patent license is "discriminatory" if it does not include within
|
||||
the scope of its coverage, prohibits the exercise of, or is
|
||||
conditioned on the non-exercise of one or more of the rights that are
|
||||
specifically granted under this License. You may not convey a covered
|
||||
work if you are a party to an arrangement with a third party that is
|
||||
in the business of distributing software, under which you make payment
|
||||
to the third party based on the extent of your activity of conveying
|
||||
the work, and under which the third party grants, to any of the
|
||||
parties who would receive the covered work from you, a discriminatory
|
||||
patent license (a) in connection with copies of the covered work
|
||||
conveyed by you (or copies made from those copies), or (b) primarily
|
||||
for and in connection with specific products or compilations that
|
||||
contain the covered work, unless you entered into that arrangement,
|
||||
or that patent license was granted, prior to 28 March 2007.
|
||||
|
||||
Nothing in this License shall be construed as excluding or limiting
|
||||
any implied license or other defenses to infringement that may
|
||||
otherwise be available to you under applicable patent law.
|
||||
|
||||
12. No Surrender of Others' Freedom.
|
||||
|
||||
If conditions are imposed on you (whether by court order, agreement or
|
||||
otherwise) that contradict the conditions of this License, they do not
|
||||
excuse you from the conditions of this License. If you cannot convey a
|
||||
covered work so as to satisfy simultaneously your obligations under this
|
||||
License and any other pertinent obligations, then as a consequence you may
|
||||
not convey it at all. For example, if you agree to terms that obligate you
|
||||
to collect a royalty for further conveying from those to whom you convey
|
||||
the Program, the only way you could satisfy both those terms and this
|
||||
License would be to refrain entirely from conveying the Program.
|
||||
|
||||
13. Use with the GNU Affero General Public License.
|
||||
|
||||
Notwithstanding any other provision of this License, you have
|
||||
permission to link or combine any covered work with a work licensed
|
||||
under version 3 of the GNU Affero General Public License into a single
|
||||
combined work, and to convey the resulting work. The terms of this
|
||||
License will continue to apply to the part which is the covered work,
|
||||
but the special requirements of the GNU Affero General Public License,
|
||||
section 13, concerning interaction through a network will apply to the
|
||||
combination as such.
|
||||
|
||||
14. Revised Versions of this License.
|
||||
|
||||
The Free Software Foundation may publish revised and/or new versions of
|
||||
the GNU General Public License from time to time. Such new versions will
|
||||
be similar in spirit to the present version, but may differ in detail to
|
||||
address new problems or concerns.
|
||||
|
||||
Each version is given a distinguishing version number. If the
|
||||
Program specifies that a certain numbered version of the GNU General
|
||||
Public License "or any later version" applies to it, you have the
|
||||
option of following the terms and conditions either of that numbered
|
||||
version or of any later version published by the Free Software
|
||||
Foundation. If the Program does not specify a version number of the
|
||||
GNU General Public License, you may choose any version ever published
|
||||
by the Free Software Foundation.
|
||||
|
||||
If the Program specifies that a proxy can decide which future
|
||||
versions of the GNU General Public License can be used, that proxy's
|
||||
public statement of acceptance of a version permanently authorizes you
|
||||
to choose that version for the Program.
|
||||
|
||||
Later license versions may give you additional or different
|
||||
permissions. However, no additional obligations are imposed on any
|
||||
author or copyright holder as a result of your choosing to follow a
|
||||
later version.
|
||||
|
||||
15. Disclaimer of Warranty.
|
||||
|
||||
THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY
|
||||
APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT
|
||||
HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY
|
||||
OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO,
|
||||
THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
|
||||
PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM
|
||||
IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF
|
||||
ALL NECESSARY SERVICING, REPAIR OR CORRECTION.
|
||||
|
||||
16. Limitation of Liability.
|
||||
|
||||
IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
|
||||
WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS
|
||||
THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY
|
||||
GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE
|
||||
USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF
|
||||
DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD
|
||||
PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS),
|
||||
EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF
|
||||
SUCH DAMAGES.
|
||||
|
||||
17. Interpretation of Sections 15 and 16.
|
||||
|
||||
If the disclaimer of warranty and limitation of liability provided
|
||||
above cannot be given local legal effect according to their terms,
|
||||
reviewing courts shall apply local law that most closely approximates
|
||||
an absolute waiver of all civil liability in connection with the
|
||||
Program, unless a warranty or assumption of liability accompanies a
|
||||
copy of the Program in return for a fee.
|
||||
|
||||
END OF TERMS AND CONDITIONS
|
||||
|
||||
How to Apply These Terms to Your New Programs
|
||||
|
||||
If you develop a new program, and you want it to be of the greatest
|
||||
possible use to the public, the best way to achieve this is to make it
|
||||
free software which everyone can redistribute and change under these terms.
|
||||
|
||||
To do so, attach the following notices to the program. It is safest
|
||||
to attach them to the start of each source file to most effectively
|
||||
state the exclusion of warranty; and each file should have at least
|
||||
the "copyright" line and a pointer to where the full notice is found.
|
||||
|
||||
<one line to give the program's name and a brief idea of what it does.>
|
||||
Copyright (C) <year> <name of author>
|
||||
|
||||
This program is free software: you can redistribute it and/or modify
|
||||
it under the terms of the GNU General Public License as published by
|
||||
the Free Software Foundation, either version 3 of the License, or
|
||||
(at your option) any later version.
|
||||
|
||||
This program is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
GNU General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU General Public License
|
||||
along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
|
||||
Also add information on how to contact you by electronic and paper mail.
|
||||
|
||||
If the program does terminal interaction, make it output a short
|
||||
notice like this when it starts in an interactive mode:
|
||||
|
||||
<program> Copyright (C) <year> <name of author>
|
||||
This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
|
||||
This is free software, and you are welcome to redistribute it
|
||||
under certain conditions; type `show c' for details.
|
||||
|
||||
The hypothetical commands `show w' and `show c' should show the appropriate
|
||||
parts of the General Public License. Of course, your program's commands
|
||||
might be different; for a GUI interface, you would use an "about box".
|
||||
|
||||
You should also get your employer (if you work as a programmer) or school,
|
||||
if any, to sign a "copyright disclaimer" for the program, if necessary.
|
||||
For more information on this, and how to apply and follow the GNU GPL, see
|
||||
<http://www.gnu.org/licenses/>.
|
||||
|
||||
The GNU General Public License does not permit incorporating your program
|
||||
into proprietary programs. If your program is a subroutine library, you
|
||||
may consider it more useful to permit linking proprietary applications with
|
||||
the library. If this is what you want to do, use the GNU Lesser General
|
||||
Public License instead of this License. But first, please read
|
||||
<http://www.gnu.org/philosophy/why-not-lgpl.html>.
|
||||
@@ -0,0 +1,215 @@
|
||||
set prefix=(memdisk)/boot/grub
|
||||
|
||||
insmod at_keyboard
|
||||
insmod usb_keyboard
|
||||
insmod nativedisk
|
||||
insmod ehci
|
||||
insmod ohci
|
||||
insmod uhci
|
||||
insmod usb
|
||||
insmod usbms
|
||||
insmod regexp
|
||||
|
||||
terminal_input --append at_keyboard
|
||||
terminal_input --append usb_keyboard
|
||||
terminal_output --append cbmemc
|
||||
|
||||
gfxpayload=keep
|
||||
terminal_output --append gfxterm
|
||||
|
||||
if [ -f (cbfsdisk)/background.png ]; then
|
||||
insmod png
|
||||
background_image (cbfsdisk)/background.png
|
||||
elif [ -f (cbfsdisk)/background.jpg ]; then
|
||||
insmod jpeg
|
||||
background_image (cbfsdisk)/background.jpg
|
||||
fi
|
||||
|
||||
set default="0"
|
||||
if [ -f (cbfsdisk)/timeout.cfg ]; then
|
||||
source (cbfsdisk)/timeout.cfg
|
||||
else
|
||||
set timeout=5
|
||||
fi
|
||||
set grub_scan_disk="both"
|
||||
if [ -f (cbfsdisk)/scan.cfg ]; then
|
||||
source (cbfsdisk)/scan.cfg
|
||||
fi
|
||||
|
||||
if [ -f (cbfsdisk)/keymap.gkb ]; then
|
||||
keymap (cbfsdisk)/keymap.gkb
|
||||
elif [ -f (cbfsdisk)/keymap.cfg ]; then
|
||||
source (cbfsdisk)/keymap.cfg
|
||||
else
|
||||
keymap usqwerty
|
||||
fi
|
||||
|
||||
function try_user_config {
|
||||
set root="${1}"
|
||||
for dir in boot grub grub2 boot/grub boot/grub2; do
|
||||
for name in '' osboot_ autoboot_ libreboot_ coreboot_; do
|
||||
if [ -f /"${dir}"/"${name}"grub.cfg ]; then
|
||||
unset superusers
|
||||
configfile /"${dir}"/"${name}"grub.cfg
|
||||
fi
|
||||
done
|
||||
done
|
||||
}
|
||||
function search_grub {
|
||||
echo -n "Attempting to load grub.cfg from '${1}' devices"
|
||||
for i in 0 1 2 3 4 5 6 7 8 9 10 11; do
|
||||
for part in 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20; do
|
||||
try_user_config "(${1}${i},${part})"
|
||||
done
|
||||
# raw devices e.g. (ahci0) instead of (ahci0,1)
|
||||
try_user_config "(${1}${i})"
|
||||
done
|
||||
echo # Insert newline
|
||||
}
|
||||
|
||||
function try_isolinux_config {
|
||||
set root="${1}"
|
||||
for dir in '' /boot; do
|
||||
if [ -f "${dir}"/isolinux/isolinux.cfg ]; then
|
||||
syslinux_configfile -i "${dir}"/isolinux/isolinux.cfg
|
||||
elif [ -f "${dir}"/syslinux/syslinux.cfg ]; then
|
||||
syslinux_configfile -s "${dir}"/syslinux/syslinux.cfg
|
||||
fi
|
||||
done
|
||||
}
|
||||
function search_isolinux {
|
||||
echo "\nAttempting to parse isolinux/syslinux config from '${1}' devices"
|
||||
for i in 0 1 2 3 4 5 6 7 8 9 10 11; do
|
||||
for part in 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20; do
|
||||
try_isolinux_config "(${1}${i},${part})"
|
||||
done
|
||||
# raw devices e.g. (usb0) instead of (usb0,1)
|
||||
try_isolinux_config "(${1}${i})"
|
||||
done
|
||||
echo # Insert newline
|
||||
}
|
||||
menuentry 'Load Operating System (incl. fully encrypted disks) [o]' --hotkey='o' {
|
||||
|
||||
if [ "${grub_scan_disk}" != "ata" ]; then
|
||||
search_grub ahci
|
||||
fi
|
||||
if [ "${grub_scan_disk}" != "ahci" ]; then
|
||||
search_grub ata
|
||||
fi
|
||||
|
||||
# grub device enumeration is very slow, so checks are hardcoded
|
||||
|
||||
# TODO: add more strings, based on what distros set up when
|
||||
# the user select auto-partitioning on those installers
|
||||
lvmvol="lvm/grubcrypt-bootvol lvm/grubcrypt-rootvol"
|
||||
|
||||
raidvol="md/0 md/1 md/2 md/3 md/4 md/5 md/6 md/7 md/8 md/9"
|
||||
|
||||
# in practise, doing multiple redundant checks is perfectly fast and
|
||||
# TODO: optimize grub itself, and use */? here for everything
|
||||
|
||||
for vol in ${lvmvol} ${raidvol} ; do
|
||||
try_user_config "${vol}"
|
||||
done
|
||||
|
||||
unset ahcidev
|
||||
unset atadev
|
||||
for i in 11 10 9 8 7 6 5 4 3 2 1 0; do
|
||||
for part in 20 19 18 17 16 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1; do
|
||||
if [ "${grub_scan_disk}" != "ata" ]; then
|
||||
ahcidev="(ahci${i},${part}) ${ahcidev}"
|
||||
fi
|
||||
if [ "${grub_scan_disk}" != "ahci" ]; then
|
||||
atadev="(ata${i},${part}) ${atadev}"
|
||||
fi
|
||||
done
|
||||
done
|
||||
|
||||
set pager=0
|
||||
echo -n "Attempting to unlock encrypted volumes"
|
||||
for dev in ${ahcidev} ${atadev} ${lvmvol} ${raidvol}; do
|
||||
if cryptomount "${dev}" ; then break ; fi
|
||||
done
|
||||
set pager=1
|
||||
echo
|
||||
|
||||
# after cryptomount, lvm volumes might be available
|
||||
for vol in ${lvmvol}; do
|
||||
try_user_config "${vol}"
|
||||
done
|
||||
|
||||
search_grub crypto
|
||||
|
||||
if [ "${grub_scan_disk}" != "ata" ]; then
|
||||
# Last resort, if all else fails
|
||||
set root=ahci0,1
|
||||
for p in / /boot/; do
|
||||
if [ -f "${p}vmlinuz" ]; then
|
||||
linux ${p}vmlinuz root=/dev/sda1 rw
|
||||
if [ -f "${p}initrd.img" ]; then
|
||||
initrd ${p}initrd.img
|
||||
fi
|
||||
fi
|
||||
done
|
||||
fi
|
||||
|
||||
if [ "${grub_scan_disk}" != "ahci" ]; then
|
||||
# Last resort (for setups that use IDE instead of SATA)
|
||||
set root=ata0,1
|
||||
for p in / /boot/; do
|
||||
if [ -f "${p}vmlinuz" ]; then
|
||||
linux ${p}vmlinuz root=/dev/sda1 rw
|
||||
if [ -f "${p}initrd.img" ]; then
|
||||
initrd ${p}initrd.img
|
||||
fi
|
||||
fi
|
||||
done
|
||||
fi
|
||||
|
||||
true # Prevent pager requiring to accept each line instead of whole screen
|
||||
}
|
||||
|
||||
menuentry 'Find and load GRUB config from USB drive [s]' --hotkey='s' {
|
||||
search_grub usb
|
||||
}
|
||||
menuentry 'Find and load ISOLINUX/EXTLINUX from USB drive [u]' --hotkey='u' {
|
||||
search_isolinux usb
|
||||
}
|
||||
menuentry 'Find and load ISOLINUX/EXTLINUX menu via AHCI [a]' --hotkey='a' {
|
||||
search_isolinux ahci
|
||||
}
|
||||
menuentry 'Find and load ISOLINUX/EXTLINUX menu via ATA/IDE [d]' --hotkey='d' {
|
||||
search_isolinux ata
|
||||
}
|
||||
if [ -f (cbfsdisk)/grubtest.cfg ]; then
|
||||
menuentry 'Load test configuration (grubtest.cfg) inside of CBFS [t]' --hotkey='t' {
|
||||
set root='(cbfsdisk)'
|
||||
if [ -f /grubtest.cfg ]; then
|
||||
configfile /grubtest.cfg
|
||||
fi
|
||||
}
|
||||
fi
|
||||
if [ -f (cbfsdisk)/seabios.elf ]; then
|
||||
menuentry 'Load SeaBIOS (payload) [b]' --hotkey='b' {
|
||||
set root='cbfsdisk'
|
||||
chainloader /seabios.elf
|
||||
}
|
||||
fi
|
||||
if [ -f (cbfsdisk)/img/grub2 ]; then
|
||||
menuentry 'Return to SeaBIOS [b]' --hotkey='b' {
|
||||
set root='cbfsdisk'
|
||||
chainloader /fallback/payload
|
||||
}
|
||||
fi
|
||||
menuentry 'Poweroff [p]' --hotkey='p' {
|
||||
halt
|
||||
}
|
||||
menuentry 'Reboot [r]' --hotkey='r' {
|
||||
reboot
|
||||
}
|
||||
if [ -f (cbfsdisk)/img/memtest ]; then
|
||||
menuentry 'Load MemTest86+ [m]' --hotkey='m' {
|
||||
set root='cbfsdisk'
|
||||
chainloader /img/memtest
|
||||
}
|
||||
fi
|
||||
@@ -0,0 +1,7 @@
|
||||
set prefix=(memdisk)/boot/grub
|
||||
|
||||
if [ -f (cbfsdisk)/grub.cfg ]; then
|
||||
source (cbfsdisk)/grub.cfg
|
||||
else
|
||||
source (memdisk)/boot/grub/grub_default.cfg
|
||||
fi
|
||||
Binary file not shown.
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user