mirror of
https://github.com/Alex313031/thorium.git
synced 2025-01-09 11:27:32 -03:00
header fix
This commit is contained in:
parent
7c81e8f30a
commit
047d3e7755
44 changed files with 6971 additions and 42 deletions
2
infra/Flatpak/com.alex313031.thorium/.gitignore
vendored
Normal file
2
infra/Flatpak/com.alex313031.thorium/.gitignore
vendored
Normal file
|
@ -0,0 +1,2 @@
|
|||
_build/
|
||||
.flatpak-builder/
|
3
infra/Flatpak/com.alex313031.thorium/.gitmodules
vendored
Normal file
3
infra/Flatpak/com.alex313031.thorium/.gitmodules
vendored
Normal file
|
@ -0,0 +1,3 @@
|
|||
[submodule "shared-modules"]
|
||||
path = shared-modules
|
||||
url = https://github.com/flathub/shared-modules
|
63
infra/Flatpak/com.alex313031.thorium/README.md
Normal file
63
infra/Flatpak/com.alex313031.thorium/README.md
Normal file
|
@ -0,0 +1,63 @@
|
|||
## Chromium Flatpak
|
||||
|
||||
### Extension points
|
||||
|
||||
To avoid having to expose more of the host filesystem in the sandbox but still
|
||||
allowing extending Chromium, the `org.chromium.Chromium.Extension` extension
|
||||
point is defined.
|
||||
|
||||
This extension point is currently on version '1' and will expose any extension
|
||||
manifests under the `extensions` subdirectory, policy files under
|
||||
`policies/managed` and `policies/recommended`, and [native messaging host
|
||||
manifests](https://developer.chrome.com/docs/apps/nativeMessaging/) under
|
||||
`native-messaging-hosts`.
|
||||
|
||||
#### Legacy extension points
|
||||
|
||||
This application also supports two other extension points:
|
||||
`org.chromium.Chromium.Policy` and `org.chromium.Chromium.NativeMessagingHost`.
|
||||
These primarily exist for compatibility reasons and should not be used.
|
||||
|
||||
#### Using extension points
|
||||
|
||||
Extension points can be provided as regular flatpaks and an example is provided
|
||||
under `examples/policies/google-safe-search`. Important to note that extension
|
||||
points' name must follow the syntax of `Extension.<id>`, where `<id>` is a
|
||||
generic id for this specific extension point.
|
||||
|
||||
Flatpak also supports “unmanaged extensions”, allowing loading extensions installed
|
||||
into `/var/lib/flatpak/extension` and `$XDG_DATA_HOME/flatpak/extension`.
|
||||
This can be useful for example to allow system administrators to expose system installed
|
||||
policies, extensions, etc.
|
||||
|
||||
One example of such "unmanaged extension" could be an extension point that exposes
|
||||
all system policies installed under `/etc/chromium-browser/policies/{managed,recommended}`.
|
||||
This could be done for example by creating an extension point under
|
||||
`/var/lib/flatpak/extension/org.chromium.Chromium.Extension.system-policies`, with
|
||||
`/var/lib/flatpak/extension/org.chromium.Chromium.Extension.system-policies/<arch>/<version>`
|
||||
being a symlink to `/etc/chromium-browser`. Note that `<version>` must match the
|
||||
extension point version.
|
||||
|
||||
Also important to note that in the example above one would not be able to symlink the
|
||||
actual policy file directly, as otherwise flatpak would not be able to resolve the
|
||||
symlink when bind mounting the extension point.
|
||||
|
||||
### Building and updating
|
||||
|
||||
[CroFT](https://github.com/refi64/croft) is used to manage the patches in this
|
||||
repository and work with a build environment.
|
||||
|
||||
### Build arguments to pass to gn
|
||||
|
||||
```
|
||||
# Not required but makes builds faster.
|
||||
use_lld = true
|
||||
# NaCL hasn't been tested and is being removed from Linux builds.
|
||||
enable_nacl = false
|
||||
# Unrelated to Flatpak but helps speed up builds.
|
||||
blink_symbol_level = 0
|
||||
# Outdated
|
||||
use_gnome_keyring = false
|
||||
# Not supported
|
||||
use_sysroot = false
|
||||
```
|
58
infra/Flatpak/com.alex313031.thorium/build-aux/bootstrap.sh
Executable file
58
infra/Flatpak/com.alex313031.thorium/build-aux/bootstrap.sh
Executable file
|
@ -0,0 +1,58 @@
|
|||
#!/bin/bash -ex
|
||||
|
||||
# Needed to build GN itself.
|
||||
. /usr/lib/sdk/llvm14/enable.sh
|
||||
|
||||
# GN will use these variables to configure its own build, but they introduce
|
||||
# compat issues w/ Clang and aren't used by Chromium itself anyway, so just
|
||||
# unset them here.
|
||||
unset CFLAGS CXXFLAGS LDFLAGS
|
||||
|
||||
if [[ -d third_party/llvm-build/Release+Asserts/bin ]]; then
|
||||
# The build scripts check that the stamp file is present, so write it out
|
||||
# here.
|
||||
PYTHONPATH=tools/clang/scripts/ \
|
||||
python3 -c 'import update; print(update.PACKAGE_VERSION)' \
|
||||
> third_party/llvm-build/Release+Asserts/cr_build_revision
|
||||
else
|
||||
python3 tools/clang/scripts/build.py --disable-asserts \
|
||||
--skip-checkout --use-system-cmake --use-system-libxml \
|
||||
--gcc-toolchain=/usr \
|
||||
--host-cc=/usr/lib/sdk/llvm14/bin/clang \
|
||||
--host-cxx=/usr/lib/sdk/llvm14/bin/clang++ \
|
||||
--without-android --without-fuchsia \
|
||||
--with-ml-inliner-model=
|
||||
fi
|
||||
|
||||
# (TODO: enable use_qt in the future?)
|
||||
# DO NOT REUSE THE BELOW API KEY; it is for Flathub only.
|
||||
# http://lists.debian.org/debian-legal/2013/11/msg00006.html
|
||||
tools/gn/bootstrap/bootstrap.py -v --no-clean --gn-gen-args='
|
||||
use_sysroot=false
|
||||
use_lld=true
|
||||
enable_nacl=false
|
||||
blink_symbol_level=0
|
||||
use_gnome_keyring=false
|
||||
use_pulseaudio=true
|
||||
clang_use_chrome_plugins=false
|
||||
is_official_build=true
|
||||
google_api_key="AIzaSyAL6fqCZVFhA7K_qBvz9GO5Z-V1JBcPO0A"
|
||||
treat_warnings_as_errors=false
|
||||
proprietary_codecs=true
|
||||
ffmpeg_branding="Chrome"
|
||||
is_component_ffmpeg=true
|
||||
use_vaapi=true
|
||||
enable_widevine=true
|
||||
rtc_use_pipewire=true
|
||||
rtc_link_pipewire=true
|
||||
enable_hangout_services_extension=true
|
||||
disable_fieldtrial_testing_config=true
|
||||
use_system_libwayland=false
|
||||
use_system_libffi=true
|
||||
use_qt=false
|
||||
enable_remoting=false
|
||||
'
|
||||
mkdir -p out/ReleaseFree
|
||||
cp out/Release{,Free}/args.gn
|
||||
echo -e 'proprietary_codecs = false\nffmpeg_branding = "Chromium"' >> out/ReleaseFree/args.gn
|
||||
out/Release/gn gen out/ReleaseFree
|
15
infra/Flatpak/com.alex313031.thorium/build-aux/build.sh
Executable file
15
infra/Flatpak/com.alex313031.thorium/build-aux/build.sh
Executable file
|
@ -0,0 +1,15 @@
|
|||
#!/bin/bash -ex
|
||||
|
||||
ln_overwrite_all() {
|
||||
rm -rf "$2"
|
||||
ln -s "$1" "$2"
|
||||
}
|
||||
|
||||
# Link our verisons of Node and OpenJDK into Chromium so the build scripts will
|
||||
# use them. For OpenJDK especially, this is a workaround for:
|
||||
# https://bugs.chromium.org/p/chromium/issues/detail?id=1192875
|
||||
ln_overwrite_all /usr/lib/sdk/node16 third_party/node/linux/node-linux-x64
|
||||
ln_overwrite_all /usr/lib/sdk/openjdk11 third_party/jdk/current
|
||||
|
||||
ninja -C out/ReleaseFree -j$FLATPAK_BUILDER_N_JOBS libffmpeg.so
|
||||
ninja -C out/Release -j$FLATPAK_BUILDER_N_JOBS chrome chrome_crashpad_handler
|
24
infra/Flatpak/com.alex313031.thorium/build-aux/install.sh
Executable file
24
infra/Flatpak/com.alex313031.thorium/build-aux/install.sh
Executable file
|
@ -0,0 +1,24 @@
|
|||
#!/bin/bash -ex
|
||||
|
||||
mkdir -p /app/chromium
|
||||
|
||||
pushd out/Release
|
||||
for path in chrome chrome_crashpad_handler icudtl.dat *.so libvulkan.so.1 *.pak *.bin *.png locales MEIPreload vk_swiftshader_icd.json; do
|
||||
# All the 'libVk*' names are just for debugging, stuff like "libVkICD_mock_icd" and "libVkLayer_khronos_validation".
|
||||
[[ "$path" == libVk* ]] && continue
|
||||
cp -rv $path /app/chromium
|
||||
done
|
||||
popd
|
||||
|
||||
# Place the proprietary libffmpeg in the extension path, then overwrite it with the free one.
|
||||
install -Dm 755 out/ReleaseFree/libffmpeg.so /app/chromium/libffmpeg.so
|
||||
install -Dm 755 out/Release/libffmpeg.so /app/chromium/nonfree-codecs/lib/libffmpeg.so
|
||||
|
||||
for size in 24 48 64 128 256; do
|
||||
install -Dvm 644 chrome/app/theme/chromium/linux/product_logo_$size.png /app/share/icons/hicolor/${size}x${size}/apps/org.chromium.Chromium.png;
|
||||
done
|
||||
install -Dvm 644 cobalt.ini -t /app/etc
|
||||
install -Dvm 644 org.chromium.Chromium.desktop -t /app/share/applications
|
||||
install -Dvm 644 org.chromium.Chromium.metainfo.xml -t /app/share/metainfo
|
||||
install -Dvm 755 chromium.sh /app/bin/chromium
|
||||
install -Dvm 755 unlink_profiles.py -t /app/bin
|
35
infra/Flatpak/com.alex313031.thorium/chromium.sh
Executable file
35
infra/Flatpak/com.alex313031.thorium/chromium.sh
Executable file
|
@ -0,0 +1,35 @@
|
|||
#!/bin/bash
|
||||
|
||||
merge_extensions() {
|
||||
(
|
||||
shopt -s nullglob
|
||||
dest=/app/chromium/extensions/$1
|
||||
mkdir -p $dest
|
||||
for ext in /app/chromium/${1%/*}/$1/*; do
|
||||
ln -s $ext $dest
|
||||
done
|
||||
)
|
||||
}
|
||||
|
||||
unlink_profiles() {
|
||||
local stamp="$XDG_CONFIG_HOME/chromium-profiles-unlinked-stamp"
|
||||
if [[ ! -d "$XDG_CONFIG_HOME/chromium" ]]; then
|
||||
touch "$stamp"
|
||||
elif [[ ! -f "$stamp" ]]; then
|
||||
unlink_profiles.py && touch "$stamp"
|
||||
fi
|
||||
}
|
||||
|
||||
if [[ ! -f /app/chromium/extensions/no-mount-stamp ]]; then
|
||||
# Merge all legacy extension points if the symlinks had a tmpfs mounted over
|
||||
# them.
|
||||
merge_extensions native-messaging-hosts
|
||||
merge_extensions policies/managed
|
||||
merge_extensions policies/recommended
|
||||
fi
|
||||
|
||||
# Unlink any profiles from the sync keys to avoid any expected deletions.
|
||||
unlink_profiles
|
||||
|
||||
export LIBGL_DRIVERS_PATH=/usr/lib/$(uname -m)-linux-gnu/GL/lib/dri
|
||||
exec cobalt "$@"
|
5
infra/Flatpak/com.alex313031.thorium/cobalt.ini
Normal file
5
infra/Flatpak/com.alex313031.thorium/cobalt.ini
Normal file
|
@ -0,0 +1,5 @@
|
|||
[Application]
|
||||
EntryPoint=/app/chromium/chrome
|
||||
|
||||
[DefaultFeatures]
|
||||
Enabled=WebRTCPipeWireCapturer
|
|
@ -0,0 +1,3 @@
|
|||
{
|
||||
"ForceGoogleSafeSearch": true
|
||||
}
|
|
@ -0,0 +1,18 @@
|
|||
app-id: org.chromium.Chromium.Extension.google-safe-search-policy
|
||||
# This should match the extension point version
|
||||
branch: '1'
|
||||
runtime: org.chromium.Chromium
|
||||
runtime-version: stable
|
||||
sdk: org.freedesktop.Sdk//20.08
|
||||
build-extension: true
|
||||
appstream-compose: false
|
||||
|
||||
modules:
|
||||
- name: policy
|
||||
buildsystem: simple
|
||||
build-commands:
|
||||
- mkdir -p ${FLATPAK_DEST}/policies/managed
|
||||
- install -Dm 644 google-safe-search.json ${FLATPAK_DEST}/policies/managed
|
||||
sources:
|
||||
- type: file
|
||||
path: google-safe-search.json
|
2
infra/Flatpak/com.alex313031.thorium/gtk-settings.ini
Normal file
2
infra/Flatpak/com.alex313031.thorium/gtk-settings.ini
Normal file
|
@ -0,0 +1,2 @@
|
|||
[Settings]
|
||||
gtk-print-backends=file,cups
|
12
infra/Flatpak/com.alex313031.thorium/gtk3-werror.patch
Normal file
12
infra/Flatpak/com.alex313031.thorium/gtk3-werror.patch
Normal file
|
@ -0,0 +1,12 @@
|
|||
diff --git a/meson.build b/meson.build
|
||||
index cbd820da44..0438f6cc7d 100644
|
||||
--- a/meson.build
|
||||
+++ b/meson.build
|
||||
@@ -309,7 +309,6 @@ elif cc.get_id() == 'gcc' or cc.get_id() == 'clang'
|
||||
'-Werror=sequence-point',
|
||||
'-Werror=return-type',
|
||||
'-Werror=trigraphs',
|
||||
- '-Werror=array-bounds',
|
||||
'-Werror=write-strings',
|
||||
'-Werror=address',
|
||||
'-Werror=int-to-pointer-cast',
|
9
infra/Flatpak/com.alex313031.thorium/krb5.conf
Normal file
9
infra/Flatpak/com.alex313031.thorium/krb5.conf
Normal file
|
@ -0,0 +1,9 @@
|
|||
[libdefaults]
|
||||
dns_lookup_realm = false
|
||||
ticket_lifetime = 24h
|
||||
renew_lifetime = 7d
|
||||
forwardable = true
|
||||
rdns = false
|
||||
pkinit_anchors = FILE:/etc/ssl/certs/ca-certificates.crt
|
||||
spake_preauth_groups = edwards25519
|
||||
default_ccache_name = KCM:
|
23
infra/Flatpak/com.alex313031.thorium/libsecret.json
Normal file
23
infra/Flatpak/com.alex313031.thorium/libsecret.json
Normal file
|
@ -0,0 +1,23 @@
|
|||
{
|
||||
"name": "libsecret",
|
||||
"buildsystem": "meson",
|
||||
"config-opts": [
|
||||
"-Dmanpage=false",
|
||||
"-Dvapi=false",
|
||||
"-Dgtk_doc=false"
|
||||
],
|
||||
"cleanup": [
|
||||
"/bin",
|
||||
"/include",
|
||||
"/lib/pkgconfig",
|
||||
"/share/gir-1.0",
|
||||
"/share/man"
|
||||
],
|
||||
"sources": [
|
||||
{
|
||||
"type": "archive",
|
||||
"url": "https://download.gnome.org/sources/libsecret/0.19/libsecret-0.19.1.tar.xz",
|
||||
"sha256": "8583e10179456ae2c83075d95455f156dc08db6278b32bf4bd61819335a30e3a"
|
||||
}
|
||||
]
|
||||
}
|
|
@ -0,0 +1,225 @@
|
|||
[Desktop Entry]
|
||||
Version=1.0
|
||||
Name=Chromium
|
||||
# Only KDE 4 seems to use GenericName, so we reuse the KDE strings.
|
||||
# From Ubuntu's language-pack-kde-XX-base packages, version 9.04-20090413.
|
||||
GenericName=Web Browser
|
||||
GenericName[ar]=متصفح الشبكة
|
||||
GenericName[bg]=Уеб браузър
|
||||
GenericName[ca]=Navegador web
|
||||
GenericName[cs]=WWW prohlížeč
|
||||
GenericName[da]=Browser
|
||||
GenericName[de]=Web-Browser
|
||||
GenericName[el]=Περιηγητής ιστού
|
||||
GenericName[en_GB]=Web Browser
|
||||
GenericName[es]=Navegador web
|
||||
GenericName[et]=Veebibrauser
|
||||
GenericName[fi]=WWW-selain
|
||||
GenericName[fr]=Navigateur Web
|
||||
GenericName[gu]=વેબ બ્રાઉઝર
|
||||
GenericName[he]=דפדפן אינטרנט
|
||||
GenericName[hi]=वेब ब्राउज़र
|
||||
GenericName[hu]=Webböngésző
|
||||
GenericName[it]=Browser Web
|
||||
GenericName[ja]=ウェブブラウザ
|
||||
GenericName[kn]=ಜಾಲ ವೀಕ್ಷಕ
|
||||
GenericName[ko]=웹 브라우저
|
||||
GenericName[lt]=Žiniatinklio naršyklė
|
||||
GenericName[lv]=Tīmekļa pārlūks
|
||||
GenericName[ml]=വെബ് ബ്രൌസര്
|
||||
GenericName[mr]=वेब ब्राऊजर
|
||||
GenericName[nb]=Nettleser
|
||||
GenericName[nl]=Webbrowser
|
||||
GenericName[pl]=Przeglądarka WWW
|
||||
GenericName[pt]=Navegador Web
|
||||
GenericName[pt_BR]=Navegador da Internet
|
||||
GenericName[ro]=Navigator de Internet
|
||||
GenericName[ru]=Веб-браузер
|
||||
GenericName[sl]=Spletni brskalnik
|
||||
GenericName[sv]=Webbläsare
|
||||
GenericName[ta]=இணைய உலாவி
|
||||
GenericName[th]=เว็บเบราว์เซอร์
|
||||
GenericName[tr]=Web Tarayıcı
|
||||
GenericName[uk]=Навігатор Тенет
|
||||
GenericName[zh_CN]=网页浏览器
|
||||
GenericName[zh_HK]=網頁瀏覽器
|
||||
GenericName[zh_TW]=網頁瀏覽器
|
||||
# Not translated in KDE, from Epiphany 2.26.1-0ubuntu1.
|
||||
GenericName[bn]=ওয়েব ব্রাউজার
|
||||
GenericName[fil]=Web Browser
|
||||
GenericName[hr]=Web preglednik
|
||||
GenericName[id]=Browser Web
|
||||
GenericName[or]=ଓ୍ବେବ ବ୍ରାଉଜର
|
||||
GenericName[sk]=WWW prehliadač
|
||||
GenericName[sr]=Интернет прегледник
|
||||
GenericName[te]=మహాతల అన్వేషి
|
||||
GenericName[vi]=Bộ duyệt Web
|
||||
# Gnome and KDE 3 uses Comment.
|
||||
Comment=Access the Internet
|
||||
Comment[ar]=الدخول إلى الإنترنت
|
||||
Comment[bg]=Достъп до интернет
|
||||
Comment[bn]=ইন্টারনেটটি অ্যাক্সেস করুন
|
||||
Comment[ca]=Accedeix a Internet
|
||||
Comment[cs]=Přístup k internetu
|
||||
Comment[da]=Få adgang til internettet
|
||||
Comment[de]=Internetzugriff
|
||||
Comment[el]=Πρόσβαση στο Διαδίκτυο
|
||||
Comment[en_GB]=Access the Internet
|
||||
Comment[es]=Accede a Internet.
|
||||
Comment[et]=Pääs Internetti
|
||||
Comment[fi]=Käytä internetiä
|
||||
Comment[fil]=I-access ang Internet
|
||||
Comment[fr]=Accéder à Internet
|
||||
Comment[gu]=ઇંટરનેટ ઍક્સેસ કરો
|
||||
Comment[he]=גישה אל האינטרנט
|
||||
Comment[hi]=इंटरनेट तक पहुंच स्थापित करें
|
||||
Comment[hr]=Pristup Internetu
|
||||
Comment[hu]=Internetelérés
|
||||
Comment[id]=Akses Internet
|
||||
Comment[it]=Accesso a Internet
|
||||
Comment[ja]=インターネットにアクセス
|
||||
Comment[kn]=ಇಂಟರ್ನೆಟ್ ಅನ್ನು ಪ್ರವೇಶಿಸಿ
|
||||
Comment[ko]=인터넷 연결
|
||||
Comment[lt]=Interneto prieiga
|
||||
Comment[lv]=Piekļūt internetam
|
||||
Comment[ml]=ഇന്റര്നെറ്റ് ആക്സസ് ചെയ്യുക
|
||||
Comment[mr]=इंटरनेटमध्ये प्रवेश करा
|
||||
Comment[nb]=Gå til Internett
|
||||
Comment[nl]=Verbinding maken met internet
|
||||
Comment[or]=ଇଣ୍ଟର୍ନେଟ୍ ପ୍ରବେଶ କରନ୍ତୁ
|
||||
Comment[pl]=Skorzystaj z internetu
|
||||
Comment[pt]=Aceder à Internet
|
||||
Comment[pt_BR]=Acessar a internet
|
||||
Comment[ro]=Accesaţi Internetul
|
||||
Comment[ru]=Доступ в Интернет
|
||||
Comment[sk]=Prístup do siete Internet
|
||||
Comment[sl]=Dostop do interneta
|
||||
Comment[sr]=Приступите Интернету
|
||||
Comment[sv]=Gå ut på Internet
|
||||
Comment[ta]=இணையத்தை அணுகுதல்
|
||||
Comment[te]=ఇంటర్నెట్ను ఆక్సెస్ చెయ్యండి
|
||||
Comment[th]=เข้าถึงอินเทอร์เน็ต
|
||||
Comment[tr]=İnternet'e erişin
|
||||
Comment[uk]=Доступ до Інтернету
|
||||
Comment[vi]=Truy cập Internet
|
||||
Comment[zh_CN]=访问互联网
|
||||
Comment[zh_HK]=連線到網際網路
|
||||
Comment[zh_TW]=連線到網際網路
|
||||
Exec=/app/bin/chromium %U
|
||||
StartupWMClass=chromium-browser
|
||||
StartupNotify=true
|
||||
Terminal=false
|
||||
Icon=org.chromium.Chromium
|
||||
Type=Application
|
||||
Categories=Network;WebBrowser;
|
||||
Keywords=chrome;internet;google;
|
||||
MimeType=application/pdf;application/rdf+xml;application/rss+xml;application/xhtml+xml;application/xhtml_xml;application/xml;image/gif;image/jpeg;image/png;image/webp;text/html;text/xml;x-scheme-handler/http;x-scheme-handler/https;
|
||||
Actions=new-window;new-private-window;
|
||||
# Used by Endless
|
||||
X-Flatpak-RenamedFrom=chromium-browser.desktop;
|
||||
|
||||
[Desktop Action new-window]
|
||||
Name=New Window
|
||||
Name[am]=አዲስ መስኮት
|
||||
Name[ar]=نافذة جديدة
|
||||
Name[bg]=Нов прозорец
|
||||
Name[bn]=নতুন উইন্ডো
|
||||
Name[ca]=Finestra nova
|
||||
Name[cs]=Nové okno
|
||||
Name[da]=Nyt vindue
|
||||
Name[de]=Neues Fenster
|
||||
Name[el]=Νέο Παράθυρο
|
||||
Name[en_GB]=New Window
|
||||
Name[es]=Nueva ventana
|
||||
Name[et]=Uus aken
|
||||
Name[fa]=پنجره جدید
|
||||
Name[fi]=Uusi ikkuna
|
||||
Name[fil]=New Window
|
||||
Name[fr]=Nouvelle fenêtre
|
||||
Name[gu]=નવી વિંડો
|
||||
Name[hi]=नई विंडो
|
||||
Name[hr]=Novi prozor
|
||||
Name[hu]=Új ablak
|
||||
Name[id]=Jendela Baru
|
||||
Name[it]=Nuova finestra
|
||||
Name[iw]=חלון חדש
|
||||
Name[ja]=新規ウインドウ
|
||||
Name[kn]=ಹೊಸ ವಿಂಡೊ
|
||||
Name[ko]=새 창
|
||||
Name[lt]=Naujas langas
|
||||
Name[lv]=Jauns logs
|
||||
Name[ml]=പുതിയ വിന്ഡോ
|
||||
Name[mr]=नवीन विंडो
|
||||
Name[nl]=Nieuw venster
|
||||
Name[no]=Nytt vindu
|
||||
Name[pl]=Nowe okno
|
||||
Name[pt]=Nova janela
|
||||
Name[pt_BR]=Nova janela
|
||||
Name[ro]=Fereastră nouă
|
||||
Name[ru]=Новое окно
|
||||
Name[sk]=Nové okno
|
||||
Name[sl]=Novo okno
|
||||
Name[sr]=Нови прозор
|
||||
Name[sv]=Nytt fönster
|
||||
Name[sw]=Dirisha Jipya
|
||||
Name[ta]=புதிய சாளரம்
|
||||
Name[te]=క్రొత్త విండో
|
||||
Name[th]=หน้าต่างใหม่
|
||||
Name[tr]=Yeni Pencere
|
||||
Name[uk]=Нове вікно
|
||||
Name[vi]=Cửa sổ Mới
|
||||
Name[zh_CN]=新建窗口
|
||||
Name[zh_TW]=開新視窗
|
||||
Exec=/app/bin/chromium
|
||||
|
||||
[Desktop Action new-private-window]
|
||||
Name=New Incognito Window
|
||||
Name[ar]=نافذة جديدة للتصفح المتخفي
|
||||
Name[bg]=Нов прозорец „инкогнито“
|
||||
Name[bn]=নতুন ছদ্মবেশী উইন্ডো
|
||||
Name[ca]=Finestra d'incògnit nova
|
||||
Name[cs]=Nové anonymní okno
|
||||
Name[da]=Nyt inkognitovindue
|
||||
Name[de]=Neues Inkognito-Fenster
|
||||
Name[el]=Νέο παράθυρο για ανώνυμη περιήγηση
|
||||
Name[en_GB]=New Incognito window
|
||||
Name[es]=Nueva ventana de incógnito
|
||||
Name[et]=Uus inkognito aken
|
||||
Name[fa]=پنجره جدید حالت ناشناس
|
||||
Name[fi]=Uusi incognito-ikkuna
|
||||
Name[fil]=Bagong Incognito window
|
||||
Name[fr]=Nouvelle fenêtre de navigation privée
|
||||
Name[gu]=નવી છુપી વિંડો
|
||||
Name[hi]=नई गुप्त विंडो
|
||||
Name[hr]=Novi anoniman prozor
|
||||
Name[hu]=Új Inkognitóablak
|
||||
Name[id]=Jendela Penyamaran baru
|
||||
Name[it]=Nuova finestra di navigazione in incognito
|
||||
Name[iw]=חלון חדש לגלישה בסתר
|
||||
Name[ja]=新しいシークレット ウィンドウ
|
||||
Name[kn]=ಹೊಸ ಅಜ್ಞಾತ ವಿಂಡೋ
|
||||
Name[ko]=새 시크릿 창
|
||||
Name[lt]=Naujas inkognito langas
|
||||
Name[lv]=Jauns inkognito režīma logs
|
||||
Name[ml]=പുതിയ വേഷ പ്രച്ഛന്ന വിന്ഡോ
|
||||
Name[mr]=नवीन गुप्त विंडो
|
||||
Name[nl]=Nieuw incognitovenster
|
||||
Name[no]=Nytt inkognitovindu
|
||||
Name[pl]=Nowe okno incognito
|
||||
Name[pt]=Nova janela de navegação anónima
|
||||
Name[pt_BR]=Nova janela anônima
|
||||
Name[ro]=Fereastră nouă incognito
|
||||
Name[ru]=Новое окно в режиме инкогнито
|
||||
Name[sk]=Nové okno inkognito
|
||||
Name[sl]=Novo okno brez beleženja zgodovine
|
||||
Name[sr]=Нови прозор за прегледање без архивирања
|
||||
Name[sv]=Nytt inkognitofönster
|
||||
Name[ta]=புதிய மறைநிலைச் சாளரம்
|
||||
Name[te]=క్రొత్త అజ్ఞాత విండో
|
||||
Name[th]=หน้าต่างใหม่ที่ไม่ระบุตัวตน
|
||||
Name[tr]=Yeni Gizli pencere
|
||||
Name[uk]=Нове вікно в режимі анонімного перегляду
|
||||
Name[vi]=Cửa sổ ẩn danh mới
|
||||
Name[zh_CN]=新建隐身窗口
|
||||
Name[zh_TW]=新增無痕式視窗
|
||||
Exec=/app/bin/chromium --incognito
|
|
@ -0,0 +1,126 @@
|
|||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<!-- Copyright 2017 The Chromium Authors -->
|
||||
<component type="desktop">
|
||||
<id>org.chromium.Chromium</id>
|
||||
<launchable type="desktop-id">org.chromium.Chromium.desktop</launchable>
|
||||
<name>Chromium Web Browser</name>
|
||||
<developer_name>The Chromium Authors</developer_name>
|
||||
<summary>The web browser from Chromium project</summary>
|
||||
<metadata_license>CC0-1.0</metadata_license>
|
||||
<project_license>BSD-3-Clause and LGPL-2.1+ and Apache-2.0 and IJG and MIT and GPL-2.0+ and ISC and OpenSSL and (MPL-1.1 or GPL-2.0 or LGPL-2.0)</project_license>
|
||||
<url type="homepage">https://www.chromium.org/Home</url>
|
||||
<description>
|
||||
<p>
|
||||
Chromium is an open-source browser project that aims to build a safer, faster,
|
||||
and more stable way to experience the web.
|
||||
</p>
|
||||
<p>
|
||||
We invite you to join our effort to build a powerful platform for developing a
|
||||
new generation of web applications.
|
||||
</p>
|
||||
</description>
|
||||
<screenshots>
|
||||
<screenshot type="default">
|
||||
<image>https://www.gstatic.com/chrome/appstream/chrome-2.png</image>
|
||||
<caption/>
|
||||
</screenshot>
|
||||
</screenshots>
|
||||
<releases>
|
||||
<release version="114.0.5735.133" date="2023-06-13"/>
|
||||
<release version="114.0.5735.106" date="2023-06-05"/>
|
||||
<release version="114.0.5735.90" date="2023-05-31"/>
|
||||
<release version="113.0.5672.126" date="2023-05-16"/>
|
||||
<release version="113.0.5672.92" date="2023-05-09"/>
|
||||
<release version="113.0.5672.63" date="2023-04-26"/>
|
||||
<release version="112.0.5615.165" date="2023-04-19"/>
|
||||
<release version="112.0.5615.121" date="2023-04-14"/>
|
||||
<release version="112.0.5615.49" date="2023-03-30"/>
|
||||
<release version="111.0.5563.146" date="2023-03-27"/>
|
||||
<release version="111.0.5563.110" date="2023-03-22"/>
|
||||
<release version="111.0.5563.64" date="2023-03-07"/>
|
||||
<release version="110.0.5481.177" date="2023-02-22"/>
|
||||
<release version="110.0.5481.100" date="2023-02-16"/>
|
||||
<release version="110.0.5481.77" date="2023-02-01"/>
|
||||
<release version="109.0.5414.119" date="2023-01-24"/>
|
||||
<release version="109.0.5414.74" date="2023-01-04"/>
|
||||
<release version="108.0.5359.124" date="2022-12-14"/>
|
||||
<release version="108.0.5359.98" date="2022-12-07"/>
|
||||
<release version="108.0.5359.94" date="2022-12-02"/>
|
||||
<release version="108.0.5359.71" date="2022-11-29"/>
|
||||
<release version="107.0.5304.121" date="2022-11-24"/>
|
||||
<release version="107.0.5304.110" date="2022-11-09"/>
|
||||
<release version="107.0.5304.87" date="2022-10-27"/>
|
||||
<release version="107.0.5304.68" date="2022-10-25"/>
|
||||
<release version="106.0.5249.119" date="2022-10-12"/>
|
||||
<release version="106.0.5249.91" date="2022-09-30"/>
|
||||
<release version="106.0.5249.61" date="2022-09-26"/>
|
||||
<release version="105.0.5195.125" date="2022-09-13"/>
|
||||
<release version="105.0.5195.102" date="2022-09-02"/>
|
||||
<release version="105.0.5195.52" date="2022-08-24"/>
|
||||
<release version="104.0.5112.101" date="2022-08-16"/>
|
||||
<release version="104.0.5112.79" date="2022-08-01"/>
|
||||
<release version="103.0.5060.134" date="2022-07-19"/>
|
||||
<release version="103.0.5060.114" date="2022-07-09"/>
|
||||
<release version="103.0.5060.53" date="2022-06-16"/>
|
||||
<release version="102.0.5005.115" date="2022-06-10"/>
|
||||
<release version="102.0.5005.61" date="2022-05-19"/>
|
||||
<release version="101.0.4951.64" date="2022-05-11"/>
|
||||
<release version="101.0.4951.54" date="2022-05-03"/>
|
||||
<release version="101.0.4951.41" date="2022-04-20"/>
|
||||
<release version="100.0.4896.127" date="2022-04-15"/>
|
||||
<release version="100.0.4896.88" date="2022-04-12"/>
|
||||
<release version="100.0.4896.75" date="2022-04-05"/>
|
||||
<release version="100.0.4896.60" date="2022-03-29"/>
|
||||
<release version="99.0.4844.84" date="2022-03-26"/>
|
||||
<release version="99.0.4844.82" date="2022-03-20"/>
|
||||
<release version="99.0.4844.74" date="2022-03-16"/>
|
||||
<release version="98.0.4758.102" date="2022-02-15"/>
|
||||
<release version="98.0.4758.80" date="2022-02-01"/>
|
||||
<release version="97.0.4692.99" date="2022-01-20"/>
|
||||
<release version="97.0.4692.71" date="2021-12-31"/>
|
||||
<release version="96.0.4664.110" date="2021-12-14"/>
|
||||
<release version="96.0.4664.93" date="2021-12-07"/>
|
||||
<release version="96.0.4664.45" date="2021-11-12"/>
|
||||
<release version="95.0.4638.69" date="2021-10-29"/>
|
||||
<release version="95.0.4638.54" date="2021-10-18"/>
|
||||
<release version="94.0.4606.81" date="2021-10-08"/>
|
||||
<release version="94.0.4606.71" date="2021-10-01"/>
|
||||
<release version="94.0.4606.61" date="2021-09-24"/>
|
||||
<release version="94.0.4606.54" date="2021-09-20"/>
|
||||
<release version="93.0.4577.82" date="2021-09-14"/>
|
||||
<release version="93.0.4577.63" date="2021-09-01"/>
|
||||
<release version="92.0.4515.159" date="2021-08-17"/>
|
||||
<release version="92.0.4515.131" date="2021-08-03"/>
|
||||
<release version="92.0.4515.107" date="2021-07-19"/>
|
||||
<release version="91.0.4472.164" date="2021-07-15"/>
|
||||
<release version="91.0.4472.114" date="2021-06-18"/>
|
||||
<release version="91.0.4472.106" date="2021-06-15"/>
|
||||
<release version="91.0.4472.101" date="2021-06-09"/>
|
||||
<release version="91.0.4472.77" date="2021-05-24"/>
|
||||
<release version="90.0.4430.212" date="2021-05-10"/>
|
||||
<release version="90.0.4430.93" date="2021-04-27"/>
|
||||
<release version="90.0.4430.85" date="2021-04-20"/>
|
||||
<release version="90.0.4430.72" date="2021-04-14"><url>https://chromereleases.googleblog.com/2021/04/stable-channel-update-for-desktop_14.html</url></release>
|
||||
<release version="89.0.4389.128" date="2021-04-14"/>
|
||||
<release version="89.0.4389.114" date="2021-03-30"/>
|
||||
<release version="89.0.4389.90" date="2021-03-13"/>
|
||||
<release version="89.0.4389.82" date="2021-03-05"/>
|
||||
<release version="89.0.4389.72" date="2021-03-02"/>
|
||||
<release version="88.0.4324.182" date="2021-02-16"/>
|
||||
<release version="88.0.4324.150" date="2021-02-05"/>
|
||||
<release version="88.0.4324.146" date="2021-02-02"/>
|
||||
<release version="88.0.4324.96" date="2020-01-19"/>
|
||||
<release version="87.0.4280.141" date="2021-01-07"/>
|
||||
<release version="87.0.4280.88-1" date="2020-12-17"/>
|
||||
<release version="87.0.4280.88" date="2020-12-04"/>
|
||||
<release version="87.0.4280.66" date="2020-11-18"/>
|
||||
<release version="86.0.4240.198" date="2020-11-12"/>
|
||||
<release version="86.0.4240.183" date="2020-11-02"/>
|
||||
<release version="86.0.4240.111" date="2020-11-01"/>
|
||||
<release version="86.0.4240.75" date="2020-10-15"/>
|
||||
<release version="85.0.4183.121" date="2020-09-29"/>
|
||||
</releases>
|
||||
<content_rating type="oars-1.1"/>
|
||||
<translation/>
|
||||
<update_contact>rymg19_at_gmail.com</update_contact>
|
||||
</component>
|
152
infra/Flatpak/com.alex313031.thorium/org.chromium.Chromium.yaml
Normal file
152
infra/Flatpak/com.alex313031.thorium/org.chromium.Chromium.yaml
Normal file
|
@ -0,0 +1,152 @@
|
|||
app-id: org.chromium.Chromium
|
||||
runtime: org.freedesktop.Platform
|
||||
runtime-version: '22.08'
|
||||
sdk: org.freedesktop.Sdk
|
||||
base: org.chromium.Chromium.BaseApp
|
||||
base-version: '22.08'
|
||||
command: chromium
|
||||
finish-args:
|
||||
- --require-version=1.8.2
|
||||
- --filesystem=home
|
||||
- --filesystem=/run/.heim_org.h5l.kcm-socket
|
||||
- --device=all
|
||||
- --env=GTK_PATH=/app/lib/gtkmodules
|
||||
- --env=LD_LIBRARY_PATH=/app/chromium/nonfree-codecs/lib
|
||||
- --share=ipc
|
||||
- --share=network
|
||||
- --socket=cups
|
||||
- --socket=pulseaudio
|
||||
- --socket=x11
|
||||
- --socket=wayland
|
||||
- --system-talk-name=org.bluez
|
||||
- --system-talk-name=org.freedesktop.Avahi
|
||||
- --system-talk-name=org.freedesktop.UPower
|
||||
- --talk-name=com.canonical.AppMenu.Registrar
|
||||
- --talk-name=org.freedesktop.FileManager1
|
||||
- --talk-name=org.freedesktop.Notifications
|
||||
- --talk-name=org.freedesktop.ScreenSaver
|
||||
- --talk-name=org.freedesktop.secrets
|
||||
- --talk-name=org.kde.kwalletd5
|
||||
- --talk-name=org.gnome.SessionManager
|
||||
- --own-name=org.mpris.MediaPlayer2.chromium.*
|
||||
|
||||
add-extensions:
|
||||
org.chromium.Chromium.Codecs:
|
||||
directory: chromium/nonfree-codecs
|
||||
add-ld-path: lib
|
||||
bundle: true
|
||||
autodelete: true
|
||||
|
||||
org.chromium.Chromium.NativeMessagingHost:
|
||||
version: '1'
|
||||
directory: chromium/native-messaging-hosts
|
||||
merge-dirs: native-messaging-hosts
|
||||
subdirectories: true
|
||||
no-autodownload: true
|
||||
autodelete: true
|
||||
|
||||
org.chromium.Chromium.Extension:
|
||||
version: '1'
|
||||
directory: chromium/extensions
|
||||
merge-dirs: extensions;native-messaging-hosts;policies/managed;policies/recommended
|
||||
subdirectories: true
|
||||
no-autodownload: true
|
||||
autodelete: true
|
||||
|
||||
org.chromium.Chromium.Policy:
|
||||
version: '1'
|
||||
directory: chromium/policies
|
||||
merge-dirs: policies/managed;policies/recommended
|
||||
subdirectories: true
|
||||
no-autodownload: true
|
||||
autodelete: true
|
||||
|
||||
sdk-extensions:
|
||||
- org.freedesktop.Sdk.Extension.llvm14
|
||||
- org.freedesktop.Sdk.Extension.node16
|
||||
- org.freedesktop.Sdk.Extension.openjdk11
|
||||
|
||||
modules:
|
||||
# Based on https://github.com/flathub/shared-modules/blob/master/python2.7/python-2.7.json
|
||||
- name: python2
|
||||
config-opts:
|
||||
- --enable-shared
|
||||
- --with-ensurepip=yes
|
||||
- --with-system-expat
|
||||
- --with-system-ffi
|
||||
- --with-dbmliborder=gdbm
|
||||
- --enable-unicode=ucs4
|
||||
build-options:
|
||||
no-debuginfo: true
|
||||
post-install:
|
||||
- chmod 644 $FLATPAK_DEST/lib/libpython2.7.so.1.0
|
||||
cleanup:
|
||||
- '*'
|
||||
sources:
|
||||
- type: archive
|
||||
url: https://www.python.org/ftp/python/2.7.18/Python-2.7.18.tar.xz
|
||||
sha256: b62c0e7937551d0cc02b8fd5cb0f544f9405bafc9a54d3808ed4594812edef43
|
||||
|
||||
- name: readelf-symlink
|
||||
only-arches: [aarch64]
|
||||
buildsystem: simple
|
||||
build-commands:
|
||||
# Chromium expects to find readelf with its full toolprefix on arm64
|
||||
- ln -s /usr/bin/readelf /app/bin/aarch64-linux-gnu-readelf
|
||||
|
||||
- name: extensions
|
||||
buildsystem: simple
|
||||
build-commands:
|
||||
- mkdir -p /app/chromium/{extensions,native-messaging-hosts,policies}
|
||||
- for dir in native-messaging-hosts policies; do ln -s /app/chromium/{$dir,extensions}/$dir;
|
||||
done
|
||||
- touch /app/chromium/extensions/no-mount-stamp
|
||||
|
||||
- name: chromium
|
||||
buildsystem: simple
|
||||
build-commands:
|
||||
- ./bootstrap.sh
|
||||
- ./build.sh
|
||||
- ./install.sh
|
||||
sources:
|
||||
- type: archive
|
||||
url: https://commondatastorage.googleapis.com/chromium-browser-official/chromium-114.0.5735.133.tar.xz
|
||||
sha256: 8289ec1ec9e2540313af10bcf97721ec560789c931fc0583a2f5a545f223d262
|
||||
x-checker-data:
|
||||
type: chromium
|
||||
component: chromium
|
||||
is-main-source: true
|
||||
- type: archive
|
||||
url: https://commondatastorage.googleapis.com/chromium-browser-clang/Linux_x64/clang-llvmorg-17-init-8029-g27f27d15-3.tgz
|
||||
sha256: 1ac590c011158940037ce9442d4bf12943dc14a7ddaab6094e75a8750b47b861
|
||||
dest: third_party/llvm-build/Release+Asserts
|
||||
strip-components: 0
|
||||
only-arches: [x86_64]
|
||||
x-checker-data:
|
||||
type: chromium
|
||||
component: llvm-prebuilt
|
||||
- type: shell
|
||||
commands:
|
||||
- rm -rf third_party/llvm
|
||||
only-arches: [aarch64]
|
||||
- type: git
|
||||
url: https://github.com/llvm/llvm-project
|
||||
commit: llvmorg-17-init-8029-g27f27d15
|
||||
dest: third_party/llvm
|
||||
only-arches: [aarch64]
|
||||
x-checker-data:
|
||||
type: chromium
|
||||
component: llvm-git
|
||||
- patches/all.json
|
||||
- type: file
|
||||
path: org.chromium.Chromium.desktop
|
||||
- type: file
|
||||
path: org.chromium.Chromium.metainfo.xml
|
||||
- type: file
|
||||
path: chromium.sh
|
||||
- type: file
|
||||
path: unlink_profiles.py
|
||||
- type: file
|
||||
path: cobalt.ini
|
||||
- type: dir
|
||||
path: build-aux
|
27
infra/Flatpak/com.alex313031.thorium/patches/all.json
Normal file
27
infra/Flatpak/com.alex313031.thorium/patches/all.json
Normal file
|
@ -0,0 +1,27 @@
|
|||
[
|
||||
{
|
||||
"type": "patch",
|
||||
"paths": [
|
||||
"patches/chromium/flatpak-Add-initial-sandbox-support.patch",
|
||||
"patches/chromium/flatpak-Expose-Widevine-into-the-sandbox.patch",
|
||||
"patches/chromium/flatpak-Adjust-paths-for-the-sandbox.patch",
|
||||
"patches/chromium/Import-chromium-71.0.3578.98-widevine-r3.patch.patch",
|
||||
"patches/chromium/x11-Set-_NET_WM_BYPASS_COMPOSITOR-for-fullscreen.patch",
|
||||
"patches/chromium/memory-Enable-the-tab-discards-feature.patch",
|
||||
"patches/chromium/Enable-accelerated-mjpeg-decode-on-Linux.patch",
|
||||
"patches/chromium/ffmpeg-Don-t-lie-about-AAC-and-H264-decoders-when-not-avai.patch",
|
||||
"patches/chromium/Remove-the-ability-to-create-desktop-shortcuts.patch",
|
||||
"patches/chromium/Use-CHROME_WRAPPER-as-the-executable-on-restart.patch",
|
||||
"patches/chromium/Enable-new-dtags-on-non-component-builds.patch",
|
||||
"patches/chromium/Add-support-for-respecting-system-proxy-settings-when-runn.patch",
|
||||
"patches/chromium/Clang-build-script-Disable-hwasan.patch",
|
||||
"patches/chromium/clang-build-script-Support-disabling-the-bundled-libxml2.patch",
|
||||
"patches/chromium/Clang-build-script-Don-t-build-against-the-sysroot.patch",
|
||||
"patches/chromium/Ignore-useless-warnings-from-the-Asahi-driver.patch",
|
||||
"patches/chromium/Revert-Reland-Linux-Ozone-Wayland-Support-fractional-scale.patch",
|
||||
"patches/ffmpeg/Enable-support-for-libfdk-aac-and-OpenH264.patch",
|
||||
"patches/ffmpeg/ffmpeg-Handle-transient-decode-errors-arising-from-libfdk-.patch",
|
||||
"patches/ffmpeg/Update-build-configuration.patch"
|
||||
]
|
||||
}
|
||||
]
|
|
@ -0,0 +1,388 @@
|
|||
From c91ff0722be8317f940d11474bff671b01b4636a Mon Sep 17 00:00:00 2001
|
||||
From: Andre Moreira Magalhaes <andre.magalhaes@endlessos.org>
|
||||
Date: Thu, 17 Dec 2020 19:05:10 -0300
|
||||
Subject: [PATCH] Add support for respecting system proxy settings when running
|
||||
on Linux/Flatpak
|
||||
|
||||
Some general notes on implementation:
|
||||
- The implementation uses the same codepath used when
|
||||
`--winhttp-proxy-resolver` is passed as param, which uses the
|
||||
`net::ProxyResolver` interface to determine the proxy given an url:
|
||||
- This is due to limitations in the portal APIs which don't allow
|
||||
access to the system proxy settings, and with that no reliable
|
||||
way to implement a proper ProxyConfigService when on flatpak
|
||||
- Despite the name of the param, this flag is not Windows(tm)
|
||||
specific and also used on Mac builds
|
||||
- This param may be removed at some point in the future, see
|
||||
https://bugs.chromium.org/p/chromium/issues/detail?id=644030 but
|
||||
it should be replaced with
|
||||
https://bugs.chromium.org/p/chromium/issues/detail?id=1032820,
|
||||
which from the looks of it would not require too many changes
|
||||
to the impl here
|
||||
- To avoid having to pass this param, this codepath is enabled
|
||||
automatically when detecting we are running on flatpak
|
||||
- This means that proxy resolution is done by invoking
|
||||
`net::ProxyResolver::GetProxyForURL()` (instead of relying on the
|
||||
internal chromium mechanism based on the proxy settings, set to
|
||||
"mode=auto" in this case), which in turn invokes
|
||||
`g_proxy_resolver_lookup` which uses the portal API via D-Bus
|
||||
- To avoid having one D-Bus call per
|
||||
`net::ProxyResolver::GetProxyForURL()`, this implements a (very)
|
||||
simple cache that gets invalidated every 1min (same default
|
||||
timeout used on chromium dns refresh)
|
||||
- Another issue is that the impl will invoke the portal even if
|
||||
proxy is disabled in the system, also because of a limitation
|
||||
in the portal API where there is no way to know whether the
|
||||
proxy is disabled
|
||||
- We could skip using the portal on KDE, given the flatpak has
|
||||
access to $HOME today (and the impl just reads .ini files),
|
||||
but this impl uses the same codepath no matter the DE when running
|
||||
on flatpak
|
||||
|
||||
Closes https://github.com/flathub/org.chromium.Chromium/issues/36
|
||||
---
|
||||
chrome/app/generated_resources.grd | 6 +
|
||||
.../net/system_network_context_manager.cc | 9 +-
|
||||
chrome/browser/ui/webui/about_ui.cc | 14 +-
|
||||
net/BUILD.gn | 8 ++
|
||||
.../configured_proxy_resolution_service.cc | 6 +-
|
||||
.../proxy_config_service_linux.cc | 10 +-
|
||||
net/proxy_resolution/proxy_resolver_linux.cc | 123 ++++++++++++++++++
|
||||
net/proxy_resolution/proxy_resolver_linux.h | 29 +++++
|
||||
8 files changed, 201 insertions(+), 4 deletions(-)
|
||||
create mode 100644 net/proxy_resolution/proxy_resolver_linux.cc
|
||||
create mode 100644 net/proxy_resolution/proxy_resolver_linux.h
|
||||
|
||||
diff --git a/chrome/app/generated_resources.grd b/chrome/app/generated_resources.grd
|
||||
index 1632fdfac5b94..e020244444348 100644
|
||||
--- a/chrome/app/generated_resources.grd
|
||||
+++ b/chrome/app/generated_resources.grd
|
||||
@@ -12358,6 +12358,12 @@ Please help our engineers fix this problem. Tell us what happened right before y
|
||||
|
||||
<p>But you can still configure via the command line. Please see <code>man <ph name="PRODUCT_BINARY_NAME">$2<ex>google-chrome</ex></ph></code> for more information on flags and environment variables.</p>
|
||||
</message>
|
||||
+ <message name="IDS_ABOUT_LINUX_PROXY_CONFIG_FLATPAK_BODY" desc="HTML body of page shown on systems running with flatpak where system proxy configuration is unsupported.">
|
||||
+ <p>The flatpak version of <ph name="PRODUCT_NAME">$1<ex>Google Chrome</ex></ph> does not support changing the system proxy settings. However, it does respect those settings.</p>
|
||||
+ <p>If you need to adjust the proxy settings, please do so through the configuration system of your desktop environment.</p>
|
||||
+
|
||||
+ <p>You can also override your system proxy settings via the command line. Please see <code>man <ph name="PRODUCT_BINARY_NAME">$2<ex>google-chrome</ex></ph></code> for more information on flags and environment variables.</p>
|
||||
+ </message>
|
||||
</if>
|
||||
|
||||
<message name="IDS_IMAGE_FILES" desc="The description of the image file extensions in the select file dialog.">
|
||||
diff --git a/chrome/browser/net/system_network_context_manager.cc b/chrome/browser/net/system_network_context_manager.cc
|
||||
index 35847a946ce57..52fb3b7721ee3 100644
|
||||
--- a/chrome/browser/net/system_network_context_manager.cc
|
||||
+++ b/chrome/browser/net/system_network_context_manager.cc
|
||||
@@ -96,6 +96,7 @@
|
||||
#if BUILDFLAG(IS_LINUX) || BUILDFLAG(IS_CHROMEOS_LACROS)
|
||||
#include "chrome/common/chrome_paths_internal.h"
|
||||
#include "chrome/grit/chromium_strings.h"
|
||||
+#include "sandbox/linux/services/flatpak_sandbox.h"
|
||||
#include "ui/base/l10n/l10n_util.h"
|
||||
#endif // BUILDFLAG(IS_LINUX) || BUILDFLAG(IS_CHROMEOS_LACROS)
|
||||
|
||||
@@ -771,7 +772,13 @@ void SystemNetworkContextManager::ConfigureDefaultNetworkContextParams(
|
||||
// or if it does work, now.
|
||||
// Should be possible now that a private isolate is used.
|
||||
// http://crbug.com/474654
|
||||
- if (!command_line.HasSwitch(switches::kWinHttpProxyResolver)) {
|
||||
+ bool use_system_proxy_resolver = command_line.HasSwitch(switches::kWinHttpProxyResolver);
|
||||
+#if defined(OS_LINUX)
|
||||
+ bool use_flatpak_sandbox = (sandbox::FlatpakSandbox::GetInstance()->GetSandboxLevel() >
|
||||
+ sandbox::FlatpakSandbox::SandboxLevel::kNone);
|
||||
+ use_system_proxy_resolver |= use_flatpak_sandbox;
|
||||
+#endif
|
||||
+ if (!use_system_proxy_resolver) {
|
||||
if (command_line.HasSwitch(switches::kSingleProcess)) {
|
||||
LOG(ERROR) << "Cannot use V8 Proxy resolver in single process mode.";
|
||||
} else {
|
||||
diff --git a/chrome/browser/ui/webui/about_ui.cc b/chrome/browser/ui/webui/about_ui.cc
|
||||
index 56d077d10879c..330f87ad252d7 100644
|
||||
--- a/chrome/browser/ui/webui/about_ui.cc
|
||||
+++ b/chrome/browser/ui/webui/about_ui.cc
|
||||
@@ -87,6 +87,10 @@
|
||||
#include "chrome/common/webui_url_constants.h"
|
||||
#endif // BUILDFLAG(IS_CHROMEOS)
|
||||
|
||||
+#if defined(OS_LINUX)
|
||||
+#include "sandbox/linux/services/flatpak_sandbox.h"
|
||||
+#endif
|
||||
+
|
||||
using content::BrowserThread;
|
||||
|
||||
namespace {
|
||||
@@ -611,8 +615,16 @@ std::string AboutLinuxProxyConfig() {
|
||||
data.append("<style>body { max-width: 70ex; padding: 2ex 5ex; }</style>");
|
||||
AppendBody(&data);
|
||||
base::FilePath binary = base::CommandLine::ForCurrentProcess()->GetProgram();
|
||||
+
|
||||
+ int id = IDS_ABOUT_LINUX_PROXY_CONFIG_BODY;
|
||||
+#if defined(OS_LINUX)
|
||||
+ bool use_flatpak_sandbox = (sandbox::FlatpakSandbox::GetInstance()->GetSandboxLevel() >
|
||||
+ sandbox::FlatpakSandbox::SandboxLevel::kNone);
|
||||
+ if (use_flatpak_sandbox)
|
||||
+ id = IDS_ABOUT_LINUX_PROXY_CONFIG_FLATPAK_BODY;
|
||||
+#endif
|
||||
data.append(
|
||||
- l10n_util::GetStringFUTF8(IDS_ABOUT_LINUX_PROXY_CONFIG_BODY,
|
||||
+ l10n_util::GetStringFUTF8(id,
|
||||
l10n_util::GetStringUTF16(IDS_PRODUCT_NAME),
|
||||
base::ASCIIToUTF16(binary.BaseName().value())));
|
||||
AppendFooter(&data);
|
||||
diff --git a/net/BUILD.gn b/net/BUILD.gn
|
||||
index 355767d5e548f..40eda4de3c758 100644
|
||||
--- a/net/BUILD.gn
|
||||
+++ b/net/BUILD.gn
|
||||
@@ -1231,6 +1231,13 @@ component("net") {
|
||||
deps += [ "//third_party/xdg_shared_mime_info" ]
|
||||
}
|
||||
|
||||
+ if (is_linux) {
|
||||
+ sources += [
|
||||
+ "proxy_resolution/proxy_resolver_linux.cc",
|
||||
+ "proxy_resolution/proxy_resolver_linux.h",
|
||||
+ ]
|
||||
+ }
|
||||
+
|
||||
if (is_mac) {
|
||||
sources += [
|
||||
"base/network_notification_thread_mac.cc",
|
||||
@@ -1672,6 +1679,7 @@ source_set("net_deps") {
|
||||
|
||||
if (use_gio) {
|
||||
public_configs += [ "//build/linux:gio_config" ]
|
||||
+ public_deps += [ "//dbus" ]
|
||||
}
|
||||
|
||||
if (is_android) {
|
||||
diff --git a/net/proxy_resolution/configured_proxy_resolution_service.cc b/net/proxy_resolution/configured_proxy_resolution_service.cc
|
||||
index 2463ee9c9c2bd..ff02aab556a81 100644
|
||||
--- a/net/proxy_resolution/configured_proxy_resolution_service.cc
|
||||
+++ b/net/proxy_resolution/configured_proxy_resolution_service.cc
|
||||
@@ -49,6 +49,8 @@
|
||||
#include "net/proxy_resolution/proxy_resolver_mac.h"
|
||||
#elif BUILDFLAG(IS_MAC)
|
||||
#include "net/proxy_resolution/proxy_resolver_mac.h"
|
||||
+#elif BUILDFLAG(IS_LINUX)
|
||||
+#include "net/proxy_resolution/proxy_resolver_linux.h"
|
||||
#endif
|
||||
|
||||
using base::TimeTicks;
|
||||
@@ -230,6 +232,8 @@ class ProxyResolverFactoryForSystem : public MultiThreadedProxyResolverFactory {
|
||||
return std::make_unique<ProxyResolverFactoryWinHttp>();
|
||||
#elif BUILDFLAG(IS_APPLE)
|
||||
return std::make_unique<ProxyResolverFactoryMac>();
|
||||
+#elif defined(OS_LINUX)
|
||||
+ return std::make_unique<ProxyResolverFactoryLinux>();
|
||||
#else
|
||||
NOTREACHED();
|
||||
return nullptr;
|
||||
@@ -237,7 +241,7 @@ class ProxyResolverFactoryForSystem : public MultiThreadedProxyResolverFactory {
|
||||
}
|
||||
|
||||
static bool IsSupported() {
|
||||
-#if BUILDFLAG(IS_WIN) || BUILDFLAG(IS_APPLE)
|
||||
+#if BUILDFLAG(IS_WIN) || BUILDFLAG(IS_APPLE) || BUILDFLAG(IS_LINUX)
|
||||
return true;
|
||||
#else
|
||||
return false;
|
||||
diff --git a/net/proxy_resolution/proxy_config_service_linux.cc b/net/proxy_resolution/proxy_config_service_linux.cc
|
||||
index a74a05068239a..e0646499cacd1 100644
|
||||
--- a/net/proxy_resolution/proxy_config_service_linux.cc
|
||||
+++ b/net/proxy_resolution/proxy_config_service_linux.cc
|
||||
@@ -35,6 +35,7 @@
|
||||
#include "base/timer/timer.h"
|
||||
#include "net/base/proxy_server.h"
|
||||
#include "net/base/proxy_string_util.h"
|
||||
+#include "sandbox/linux/services/flatpak_sandbox.h"
|
||||
|
||||
#if defined(USE_GIO)
|
||||
#include <gio/gio.h>
|
||||
@@ -1074,11 +1075,18 @@ ProxyConfigServiceLinux::Delegate::GetConfigFromSettings() {
|
||||
config.set_from_system(true);
|
||||
|
||||
std::string mode;
|
||||
- if (!setting_getter_->GetString(SettingGetter::PROXY_MODE, &mode)) {
|
||||
+ bool use_flatpak_sandbox = (sandbox::FlatpakSandbox::GetInstance()->GetSandboxLevel() >
|
||||
+ sandbox::FlatpakSandbox::SandboxLevel::kNone);
|
||||
+
|
||||
+ if (!use_flatpak_sandbox &&
|
||||
+ !setting_getter_->GetString(SettingGetter::PROXY_MODE, &mode)) {
|
||||
// We expect this to always be set, so if we don't see it then we probably
|
||||
// have a gsettings problem, and so we don't have a valid proxy config.
|
||||
return absl::nullopt;
|
||||
+ } else if (use_flatpak_sandbox) {
|
||||
+ mode = "auto";
|
||||
}
|
||||
+
|
||||
if (mode == "none") {
|
||||
// Specifically specifies no proxy.
|
||||
return ProxyConfigWithAnnotation(
|
||||
diff --git a/net/proxy_resolution/proxy_resolver_linux.cc b/net/proxy_resolution/proxy_resolver_linux.cc
|
||||
new file mode 100644
|
||||
index 0000000000000..3e3a252f0ef66
|
||||
--- /dev/null
|
||||
+++ b/net/proxy_resolution/proxy_resolver_linux.cc
|
||||
@@ -0,0 +1,123 @@
|
||||
+// Copyright (c) 2020 Endless OS Foundation LLC
|
||||
+// Use of this source code is governed by a BSD-style license that can be
|
||||
+// found in the LICENSE file.
|
||||
+
|
||||
+#include "net/proxy_resolution/proxy_resolver_linux.h"
|
||||
+
|
||||
+#include "base/time/time.h"
|
||||
+#include "base/timer/timer.h"
|
||||
+#include "net/base/net_errors.h"
|
||||
+#include "net/proxy_resolution/proxy_info.h"
|
||||
+#include "net/proxy_resolution/proxy_resolver.h"
|
||||
+#include "sandbox/linux/services/flatpak_sandbox.h"
|
||||
+
|
||||
+#if defined(USE_GIO)
|
||||
+#include <gio/gio.h>
|
||||
+#endif // defined(USE_GIO)
|
||||
+
|
||||
+namespace net {
|
||||
+
|
||||
+namespace {
|
||||
+
|
||||
+#if defined(USE_GIO)
|
||||
+// Same TTL used for DNS caches, see net/dns/host_resolver_manager.cc
|
||||
+static const unsigned kCacheExpireSeconds = 60;
|
||||
+
|
||||
+class ProxyResolverLinuxImplPortal : public ProxyResolver {
|
||||
+ public:
|
||||
+ explicit ProxyResolverLinuxImplPortal();
|
||||
+ ~ProxyResolverLinuxImplPortal() override;
|
||||
+
|
||||
+ // ProxyResolver methods:
|
||||
+ int GetProxyForURL(const GURL& url,
|
||||
+ const NetworkAnonymizationKey& network_anonymization_key,
|
||||
+ ProxyInfo* results,
|
||||
+ CompletionOnceCallback callback,
|
||||
+ std::unique_ptr<Request>* request,
|
||||
+ const NetLogWithSource& net_log) override;
|
||||
+
|
||||
+ private:
|
||||
+ void InvalidateCache();
|
||||
+
|
||||
+ // Both InvalidateCache and GetProxyForURL run on the same thread,
|
||||
+ // no need for explicit synchronization here
|
||||
+ std::map<std::string, std::string> cache_;
|
||||
+ base::RepeatingTimer cacheInvalidateTimer_;
|
||||
+
|
||||
+ GCancellable* cancellable_;
|
||||
+};
|
||||
+
|
||||
+ProxyResolverLinuxImplPortal::ProxyResolverLinuxImplPortal() {
|
||||
+ cancellable_ = g_cancellable_new();
|
||||
+
|
||||
+ cacheInvalidateTimer_.Start(FROM_HERE, base::Seconds(kCacheExpireSeconds),
|
||||
+ this,
|
||||
+ &ProxyResolverLinuxImplPortal::InvalidateCache);
|
||||
+}
|
||||
+
|
||||
+ProxyResolverLinuxImplPortal::~ProxyResolverLinuxImplPortal() {
|
||||
+ g_cancellable_cancel(cancellable_);
|
||||
+ g_clear_object(&cancellable_);
|
||||
+ cacheInvalidateTimer_.Stop();
|
||||
+}
|
||||
+
|
||||
+// Runs on the worker thread
|
||||
+int ProxyResolverLinuxImplPortal::GetProxyForURL(
|
||||
+ const GURL& query_url,
|
||||
+ const NetworkAnonymizationKey& /* network_anonymization_key_key */,
|
||||
+ ProxyInfo* results,
|
||||
+ CompletionOnceCallback /* callback */,
|
||||
+ std::unique_ptr<Request>* /* request */,
|
||||
+ const NetLogWithSource& /* net_log */) {
|
||||
+ std::map<std::string, std::string>::const_iterator it =
|
||||
+ cache_.find(query_url.spec());
|
||||
+ if (it != cache_.end()) {
|
||||
+ results->UseNamedProxy(it->second);
|
||||
+ return OK;
|
||||
+ }
|
||||
+
|
||||
+ GProxyResolver* resolver = g_proxy_resolver_get_default();
|
||||
+ // TODO: support async resolution if 'request' is non-null - the current
|
||||
+ // consumer is MultiThreadProxyResolver which always expects a sync
|
||||
+ // resolver
|
||||
+ // TODO: handle/warn on error
|
||||
+ g_auto(GStrv) proxy_list = g_proxy_resolver_lookup(
|
||||
+ resolver, query_url.spec().c_str(), cancellable_, NULL);
|
||||
+ if (proxy_list) {
|
||||
+ g_autofree gchar* proxy_list_str = g_strjoinv(";", proxy_list);
|
||||
+ if (proxy_list_str && proxy_list_str[0] != '\0') {
|
||||
+ cache_[query_url.spec()] = proxy_list_str;
|
||||
+ results->UseNamedProxy(proxy_list_str);
|
||||
+ }
|
||||
+ }
|
||||
+
|
||||
+ return OK;
|
||||
+}
|
||||
+
|
||||
+void ProxyResolverLinuxImplPortal::InvalidateCache() {
|
||||
+ cache_.clear();
|
||||
+}
|
||||
+
|
||||
+#endif // defined(USE_GIO)
|
||||
+
|
||||
+} // namespace
|
||||
+
|
||||
+ProxyResolverFactoryLinux::ProxyResolverFactoryLinux()
|
||||
+ : ProxyResolverFactory(false /* expects_pac_bytes */) {}
|
||||
+
|
||||
+int ProxyResolverFactoryLinux::CreateProxyResolver(
|
||||
+ const scoped_refptr<PacFileData>& pac_script,
|
||||
+ std::unique_ptr<ProxyResolver>* resolver,
|
||||
+ CompletionOnceCallback callback,
|
||||
+ std::unique_ptr<Request>* request) {
|
||||
+#if defined(USE_GIO)
|
||||
+ if (sandbox::FlatpakSandbox::GetInstance()->GetSandboxLevel() >
|
||||
+ sandbox::FlatpakSandbox::SandboxLevel::kNone) {
|
||||
+ resolver->reset(new ProxyResolverLinuxImplPortal());
|
||||
+ return OK;
|
||||
+ }
|
||||
+#endif
|
||||
+ return ERR_NOT_IMPLEMENTED;
|
||||
+}
|
||||
+
|
||||
+} // namespace net
|
||||
diff --git a/net/proxy_resolution/proxy_resolver_linux.h b/net/proxy_resolution/proxy_resolver_linux.h
|
||||
new file mode 100644
|
||||
index 0000000000000..7ae45eeae1a43
|
||||
--- /dev/null
|
||||
+++ b/net/proxy_resolution/proxy_resolver_linux.h
|
||||
@@ -0,0 +1,29 @@
|
||||
+// Copyright (c) 2020 Endless OS Foundation LLC
|
||||
+// Use of this source code is governed by a BSD-style license that can be
|
||||
+// found in the LICENSE file.
|
||||
+
|
||||
+#ifndef NET_PROXY_RESOLUTION_PROXY_RESOLVER_LINUX_H_
|
||||
+#define NET_PROXY_RESOLUTION_PROXY_RESOLVER_LINUX_H_
|
||||
+
|
||||
+#include "net/base/completion_once_callback.h"
|
||||
+#include "net/base/net_export.h"
|
||||
+#include "net/proxy_resolution/proxy_resolver_factory.h"
|
||||
+#include "url/gurl.h"
|
||||
+
|
||||
+namespace net {
|
||||
+
|
||||
+class NET_EXPORT ProxyResolverFactoryLinux : public ProxyResolverFactory {
|
||||
+ public:
|
||||
+ ProxyResolverFactoryLinux();
|
||||
+ ProxyResolverFactoryLinux(const ProxyResolverFactoryLinux&) = delete;
|
||||
+ ProxyResolverFactoryLinux(ProxyResolverFactoryLinux&&) = delete;
|
||||
+
|
||||
+ int CreateProxyResolver(const scoped_refptr<PacFileData>& pac_script,
|
||||
+ std::unique_ptr<ProxyResolver>* resolver,
|
||||
+ CompletionOnceCallback callback,
|
||||
+ std::unique_ptr<Request>* request) override;
|
||||
+};
|
||||
+
|
||||
+} // namespace net
|
||||
+
|
||||
+#endif // NET_PROXY_RESOLUTION_PROXY_RESOLVER_LINUX_H_
|
||||
--
|
||||
2.39.2
|
||||
|
|
@ -0,0 +1,27 @@
|
|||
From 075d164c1c7d1a405038ebed153e67a132c92548 Mon Sep 17 00:00:00 2001
|
||||
From: Ryan Gonzalez <rymg19@gmail.com>
|
||||
Date: Thu, 30 Sep 2021 11:27:43 -0500
|
||||
Subject: [PATCH] Clang build script: Disable hwasan
|
||||
|
||||
hwasan doesn't seem to actually compile if not on a host x86-64 system,
|
||||
and we don't really need this for the Flatpak anyway.
|
||||
---
|
||||
tools/clang/scripts/build.py | 2 +-
|
||||
1 file changed, 1 insertion(+), 1 deletion(-)
|
||||
|
||||
diff --git a/tools/clang/scripts/build.py b/tools/clang/scripts/build.py
|
||||
index 62cde9673ec68..8dafae1c08f2d 100755
|
||||
--- a/tools/clang/scripts/build.py
|
||||
+++ b/tools/clang/scripts/build.py
|
||||
@@ -503,7 +503,7 @@ def compiler_rt_cmake_flags(*, sanitizers, profile):
|
||||
'COMPILER_RT_BUILD_SANITIZERS=' + ('ON' if sanitizers else 'OFF'),
|
||||
'COMPILER_RT_BUILD_XRAY=OFF',
|
||||
# See crbug.com/1205046: don't build scudo (and others we don't need).
|
||||
- 'COMPILER_RT_SANITIZERS_TO_BUILD=asan;dfsan;msan;hwasan;tsan;cfi',
|
||||
+ 'COMPILER_RT_SANITIZERS_TO_BUILD=asan;dfsan;msan;tsan;cfi',
|
||||
# We explicitly list all targets we want to build, do not autodetect
|
||||
# targets.
|
||||
'COMPILER_RT_DEFAULT_TARGET_ONLY=ON',
|
||||
--
|
||||
2.39.2
|
||||
|
|
@ -0,0 +1,78 @@
|
|||
From 4bf3c18d7fceaf24e23a93b636789aed0ccc48b2 Mon Sep 17 00:00:00 2001
|
||||
From: Ryan Gonzalez <rymg19@gmail.com>
|
||||
Date: Wed, 31 Aug 2022 10:09:01 -0500
|
||||
Subject: [PATCH] Clang build script: Don't build against the sysroot
|
||||
|
||||
---
|
||||
tools/clang/scripts/build.py | 48 ++++++++++--------------------------
|
||||
1 file changed, 13 insertions(+), 35 deletions(-)
|
||||
|
||||
diff --git a/tools/clang/scripts/build.py b/tools/clang/scripts/build.py
|
||||
index 155ac4b52724b..5257433584144 100755
|
||||
--- a/tools/clang/scripts/build.py
|
||||
+++ b/tools/clang/scripts/build.py
|
||||
@@ -762,7 +762,7 @@ def main():
|
||||
MaybeDownloadHostGcc(args)
|
||||
base_cmake_args += [ '-DLLVM_STATIC_LINK_CXX_STDLIB=ON' ]
|
||||
|
||||
- if sys.platform.startswith('linux'):
|
||||
+ if sys.platform.startswith('linux') and False:
|
||||
# Download sysroots. This uses basically Chromium's sysroots, but with
|
||||
# minor changes:
|
||||
# - glibc version bumped to 2.18 to make __cxa_thread_atexit_impl
|
||||
@@ -1071,40 +1071,18 @@ def main():
|
||||
runtimes_triples_args = []
|
||||
|
||||
if sys.platform.startswith('linux'):
|
||||
- runtimes_triples_args.append((
|
||||
- 'i386-unknown-linux-gnu',
|
||||
- compiler_rt_cmake_flags(sanitizers=True, profile=True) + [
|
||||
- 'CMAKE_SYSROOT=%s' % sysroot_i386,
|
||||
- # TODO(https://crbug.com/1374690): pass proper flags to i386 tests so they compile correctly
|
||||
- 'LLVM_INCLUDE_TESTS=OFF',
|
||||
- ]))
|
||||
- runtimes_triples_args.append(
|
||||
- ('x86_64-unknown-linux-gnu',
|
||||
- compiler_rt_cmake_flags(sanitizers=True, profile=True) + [
|
||||
- 'CMAKE_SYSROOT=%s' % sysroot_amd64,
|
||||
- ]))
|
||||
- runtimes_triples_args.append(
|
||||
- # Using "armv7a-unknown-linux-gnueabhihf" confuses the compiler-rt
|
||||
- # builtins build, since compiler-rt/cmake/builtin-config-ix.cmake
|
||||
- # doesn't include "armv7a" in its `ARM32` list.
|
||||
- # TODO(thakis): It seems to work for everything else though, see try
|
||||
- # results on
|
||||
- # https://chromium-review.googlesource.com/c/chromium/src/+/3702739/4
|
||||
- # Maybe it should work for builtins too?
|
||||
- (
|
||||
- 'armv7-unknown-linux-gnueabihf',
|
||||
- compiler_rt_cmake_flags(sanitizers=True, profile=True) + [
|
||||
- 'CMAKE_SYSROOT=%s' % sysroot_arm,
|
||||
- # Can't run tests on x86 host.
|
||||
- 'LLVM_INCLUDE_TESTS=OFF',
|
||||
- ]))
|
||||
- runtimes_triples_args.append((
|
||||
- 'aarch64-unknown-linux-gnu',
|
||||
- compiler_rt_cmake_flags(sanitizers=True, profile=True) + [
|
||||
- 'CMAKE_SYSROOT=%s' % sysroot_arm64,
|
||||
- # Can't run tests on x86 host.
|
||||
- 'LLVM_INCLUDE_TESTS=OFF',
|
||||
- ]))
|
||||
+ if platform.machine() == 'x86_64':
|
||||
+ runtimes_triples_args.append((
|
||||
+ 'x86_64-unknown-linux-gnu',
|
||||
+ compiler_rt_cmake_flags(sanitizers=True, profile=True) + [
|
||||
+ 'LLVM_INCLUDE_TESTS=OFF',
|
||||
+ ]))
|
||||
+ else:
|
||||
+ runtimes_triples_args.append((
|
||||
+ 'aarch64-unknown-linux-gnu',
|
||||
+ compiler_rt_cmake_flags(sanitizers=True, profile=True) + [
|
||||
+ 'LLVM_INCLUDE_TESTS=OFF',
|
||||
+ ]))
|
||||
elif sys.platform == 'win32':
|
||||
runtimes_triples_args.append(
|
||||
('i386-pc-windows-msvc',
|
||||
--
|
||||
2.39.2
|
||||
|
|
@ -0,0 +1,98 @@
|
|||
From 3c1106bf5334c3481f4d1a792c529669b30a20e6 Mon Sep 17 00:00:00 2001
|
||||
From: Ryan Gonzalez <rymg19@gmail.com>
|
||||
Date: Tue, 19 Jan 2021 15:41:16 -0600
|
||||
Subject: [PATCH] Enable accelerated mjpeg decode on Linux
|
||||
|
||||
---
|
||||
chrome/browser/about_flags.cc | 4 ++--
|
||||
chrome/browser/flag_descriptions.cc | 10 +++++++---
|
||||
chrome/browser/flag_descriptions.h | 10 +++++++---
|
||||
media/base/media_switches.cc | 2 +-
|
||||
4 files changed, 17 insertions(+), 9 deletions(-)
|
||||
|
||||
diff --git a/chrome/browser/about_flags.cc b/chrome/browser/about_flags.cc
|
||||
index e2d74e803159c..eaf7108715f4b 100644
|
||||
--- a/chrome/browser/about_flags.cc
|
||||
+++ b/chrome/browser/about_flags.cc
|
||||
@@ -4784,10 +4784,10 @@ const FeatureEntry kFeatureEntries[] = {
|
||||
FEATURE_VALUE_TYPE(device::features::kWebXrSharedBuffers)},
|
||||
#endif // BUILDFLAG(IS_ANDROID)
|
||||
#endif // ENABLE_VR
|
||||
-#if BUILDFLAG(IS_CHROMEOS_ASH)
|
||||
+#if BUILDFLAG(IS_CHROMEOS_ASH) || (defined(OS_LINUX) && !defined(OS_ANDROID))
|
||||
{"disable-accelerated-mjpeg-decode",
|
||||
flag_descriptions::kAcceleratedMjpegDecodeName,
|
||||
- flag_descriptions::kAcceleratedMjpegDecodeDescription, kOsCrOS,
|
||||
+ flag_descriptions::kAcceleratedMjpegDecodeDescription, kOsCrOS | kOsLinux,
|
||||
SINGLE_DISABLE_VALUE_TYPE(switches::kDisableAcceleratedMjpegDecode)},
|
||||
#endif // BUILDFLAG(IS_CHROMEOS_ASH)
|
||||
{"system-keyboard-lock", flag_descriptions::kSystemKeyboardLockName,
|
||||
diff --git a/chrome/browser/flag_descriptions.cc b/chrome/browser/flag_descriptions.cc
|
||||
index cbf801b055f67..241596087ccc4 100644
|
||||
--- a/chrome/browser/flag_descriptions.cc
|
||||
+++ b/chrome/browser/flag_descriptions.cc
|
||||
@@ -4976,9 +4976,7 @@ const char kBiometricAuthenticationForFillingDescription[] =
|
||||
"Enables biometric authentication before filling form data";
|
||||
#endif // BUILDFLAG(IS_WIN) || BUILDFLAG(IS_MAC)
|
||||
|
||||
-// ChromeOS -------------------------------------------------------------------
|
||||
-
|
||||
-#if BUILDFLAG(IS_CHROMEOS_ASH)
|
||||
+#if BUILDFLAG(IS_CHROMEOS_ASH) || (defined(OS_LINUX) && !defined(OS_ANDROID))
|
||||
|
||||
const char kAcceleratedMjpegDecodeName[] =
|
||||
"Hardware-accelerated mjpeg decode for captured frame";
|
||||
@@ -4986,6 +4984,12 @@ const char kAcceleratedMjpegDecodeDescription[] =
|
||||
"Enable hardware-accelerated mjpeg decode for captured frame where "
|
||||
"available.";
|
||||
|
||||
+#endif
|
||||
+
|
||||
+// ChromeOS -------------------------------------------------------------------
|
||||
+
|
||||
+#if BUILDFLAG(IS_CHROMEOS_ASH)
|
||||
+
|
||||
const char kAdaptiveChargingForTestingName[] =
|
||||
"Show adaptive charging notifications for testing";
|
||||
const char kAdaptiveChargingForTestingDescription[] =
|
||||
diff --git a/chrome/browser/flag_descriptions.h b/chrome/browser/flag_descriptions.h
|
||||
index 2ce6692612e1d..73afeb4c7c53e 100644
|
||||
--- a/chrome/browser/flag_descriptions.h
|
||||
+++ b/chrome/browser/flag_descriptions.h
|
||||
@@ -2864,13 +2864,17 @@ extern const char kBiometricAuthenticationForFillingDescription[];
|
||||
|
||||
#endif // BUILDFLAG(IS_WIN) || BUILDFLAG(IS_MAC)
|
||||
|
||||
-// ChromeOS -------------------------------------------------------------------
|
||||
-
|
||||
-#if BUILDFLAG(IS_CHROMEOS_ASH)
|
||||
+#if BUILDFLAG(IS_CHROMEOS_ASH) || (defined(OS_LINUX) && !defined(OS_ANDROID))
|
||||
|
||||
extern const char kAcceleratedMjpegDecodeName[];
|
||||
extern const char kAcceleratedMjpegDecodeDescription[];
|
||||
|
||||
+#endif
|
||||
+
|
||||
+// ChromeOS -------------------------------------------------------------------
|
||||
+
|
||||
+#if BUILDFLAG(IS_CHROMEOS_ASH)
|
||||
+
|
||||
extern const char kAdaptiveChargingName[];
|
||||
extern const char kAdaptiveChargingDescription[];
|
||||
|
||||
diff --git a/media/base/media_switches.cc b/media/base/media_switches.cc
|
||||
index b8f748b183652..70ee6d2cce670 100644
|
||||
--- a/media/base/media_switches.cc
|
||||
+++ b/media/base/media_switches.cc
|
||||
@@ -1497,7 +1497,7 @@ bool IsVideoCaptureAcceleratedJpegDecodingEnabled() {
|
||||
switches::kUseFakeMjpegDecodeAccelerator)) {
|
||||
return true;
|
||||
}
|
||||
-#if BUILDFLAG(IS_CHROMEOS_ASH)
|
||||
+#if BUILDFLAG(IS_CHROMEOS_ASH) || (defined(OS_LINUX) && !defined(OS_ANDROID))
|
||||
return true;
|
||||
#else
|
||||
return false;
|
||||
--
|
||||
2.39.2
|
||||
|
|
@ -0,0 +1,46 @@
|
|||
From cc1c69b61de411b413e6cef70d5830df60947dc2 Mon Sep 17 00:00:00 2001
|
||||
From: Ryan Gonzalez <rymg19@gmail.com>
|
||||
Date: Thu, 19 Nov 2020 16:20:05 -0600
|
||||
Subject: [PATCH] Enable new-dtags on non-component builds
|
||||
|
||||
---
|
||||
build/config/gcc/BUILD.gn | 23 ++++++++++++++++-------
|
||||
1 file changed, 16 insertions(+), 7 deletions(-)
|
||||
|
||||
diff --git a/build/config/gcc/BUILD.gn b/build/config/gcc/BUILD.gn
|
||||
index 147ebfc53426c..d598bfa70b1b6 100644
|
||||
--- a/build/config/gcc/BUILD.gn
|
||||
+++ b/build/config/gcc/BUILD.gn
|
||||
@@ -101,13 +101,22 @@ config("executable_config") {
|
||||
}
|
||||
|
||||
if (!is_android && current_os != "aix") {
|
||||
- ldflags += [
|
||||
- # TODO(GYP): Do we need a check on the binutils version here?
|
||||
- #
|
||||
- # Newer binutils don't set DT_RPATH unless you disable "new" dtags
|
||||
- # and the new DT_RUNPATH doesn't work without --no-as-needed flag.
|
||||
- "-Wl,--disable-new-dtags",
|
||||
- ]
|
||||
+ if (is_component_build) {
|
||||
+ ldflags += [
|
||||
+ # TODO(GYP): Do we need a check on the binutils version here?
|
||||
+ #
|
||||
+ # Newer binutils don't set DT_RPATH unless you disable "new" dtags
|
||||
+ # and the new DT_RUNPATH doesn't work without --no-as-needed flag.
|
||||
+ "-Wl,--disable-new-dtags",
|
||||
+ ]
|
||||
+ } else {
|
||||
+ # Using DT_RUNPATH breaks the component builds, because RUNPATH isn't used
|
||||
+ # to look up transitive dependencies like RPATH is, but it's fine for
|
||||
+ # primarily static builds.
|
||||
+ ldflags += [
|
||||
+ "-Wl,--enable-new-dtags"
|
||||
+ ]
|
||||
+ }
|
||||
}
|
||||
}
|
||||
|
||||
--
|
||||
2.39.2
|
||||
|
|
@ -0,0 +1,29 @@
|
|||
From 165d50d603fce1340986ce4a9330881a41043a1e Mon Sep 17 00:00:00 2001
|
||||
From: Ryan Gonzalez <rymg19@gmail.com>
|
||||
Date: Mon, 19 Dec 2022 19:58:16 -0600
|
||||
Subject: [PATCH] Ignore useless warnings from the Asahi driver
|
||||
|
||||
---
|
||||
ui/gl/gl_display.cc | 6 ++++++
|
||||
1 file changed, 6 insertions(+)
|
||||
|
||||
diff --git a/ui/gl/gl_display.cc b/ui/gl/gl_display.cc
|
||||
index ce97bb0b98f79..4a2db3615b2f5 100644
|
||||
--- a/ui/gl/gl_display.cc
|
||||
+++ b/ui/gl/gl_display.cc
|
||||
@@ -501,6 +501,12 @@ void EGLAPIENTRY LogEGLDebugMessage(EGLenum error,
|
||||
EGLLabelKHR thread_label,
|
||||
EGLLabelKHR object_label,
|
||||
const char* message) {
|
||||
+ if (message == std::string("_eglClientWaitSyncCommon") ||
|
||||
+ message == std::string("_eglDestroySync")) {
|
||||
+ // Unimplemented on the Asahi driver, so just ignore.
|
||||
+ return;
|
||||
+ }
|
||||
+
|
||||
std::string formatted_message = std::string("EGL Driver message (") +
|
||||
GetDebugMessageTypeString(message_type) +
|
||||
") " + command + ": " + message;
|
||||
--
|
||||
2.39.2
|
||||
|
|
@ -0,0 +1,24 @@
|
|||
From a1a5b43acabb7a39a0fa1256b68f6bcd5e534244 Mon Sep 17 00:00:00 2001
|
||||
From: Ryan Gonzalez <rymg19@gmail.com>
|
||||
Date: Tue, 17 Nov 2020 22:57:29 -0600
|
||||
Subject: [PATCH] Import chromium-71.0.3578.98-widevine-r3.patch
|
||||
|
||||
Taken from the Fedora 33 repositories.
|
||||
---
|
||||
third_party/widevine/cdm/widevine_cdm_version.h | 2 ++
|
||||
1 file changed, 2 insertions(+)
|
||||
|
||||
diff --git a/third_party/widevine/cdm/widevine_cdm_version.h b/third_party/widevine/cdm/widevine_cdm_version.h
|
||||
index db80700b6c1b2..370bb3c9724ec 100644
|
||||
--- a/third_party/widevine/cdm/widevine_cdm_version.h
|
||||
+++ b/third_party/widevine/cdm/widevine_cdm_version.h
|
||||
@@ -12,4 +12,6 @@
|
||||
// - WIDEVINE_CDM_VERSION_STRING (with the version of the CDM that's available
|
||||
// as a string, e.g., "1.0.123.456").
|
||||
|
||||
+#define WIDEVINE_CDM_VERSION_STRING "unknown"
|
||||
+
|
||||
#endif // WIDEVINE_CDM_VERSION_H_
|
||||
--
|
||||
2.39.2
|
||||
|
|
@ -0,0 +1,68 @@
|
|||
From bc47457eef7940d49ae5ab9c1cd637bc852e1437 Mon Sep 17 00:00:00 2001
|
||||
From: Ryan Gonzalez <rymg19@gmail.com>
|
||||
Date: Wed, 11 Nov 2020 16:51:49 -0600
|
||||
Subject: [PATCH] Remove the ability to create desktop shortcuts
|
||||
|
||||
---
|
||||
.../ui/views/create_application_shortcut_view.cc | 11 ++---------
|
||||
.../ui/views/create_application_shortcut_view.h | 1 -
|
||||
2 files changed, 2 insertions(+), 10 deletions(-)
|
||||
|
||||
diff --git a/chrome/browser/ui/views/create_application_shortcut_view.cc b/chrome/browser/ui/views/create_application_shortcut_view.cc
|
||||
index cc577c0f0b0ba..9d7b4239fe451 100644
|
||||
--- a/chrome/browser/ui/views/create_application_shortcut_view.cc
|
||||
+++ b/chrome/browser/ui/views/create_application_shortcut_view.cc
|
||||
@@ -114,10 +114,6 @@ void CreateChromeApplicationShortcutView::InitControls() {
|
||||
create_shortcuts_label->SetHorizontalAlignment(gfx::ALIGN_LEFT);
|
||||
create_shortcuts_label->SetMultiLine(true);
|
||||
|
||||
- std::unique_ptr<views::Checkbox> desktop_check_box = AddCheckbox(
|
||||
- l10n_util::GetStringUTF16(IDS_CREATE_SHORTCUTS_DESKTOP_CHKBOX),
|
||||
- prefs::kWebAppCreateOnDesktop);
|
||||
-
|
||||
std::unique_ptr<views::Checkbox> menu_check_box;
|
||||
std::unique_ptr<views::Checkbox> pin_to_taskbar_checkbox;
|
||||
|
||||
@@ -145,7 +141,6 @@ void CreateChromeApplicationShortcutView::InitControls() {
|
||||
views::BoxLayout::Orientation::kVertical, gfx::Insets(),
|
||||
provider->GetDistanceMetric(views::DISTANCE_RELATED_CONTROL_VERTICAL)));
|
||||
AddChildView(std::move(create_shortcuts_label));
|
||||
- desktop_check_box_ = AddChildView(std::move(desktop_check_box));
|
||||
if (menu_check_box)
|
||||
menu_check_box_ = AddChildView(std::move(menu_check_box));
|
||||
if (pin_to_taskbar_checkbox)
|
||||
@@ -167,9 +162,8 @@ bool CreateChromeApplicationShortcutView::IsDialogButtonEnabled(
|
||||
if (!shortcut_info_)
|
||||
return false; // Dialog's not ready because app info hasn't been loaded.
|
||||
|
||||
- // One of the three location checkboxes must be checked:
|
||||
- return desktop_check_box_->GetChecked() ||
|
||||
- (menu_check_box_ && menu_check_box_->GetChecked()) ||
|
||||
+ // One of the two location checkboxes must be checked:
|
||||
+ return (menu_check_box_ && menu_check_box_->GetChecked()) ||
|
||||
(quick_launch_check_box_ && quick_launch_check_box_->GetChecked());
|
||||
}
|
||||
|
||||
@@ -188,7 +182,6 @@ void CreateChromeApplicationShortcutView::OnDialogAccepted() {
|
||||
return;
|
||||
|
||||
web_app::ShortcutLocations creation_locations;
|
||||
- creation_locations.on_desktop = desktop_check_box_->GetChecked();
|
||||
if (menu_check_box_ && menu_check_box_->GetChecked()) {
|
||||
creation_locations.applications_menu_location =
|
||||
web_app::APP_MENU_LOCATION_SUBDIR_CHROMEAPPS;
|
||||
diff --git a/chrome/browser/ui/views/create_application_shortcut_view.h b/chrome/browser/ui/views/create_application_shortcut_view.h
|
||||
index df40729a1c1d2..39d5800687d49 100644
|
||||
--- a/chrome/browser/ui/views/create_application_shortcut_view.h
|
||||
+++ b/chrome/browser/ui/views/create_application_shortcut_view.h
|
||||
@@ -76,7 +76,6 @@ class CreateChromeApplicationShortcutView : public views::DialogDelegateView {
|
||||
base::OnceCallback<void(bool)> close_callback_;
|
||||
|
||||
// May be null if the platform doesn't support a particular location.
|
||||
- raw_ptr<views::Checkbox> desktop_check_box_ = nullptr;
|
||||
raw_ptr<views::Checkbox> menu_check_box_ = nullptr;
|
||||
raw_ptr<views::Checkbox> quick_launch_check_box_ = nullptr;
|
||||
|
||||
--
|
||||
2.39.2
|
||||
|
File diff suppressed because it is too large
Load diff
|
@ -0,0 +1,40 @@
|
|||
From 65b71b0ee6ae746a75e9ecc76fbc36d43d9fe761 Mon Sep 17 00:00:00 2001
|
||||
From: Ryan Gonzalez <rymg19@gmail.com>
|
||||
Date: Wed, 11 Nov 2020 17:13:38 -0600
|
||||
Subject: [PATCH] Use CHROME_WRAPPER as the executable on restart
|
||||
|
||||
---
|
||||
chrome/browser/first_run/upgrade_util_linux.cc | 7 ++++++-
|
||||
1 file changed, 6 insertions(+), 1 deletion(-)
|
||||
|
||||
diff --git a/chrome/browser/first_run/upgrade_util_linux.cc b/chrome/browser/first_run/upgrade_util_linux.cc
|
||||
index 229da211ae987..22fbcd9d890f2 100644
|
||||
--- a/chrome/browser/first_run/upgrade_util_linux.cc
|
||||
+++ b/chrome/browser/first_run/upgrade_util_linux.cc
|
||||
@@ -12,6 +12,7 @@
|
||||
#include "base/path_service.h"
|
||||
#include "base/process/launch.h"
|
||||
#include "chrome/browser/first_run/upgrade_util_linux.h"
|
||||
+#include "chrome/browser/shell_integration_linux.h"
|
||||
|
||||
namespace {
|
||||
|
||||
@@ -22,10 +23,14 @@ double saved_last_modified_time_of_exe = 0;
|
||||
namespace upgrade_util {
|
||||
|
||||
bool RelaunchChromeBrowserImpl(const base::CommandLine& command_line) {
|
||||
+ base::CommandLine new_cl(command_line);
|
||||
+ // TODO: move the code outside the internal namespace.
|
||||
+ new_cl.SetProgram(shell_integration_linux::internal::GetChromeExePath());
|
||||
+
|
||||
base::LaunchOptions options;
|
||||
// Don't set NO_NEW_PRIVS on the relaunched browser process.
|
||||
options.allow_new_privs = true;
|
||||
- return base::LaunchProcess(command_line, options).IsValid();
|
||||
+ return base::LaunchProcess(new_cl, options).IsValid();
|
||||
}
|
||||
|
||||
bool IsUpdatePendingRestart() {
|
||||
--
|
||||
2.39.2
|
||||
|
|
@ -0,0 +1,24 @@
|
|||
[
|
||||
{
|
||||
"type": "patch",
|
||||
"paths": [
|
||||
"patches/chromium/flatpak-Add-initial-sandbox-support.patch",
|
||||
"patches/chromium/flatpak-Expose-Widevine-into-the-sandbox.patch",
|
||||
"patches/chromium/flatpak-Adjust-paths-for-the-sandbox.patch",
|
||||
"patches/chromium/Import-chromium-71.0.3578.98-widevine-r3.patch.patch",
|
||||
"patches/chromium/x11-Set-_NET_WM_BYPASS_COMPOSITOR-for-fullscreen.patch",
|
||||
"patches/chromium/memory-Enable-the-tab-discards-feature.patch",
|
||||
"patches/chromium/Enable-accelerated-mjpeg-decode-on-Linux.patch",
|
||||
"patches/chromium/ffmpeg-Don-t-lie-about-AAC-and-H264-decoders-when-not-avai.patch",
|
||||
"patches/chromium/Remove-the-ability-to-create-desktop-shortcuts.patch",
|
||||
"patches/chromium/Use-CHROME_WRAPPER-as-the-executable-on-restart.patch",
|
||||
"patches/chromium/Enable-new-dtags-on-non-component-builds.patch",
|
||||
"patches/chromium/Add-support-for-respecting-system-proxy-settings-when-runn.patch",
|
||||
"patches/chromium/Clang-build-script-Disable-hwasan.patch",
|
||||
"patches/chromium/clang-build-script-Support-disabling-the-bundled-libxml2.patch",
|
||||
"patches/chromium/Clang-build-script-Don-t-build-against-the-sysroot.patch",
|
||||
"patches/chromium/Ignore-useless-warnings-from-the-Asahi-driver.patch",
|
||||
"patches/chromium/Revert-Reland-Linux-Ozone-Wayland-Support-fractional-scale.patch"
|
||||
]
|
||||
}
|
||||
]
|
|
@ -0,0 +1,64 @@
|
|||
From 316519ae5254029edb019bf85cb28c70af768ad6 Mon Sep 17 00:00:00 2001
|
||||
From: Ryan Gonzalez <rymg19@gmail.com>
|
||||
Date: Tue, 1 Mar 2022 19:29:12 -0600
|
||||
Subject: [PATCH] clang build script: Support disabling the bundled libxml2
|
||||
|
||||
In the case of toolchain builds that won't be using the cross
|
||||
compilers, this isn't needed, and it can be a problem when
|
||||
attempting to build a toolchain without network access.
|
||||
---
|
||||
tools/clang/scripts/build.py | 24 +++++++++++++++++-------
|
||||
1 file changed, 17 insertions(+), 7 deletions(-)
|
||||
|
||||
diff --git a/tools/clang/scripts/build.py b/tools/clang/scripts/build.py
|
||||
index 8dafae1c08f2d..155ac4b52724b 100755
|
||||
--- a/tools/clang/scripts/build.py
|
||||
+++ b/tools/clang/scripts/build.py
|
||||
@@ -574,6 +574,8 @@ def main():
|
||||
'\'default\', will download an official model which was '
|
||||
'trained for Chrome on Android',
|
||||
default='default' if sys.platform.startswith('linux') else '')
|
||||
+ parser.add_argument('--use-system-libxml', action='store_true',
|
||||
+ help='use the system libxml2 (unsupported on Windows)')
|
||||
parser.add_argument('--with-android', type=gn_arg, nargs='?', const=True,
|
||||
help='build the Android ASan runtime (linux only)',
|
||||
default=sys.platform.startswith('linux'))
|
||||
@@ -628,6 +630,10 @@ def main():
|
||||
print('--with-ml-inliner-model only supports linux hosts')
|
||||
return 1
|
||||
|
||||
+ if args.use_system_libxml and sys.platform == 'win32':
|
||||
+ print('--use-system-xml is not valid on Windows')
|
||||
+ return 1
|
||||
+
|
||||
# Don't buffer stdout, so that print statements are immediately flushed.
|
||||
# LLVM tests print output without newlines, so with buffering they won't be
|
||||
# immediately printed.
|
||||
@@ -821,13 +827,17 @@ def main():
|
||||
rpmalloc_dir = DownloadRPMalloc()
|
||||
base_cmake_args.append('-DLLVM_INTEGRATED_CRT_ALLOC=' + rpmalloc_dir)
|
||||
|
||||
- # Statically link libxml2 to make lld-link not require mt.exe on Windows,
|
||||
- # and to make sure lld-link output on other platforms is identical to
|
||||
- # lld-link on Windows (for cross-builds).
|
||||
- libxml_cmake_args, libxml_cflags = BuildLibXml2()
|
||||
- base_cmake_args += libxml_cmake_args
|
||||
- cflags += libxml_cflags
|
||||
- cxxflags += libxml_cflags
|
||||
+ if args.use_system_libxml:
|
||||
+ # libxml2 is required by the Win manifest merging tool used in cross-builds.
|
||||
+ base_cmake_args.append('-DLLVM_ENABLE_LIBXML2=FORCE_ON')
|
||||
+ else:
|
||||
+ # Statically link libxml2 to make lld-link not require mt.exe on Windows,
|
||||
+ # and to make sure lld-link output on other platforms is identical to
|
||||
+ # lld-link on Windows (for cross-builds).
|
||||
+ libxml_cmake_args, libxml_cflags = BuildLibXml2()
|
||||
+ base_cmake_args += libxml_cmake_args
|
||||
+ cflags += libxml_cflags
|
||||
+ cxxflags += libxml_cflags
|
||||
|
||||
if args.bootstrap:
|
||||
print('Building bootstrap compiler')
|
||||
--
|
||||
2.39.2
|
||||
|
|
@ -0,0 +1,190 @@
|
|||
From b6535b668e3517f153c6b5be8963b367bc4ac833 Mon Sep 17 00:00:00 2001
|
||||
From: Mario Sanchez Prada <mario@endlessm.com>
|
||||
Date: Tue, 25 Oct 2016 16:57:00 +0000
|
||||
Subject: [PATCH] ffmpeg: Don't lie about AAC and H264 decoders when not
|
||||
available
|
||||
|
||||
On Endless OS, we always build with USE_PROPRIETARY_CODECS defined
|
||||
and then, depending on the version of libffmpeg.so that is loaded,
|
||||
some non-free codecs can be available other than free ones.
|
||||
|
||||
The problem with this approach is that Chromium will internally
|
||||
report that all the proprietary codecs are available regardless
|
||||
of the version of libffmpeg.so that is being used so we need
|
||||
to add some extra checks in this case at least for the codecs
|
||||
that Endless OS would support in the non-free version of the OS),
|
||||
so that users unable to reproduce certain media formats will then
|
||||
be reported about it, so that they can decide whether to purchase
|
||||
codecs activation key to unlock that particular type of content.
|
||||
|
||||
This patch double-checks whether the AAC and H264 decoders are really
|
||||
available at run-time before adding the related MIME type to the list
|
||||
of supported formats, so that we have a chance to let users know that
|
||||
they might need to upgrade to a non-free version of Endless OS.
|
||||
|
||||
https://phabricator.endlessm.com/T15216
|
||||
https://phabricator.endlessm.com/T30286
|
||||
https://phabricator.endlessm.com/T30300
|
||||
---
|
||||
media/base/BUILD.gn | 4 ++
|
||||
media/base/mime_util_internal.cc | 86 +++++++++++++++++++++++++++++---
|
||||
2 files changed, 83 insertions(+), 7 deletions(-)
|
||||
|
||||
diff --git a/media/base/BUILD.gn b/media/base/BUILD.gn
|
||||
index a180a6444c967..1c36adafc11e8 100644
|
||||
--- a/media/base/BUILD.gn
|
||||
+++ b/media/base/BUILD.gn
|
||||
@@ -410,6 +410,10 @@ source_set("base") {
|
||||
"//third_party/ffmpeg",
|
||||
"//third_party/ffmpeg:ffmpeg_features",
|
||||
]
|
||||
+
|
||||
+ if (is_linux) {
|
||||
+ libs += ["openh264"]
|
||||
+ }
|
||||
}
|
||||
|
||||
if (is_chromeos_ash) {
|
||||
diff --git a/media/base/mime_util_internal.cc b/media/base/mime_util_internal.cc
|
||||
index f38d6a145e84b..c78c69cc6d276 100644
|
||||
--- a/media/base/mime_util_internal.cc
|
||||
+++ b/media/base/mime_util_internal.cc
|
||||
@@ -4,6 +4,8 @@
|
||||
|
||||
#include "media/base/mime_util_internal.h"
|
||||
|
||||
+#include <wels/codec_api.h>
|
||||
+
|
||||
#include "base/command_line.h"
|
||||
#include "base/feature_list.h"
|
||||
#include "base/logging.h"
|
||||
@@ -31,6 +33,8 @@
|
||||
#include "media/base/android/media_codec_util.h" // nogncheck
|
||||
#endif
|
||||
|
||||
+#include <dlfcn.h>
|
||||
+
|
||||
namespace media::internal {
|
||||
|
||||
// A map from codec string to MimeUtil::Codec.
|
||||
@@ -293,6 +297,54 @@ void MimeUtil::InitializeMimeTypeMaps() {
|
||||
AddSupportedMediaFormats();
|
||||
}
|
||||
|
||||
+/* On Endless OS, we always build with USE_PROPRIETARY_CODECS defined
|
||||
+ * and then, depending on the version of libffmpeg.so that is loaded,
|
||||
+ * some non-free codecs can be available other than free ones.
|
||||
+ *
|
||||
+ * The problem with this approach is that Chromium will internally
|
||||
+ * report that all the proprietary codecs are available regardless
|
||||
+ * of the version of libffmpeg.so that is being used so we need
|
||||
+ * to add some extra checks in this case at least for the codecs
|
||||
+ * that Endless OS would support in the non-free version of the OS),
|
||||
+ * so that users unable to reproduce certain media formats will then
|
||||
+ * be reported about it, so that they can decide whether to purchase
|
||||
+ * codecs activation key to unlock that particular type of content.
|
||||
+ */
|
||||
+
|
||||
+static void CheckNonFreeMimeTypesOnFlatpak(bool& supports_h264,
|
||||
+ bool& supports_aac) {
|
||||
+ // Get a handle for the current process
|
||||
+ std::unique_ptr<void, decltype(&dlclose)> handle(dlopen(nullptr, RTLD_NOW),
|
||||
+ dlclose);
|
||||
+ if (handle) {
|
||||
+ // Let's check what ffmpeg-based decoders are available.
|
||||
+ supports_h264 = dlsym(handle.get(), "ff_h264_decoder") != nullptr;
|
||||
+ supports_aac = dlsym(handle.get(), "ff_libfdk_aac_decoder") != nullptr;
|
||||
+
|
||||
+ if (supports_h264) {
|
||||
+ VLOG(1) << "Using FFmpeg's H.264 decoder";
|
||||
+ }
|
||||
+ if (supports_aac) {
|
||||
+ VLOG(1) << "Using FFmpeg's AAC decoder";
|
||||
+ }
|
||||
+ } else {
|
||||
+ LOG(WARNING) << ": Unable to obtain handle for main process: " << dlerror();
|
||||
+ }
|
||||
+
|
||||
+ if (!supports_h264) {
|
||||
+ SDecoderCapability decoder_caps;
|
||||
+ // The real library will always return 0 (ERROR_NONE), while our
|
||||
+ // own dummy library will return 3 (ERROR_API_FAILED) instead, and
|
||||
+ // we only want to support H264 if it's the real one, of course.
|
||||
+ supports_h264 = WelsGetDecoderCapability(&decoder_caps) == 0;
|
||||
+ if (supports_h264) {
|
||||
+ VLOG(1) << "Using Cisco OpenH264";
|
||||
+ } else {
|
||||
+ VLOG(1) << "No H.264 decoder available";
|
||||
+ }
|
||||
+ }
|
||||
+}
|
||||
+
|
||||
// Each call to AddContainerWithCodecs() contains a media type
|
||||
// (https://en.wikipedia.org/wiki/Media_type) and corresponding media codec(s)
|
||||
// supported by these types/containers.
|
||||
@@ -327,11 +379,22 @@ void MimeUtil::AddSupportedMediaFormats() {
|
||||
mp4_video_codecs.emplace(VP9);
|
||||
|
||||
#if BUILDFLAG(USE_PROPRIETARY_CODECS)
|
||||
- const CodecSet aac{MPEG2_AAC, MPEG4_AAC, MPEG4_XHE_AAC};
|
||||
+ bool supports_h264 = false;
|
||||
+ bool supports_aac = false;
|
||||
+ CheckNonFreeMimeTypesOnFlatpak(supports_h264, supports_aac);
|
||||
+
|
||||
+ CodecSet aac;
|
||||
+ if (supports_aac) {
|
||||
+ aac.emplace(MPEG2_AAC);
|
||||
+ aac.emplace(MPEG4_AAC);
|
||||
+ aac.emplace(MPEG4_XHE_AAC);
|
||||
+ }
|
||||
+
|
||||
mp4_audio_codecs.insert(aac.begin(), aac.end());
|
||||
|
||||
CodecSet avc_and_aac(aac);
|
||||
- avc_and_aac.emplace(H264);
|
||||
+ if (supports_aac && supports_h264)
|
||||
+ avc_and_aac.emplace(H264);
|
||||
|
||||
#if BUILDFLAG(ENABLE_PLATFORM_AC3_EAC3_AUDIO)
|
||||
mp4_audio_codecs.emplace(AC3);
|
||||
@@ -342,7 +405,9 @@ void MimeUtil::AddSupportedMediaFormats() {
|
||||
mp4_audio_codecs.emplace(MPEG_H_AUDIO);
|
||||
#endif // BUILDFLAG(ENABLE_PLATFORM_MPEG_H_AUDIO)
|
||||
|
||||
- mp4_video_codecs.emplace(H264);
|
||||
+ if (supports_h264)
|
||||
+ mp4_video_codecs.emplace(H264);
|
||||
+
|
||||
#if BUILDFLAG(ENABLE_PLATFORM_HEVC)
|
||||
mp4_video_codecs.emplace(HEVC);
|
||||
#endif // BUILDFLAG(ENABLE_PLATFORM_HEVC)
|
||||
@@ -382,15 +447,22 @@ void MimeUtil::AddSupportedMediaFormats() {
|
||||
AddContainerWithCodecs("audio/mp3", implicit_codec);
|
||||
AddContainerWithCodecs("audio/x-mp3", implicit_codec);
|
||||
AddContainerWithCodecs("audio/mp4", mp4_audio_codecs);
|
||||
- DCHECK(!mp4_video_codecs.empty());
|
||||
- AddContainerWithCodecs("video/mp4", mp4_codecs);
|
||||
|
||||
#if BUILDFLAG(USE_PROPRIETARY_CODECS)
|
||||
+ if (supports_h264) {
|
||||
+ DCHECK(!mp4_video_codecs.empty());
|
||||
+ AddContainerWithCodecs("video/mp4", mp4_codecs);
|
||||
+ }
|
||||
+
|
||||
AddContainerWithCodecs("audio/aac", implicit_codec); // AAC / ADTS.
|
||||
// These strings are supported for backwards compatibility only and thus only
|
||||
// support the codecs needed for compatibility.
|
||||
- AddContainerWithCodecs("audio/x-m4a", aac);
|
||||
- AddContainerWithCodecs("video/x-m4v", avc_and_aac);
|
||||
+ if (supports_aac) {
|
||||
+ AddContainerWithCodecs("audio/x-m4a", aac);
|
||||
+
|
||||
+ if (supports_h264)
|
||||
+ AddContainerWithCodecs("video/x-m4v", avc_and_aac);
|
||||
+ }
|
||||
|
||||
CodecSet video_3gpp_codecs(aac);
|
||||
video_3gpp_codecs.emplace(H264);
|
||||
--
|
||||
2.39.2
|
||||
|
File diff suppressed because it is too large
Load diff
|
@ -0,0 +1,124 @@
|
|||
From f58cb69ed276841108b9769cf2ba8d0905e8a3f9 Mon Sep 17 00:00:00 2001
|
||||
From: Ryan Gonzalez <rymg19@gmail.com>
|
||||
Date: Tue, 25 Aug 2020 19:26:07 -0500
|
||||
Subject: [PATCH] flatpak: Adjust paths for the sandbox
|
||||
|
||||
---
|
||||
chrome/common/BUILD.gn | 4 ++++
|
||||
chrome/common/chrome_paths.cc | 43 +++++++++++++++++++++++++++--------
|
||||
2 files changed, 38 insertions(+), 9 deletions(-)
|
||||
|
||||
diff --git a/chrome/common/BUILD.gn b/chrome/common/BUILD.gn
|
||||
index 21ba8f95b198d..13c51765c360d 100644
|
||||
--- a/chrome/common/BUILD.gn
|
||||
+++ b/chrome/common/BUILD.gn
|
||||
@@ -662,6 +662,10 @@ static_library("constants") {
|
||||
"//third_party/widevine/cdm:headers",
|
||||
]
|
||||
}
|
||||
+
|
||||
+ if (is_linux) {
|
||||
+ deps += [ "//sandbox/linux:sandbox_services" ]
|
||||
+ }
|
||||
}
|
||||
|
||||
# Use a static library here because many test binaries depend on this but don't
|
||||
diff --git a/chrome/common/chrome_paths.cc b/chrome/common/chrome_paths.cc
|
||||
index b6a56e6406a20..378e637c16afb 100644
|
||||
--- a/chrome/common/chrome_paths.cc
|
||||
+++ b/chrome/common/chrome_paths.cc
|
||||
@@ -4,6 +4,7 @@
|
||||
|
||||
#include "chrome/common/chrome_paths.h"
|
||||
|
||||
+#include "base/files/file_path.h"
|
||||
#include "base/files/file_util.h"
|
||||
#include "base/logging.h"
|
||||
#include "base/native_library.h"
|
||||
@@ -37,6 +38,10 @@
|
||||
#include "base/win/registry.h"
|
||||
#endif
|
||||
|
||||
+#if BUILDFLAG(IS_LINUX)
|
||||
+#include "sandbox/linux/services/flatpak_sandbox.h"
|
||||
+#endif
|
||||
+
|
||||
#if BUILDFLAG(ENABLE_WIDEVINE)
|
||||
#include "third_party/widevine/cdm/widevine_cdm_common.h" // nogncheck
|
||||
#endif
|
||||
@@ -190,8 +195,8 @@ bool PathProvider(int key, base::FilePath* result) {
|
||||
#else
|
||||
if (!GetUserDownloadsDirectory(&cur))
|
||||
return false;
|
||||
- // Do not create the download directory here, we have done it twice now
|
||||
- // and annoyed a lot of users.
|
||||
+ // Do not create the download directory here, we have done it twice now
|
||||
+ // and annoyed a lot of users.
|
||||
#endif
|
||||
break;
|
||||
case chrome::DIR_CRASH_DUMPS:
|
||||
@@ -420,6 +425,14 @@ bool PathProvider(int key, base::FilePath* result) {
|
||||
break;
|
||||
#if BUILDFLAG(IS_POSIX) && !BUILDFLAG(IS_MAC) && !BUILDFLAG(IS_OPENBSD)
|
||||
case chrome::DIR_POLICY_FILES: {
|
||||
+#if defined(OS_LINUX)
|
||||
+ if (sandbox::FlatpakSandbox::GetInstance()->GetSandboxLevel() >
|
||||
+ sandbox::FlatpakSandbox::SandboxLevel::kNone) {
|
||||
+ cur = base::FilePath(
|
||||
+ FILE_PATH_LITERAL("/app/chromium/extensions/policies"));
|
||||
+ break;
|
||||
+ }
|
||||
+#endif
|
||||
#if BUILDFLAG(GOOGLE_CHROME_BRANDING)
|
||||
cur = base::FilePath(FILE_PATH_LITERAL("/etc/opt/chrome/policies"));
|
||||
#else
|
||||
@@ -443,7 +456,13 @@ bool PathProvider(int key, base::FilePath* result) {
|
||||
#endif
|
||||
#if BUILDFLAG(IS_LINUX) || BUILDFLAG(IS_CHROMEOS)
|
||||
case chrome::DIR_STANDALONE_EXTERNAL_EXTENSIONS: {
|
||||
- cur = base::FilePath(kFilepathSinglePrefExtensions);
|
||||
+ if (sandbox::FlatpakSandbox::GetInstance()->GetSandboxLevel() >
|
||||
+ sandbox::FlatpakSandbox::SandboxLevel::kNone) {
|
||||
+ cur = base::FilePath(
|
||||
+ FILE_PATH_LITERAL("/app/chromium/extensions/extensions"));
|
||||
+ } else {
|
||||
+ cur = base::FilePath(kFilepathSinglePrefExtensions);
|
||||
+ }
|
||||
break;
|
||||
}
|
||||
#endif
|
||||
@@ -489,19 +508,25 @@ bool PathProvider(int key, base::FilePath* result) {
|
||||
case chrome::DIR_NATIVE_MESSAGING:
|
||||
#if BUILDFLAG(IS_MAC)
|
||||
#if BUILDFLAG(GOOGLE_CHROME_BRANDING)
|
||||
- cur = base::FilePath(FILE_PATH_LITERAL(
|
||||
- "/Library/Google/Chrome/NativeMessagingHosts"));
|
||||
+ cur = base::FilePath(
|
||||
+ FILE_PATH_LITERAL("/Library/Google/Chrome/NativeMessagingHosts"));
|
||||
#else
|
||||
cur = base::FilePath(FILE_PATH_LITERAL(
|
||||
"/Library/Application Support/Chromium/NativeMessagingHosts"));
|
||||
#endif
|
||||
#else // BUILDFLAG(IS_MAC)
|
||||
+ if (sandbox::FlatpakSandbox::GetInstance()->GetSandboxLevel() >
|
||||
+ sandbox::FlatpakSandbox::SandboxLevel::kNone) {
|
||||
+ cur = base::FilePath(FILE_PATH_LITERAL(
|
||||
+ "/app/chromium/extensions/native-messaging-hosts"));
|
||||
+ break;
|
||||
+ }
|
||||
#if BUILDFLAG(GOOGLE_CHROME_BRANDING)
|
||||
- cur = base::FilePath(FILE_PATH_LITERAL(
|
||||
- "/etc/opt/chrome/native-messaging-hosts"));
|
||||
+ cur = base::FilePath(
|
||||
+ FILE_PATH_LITERAL("/etc/opt/chrome/native-messaging-hosts"));
|
||||
#else
|
||||
- cur = base::FilePath(FILE_PATH_LITERAL(
|
||||
- "/etc/chromium/native-messaging-hosts"));
|
||||
+ cur = base::FilePath(
|
||||
+ FILE_PATH_LITERAL("/etc/chromium/native-messaging-hosts"));
|
||||
#endif
|
||||
#endif // !BUILDFLAG(IS_MAC)
|
||||
break;
|
||||
--
|
||||
2.39.2
|
||||
|
|
@ -0,0 +1,326 @@
|
|||
From 4c3e8472d56b6897f1e1c32e838a83dd42ae5a0d Mon Sep 17 00:00:00 2001
|
||||
From: Ryan Gonzalez <rymg19@gmail.com>
|
||||
Date: Tue, 17 Nov 2020 13:00:39 -0600
|
||||
Subject: [PATCH] flatpak: Expose Widevine into the sandbox
|
||||
|
||||
---
|
||||
.../zygote_host/zygote_host_impl_linux.cc | 54 +++++++++++++-
|
||||
sandbox/linux/services/flatpak_sandbox.cc | 74 ++++++++++++++-----
|
||||
sandbox/linux/services/flatpak_sandbox.h | 27 ++++++-
|
||||
3 files changed, 131 insertions(+), 24 deletions(-)
|
||||
|
||||
diff --git a/content/browser/zygote_host/zygote_host_impl_linux.cc b/content/browser/zygote_host/zygote_host_impl_linux.cc
|
||||
index b60dc232c4322..828c7729ffc9e 100644
|
||||
--- a/content/browser/zygote_host/zygote_host_impl_linux.cc
|
||||
+++ b/content/browser/zygote_host/zygote_host_impl_linux.cc
|
||||
@@ -10,7 +10,10 @@
|
||||
|
||||
#include "base/allocator/allocator_extension.h"
|
||||
#include "base/files/file_enumerator.h"
|
||||
+#include "base/files/file_util.h"
|
||||
#include "base/logging.h"
|
||||
+#include "base/nix/xdg_util.h"
|
||||
+#include "base/path_service.h"
|
||||
#include "base/posix/unix_domain_socket.h"
|
||||
#include "base/process/kill.h"
|
||||
#include "base/process/launch.h"
|
||||
@@ -18,9 +21,12 @@
|
||||
#include "base/strings/string_number_conversions.h"
|
||||
#include "build/build_config.h"
|
||||
#include "build/chromeos_buildflags.h"
|
||||
+#include "chrome/common/chrome_paths.h" // nogncheck
|
||||
#include "content/common/zygote/zygote_commands_linux.h"
|
||||
#include "content/common/zygote/zygote_communication_linux.h"
|
||||
#include "content/common/zygote/zygote_handle_impl_linux.h"
|
||||
+#include "content/public/common/cdm_info.h"
|
||||
+#include "content/public/common/content_client.h"
|
||||
#include "content/public/common/zygote/zygote_handle.h"
|
||||
#include "sandbox/linux/services/credentials.h"
|
||||
#include "sandbox/linux/services/flatpak_sandbox.h"
|
||||
@@ -29,6 +35,7 @@
|
||||
#include "sandbox/linux/suid/common/sandbox.h"
|
||||
#include "sandbox/policy/linux/sandbox_linux.h"
|
||||
#include "sandbox/policy/switches.h"
|
||||
+#include "third_party/widevine/cdm/buildflags.h" // nogncheck
|
||||
|
||||
#if BUILDFLAG(IS_CHROMEOS)
|
||||
#include "content/common/zygote/zygote_communication_linux.h"
|
||||
@@ -187,8 +194,51 @@ pid_t ZygoteHostImpl::LaunchZygote(
|
||||
if (is_sandboxed_zygote && use_namespace_sandbox_) {
|
||||
process = sandbox::NamespaceSandbox::LaunchProcess(*cmd_line, options);
|
||||
} else if (is_sandboxed_zygote && use_flatpak_sandbox_) {
|
||||
- process = sandbox::FlatpakSandbox::GetInstance()->LaunchProcess(*cmd_line,
|
||||
- options);
|
||||
+ sandbox::FlatpakSandbox::SpawnOptions spawn_options;
|
||||
+
|
||||
+#if BUILDFLAG(ENABLE_LIBRARY_CDMS)
|
||||
+ // Expose the CDM paths into the sandbox. This is similar to PreSandboxInit
|
||||
+ // in content_main_runner_impl.cc.
|
||||
+ std::vector<CdmInfo> cdms;
|
||||
+ GetContentClient()->AddContentDecryptionModules(&cdms, nullptr);
|
||||
+ for (const auto& cdm : cdms) {
|
||||
+ if (!spawn_options.ExposePathRo(cdm.path)) {
|
||||
+ LOG(ERROR) << "Failed to expose CDM module";
|
||||
+ }
|
||||
+ }
|
||||
+#endif
|
||||
+
|
||||
+#if BUILDFLAG(ENABLE_WIDEVINE_CDM_COMPONENT)
|
||||
+ // Make sure we also expose the full Widevine CDM folder so it can be
|
||||
+ // detected.
|
||||
+ // TODO: Remove the explicit dependencies on chrome::.
|
||||
+ base::FilePath widevine_cdm_path;
|
||||
+ if (!base::PathService::Get(chrome::DIR_COMPONENT_UPDATED_WIDEVINE_CDM,
|
||||
+ &widevine_cdm_path)) {
|
||||
+ LOG(ERROR) << "Failed to get Widevine CDM folder for sandbox forwarding";
|
||||
+ }
|
||||
+
|
||||
+ LOG(INFO) << "Widevine CDM path IS: " << widevine_cdm_path;
|
||||
+
|
||||
+ if (!widevine_cdm_path.empty() && base::PathExists(widevine_cdm_path)) {
|
||||
+ if (!spawn_options.ExposePathRo(widevine_cdm_path)) {
|
||||
+ LOG(ERROR) << "Failed to expose updated Widevine CDM path";
|
||||
+ }
|
||||
+ }
|
||||
+
|
||||
+ // The Widevine data is found relative to $XDG_CONFIG_HOME, which is not set
|
||||
+ // by default when running a sandboxed process.
|
||||
+ auto env = base::Environment::Create();
|
||||
+ base::FilePath xdgConfigHome = base::nix::GetXDGDirectory(
|
||||
+ env.get(), base::nix::kXdgConfigHomeEnvVar, nullptr);
|
||||
+ if (!xdgConfigHome.empty()) {
|
||||
+ options.environment[base::nix::kXdgConfigHomeEnvVar] =
|
||||
+ xdgConfigHome.value();
|
||||
+ }
|
||||
+#endif
|
||||
+
|
||||
+ process = sandbox::FlatpakSandbox::GetInstance()->LaunchProcess(
|
||||
+ *cmd_line, options, spawn_options);
|
||||
} else {
|
||||
process = base::LaunchProcess(*cmd_line, options);
|
||||
}
|
||||
diff --git a/sandbox/linux/services/flatpak_sandbox.cc b/sandbox/linux/services/flatpak_sandbox.cc
|
||||
index cdc225a18b815..f848b3360b8e6 100644
|
||||
--- a/sandbox/linux/services/flatpak_sandbox.cc
|
||||
+++ b/sandbox/linux/services/flatpak_sandbox.cc
|
||||
@@ -4,6 +4,7 @@
|
||||
|
||||
#include "sandbox/linux/services/flatpak_sandbox.h"
|
||||
|
||||
+#include <fcntl.h>
|
||||
#include <signal.h>
|
||||
#include <sstream>
|
||||
#include <string>
|
||||
@@ -92,6 +93,18 @@ enum FlatpakSpawnSandboxFlags {
|
||||
kFlatpakSpawnSandbox_ShareA11yBus = 1 << 4,
|
||||
};
|
||||
|
||||
+bool FlatpakSandbox::SpawnOptions::ExposePathRo(base::FilePath path) {
|
||||
+ base::ScopedFD fd(
|
||||
+ HANDLE_EINTR(open(path.value().c_str(), O_PATH | O_NOFOLLOW)));
|
||||
+ if (!fd.is_valid()) {
|
||||
+ PLOG(ERROR) << "Failed to expose path " << path;
|
||||
+ return false;
|
||||
+ }
|
||||
+
|
||||
+ sandbox_expose_ro.push_back(std::move(fd));
|
||||
+ return true;
|
||||
+}
|
||||
+
|
||||
FlatpakSandbox::FlatpakSandbox()
|
||||
: bus_thread_("FlatpakPortalBus"), process_info_cv_(&process_info_lock_) {}
|
||||
|
||||
@@ -168,8 +181,9 @@ bool FlatpakSandbox::IsPidSandboxed(base::ProcessId relative_pid) {
|
||||
|
||||
base::Process FlatpakSandbox::LaunchProcess(
|
||||
const base::CommandLine& cmdline,
|
||||
- const base::LaunchOptions& launch_options) {
|
||||
- base::ProcessId external_pid = Spawn(cmdline, launch_options);
|
||||
+ const base::LaunchOptions& launch_options,
|
||||
+ const SpawnOptions& spawn_options /*= {}*/) {
|
||||
+ base::ProcessId external_pid = Spawn(cmdline, launch_options, spawn_options);
|
||||
if (external_pid == base::kNullProcessId) {
|
||||
return base::Process();
|
||||
}
|
||||
@@ -363,9 +377,9 @@ void FlatpakSandbox::OnSpawnExitedSignal(dbus::Signal* signal) {
|
||||
process_info_cv_.Broadcast();
|
||||
}
|
||||
|
||||
-base::ProcessId FlatpakSandbox::Spawn(
|
||||
- const base::CommandLine& cmdline,
|
||||
- const base::LaunchOptions& launch_options) {
|
||||
+base::ProcessId FlatpakSandbox::Spawn(const base::CommandLine& cmdline,
|
||||
+ const base::LaunchOptions& launch_options,
|
||||
+ const SpawnOptions& spawn_options) {
|
||||
base::ScopedBlockingCall scoped_blocking_call(FROM_HERE,
|
||||
base::BlockingType::MAY_BLOCK);
|
||||
base::ScopedAllowBaseSyncPrimitives allow_wait;
|
||||
@@ -391,24 +405,26 @@ base::ProcessId FlatpakSandbox::Spawn(
|
||||
FROM_HERE,
|
||||
base::BindOnce(&FlatpakSandbox::SpawnOnBusThread, base::Unretained(this),
|
||||
base::Unretained(&external_pid), base::Unretained(&event),
|
||||
- cmdline, launch_options));
|
||||
+ base::Unretained(&cmdline),
|
||||
+ base::Unretained(&launch_options),
|
||||
+ base::Unretained(&spawn_options)));
|
||||
event.Wait();
|
||||
|
||||
return external_pid;
|
||||
}
|
||||
|
||||
-void FlatpakSandbox::SpawnOnBusThread(
|
||||
- base::ProcessId* out_external_pid,
|
||||
- base::WaitableEvent* event,
|
||||
- const base::CommandLine& cmdline,
|
||||
- const base::LaunchOptions& launch_options) {
|
||||
+void FlatpakSandbox::SpawnOnBusThread(base::ProcessId* out_external_pid,
|
||||
+ base::WaitableEvent* event,
|
||||
+ const base::CommandLine* cmdline,
|
||||
+ const base::LaunchOptions* launch_options,
|
||||
+ const SpawnOptions* spawn_options) {
|
||||
dbus::ObjectProxy* object_proxy = GetPortalObjectProxy();
|
||||
dbus::MethodCall method_call(kFlatpakPortalInterfaceName, "Spawn");
|
||||
dbus::MessageWriter writer(&method_call);
|
||||
|
||||
const base::FilePath& current_directory =
|
||||
- !launch_options.current_directory.empty()
|
||||
- ? launch_options.current_directory
|
||||
+ !launch_options->current_directory.empty()
|
||||
+ ? launch_options->current_directory
|
||||
// Change to /app since it's guaranteed to always be present in
|
||||
// the sandbox.
|
||||
: kFlatpakAppPath;
|
||||
@@ -417,7 +433,7 @@ void FlatpakSandbox::SpawnOnBusThread(
|
||||
dbus::MessageWriter argv_writer(nullptr);
|
||||
writer.OpenArray("ay", &argv_writer);
|
||||
|
||||
- for (const std::string& arg : cmdline.argv()) {
|
||||
+ for (const std::string& arg : cmdline->argv()) {
|
||||
WriteStringAsByteArray(&argv_writer, arg);
|
||||
}
|
||||
|
||||
@@ -439,7 +455,7 @@ void FlatpakSandbox::SpawnOnBusThread(
|
||||
WriteFdPairMap(&fds_writer, STDOUT_FILENO, STDOUT_FILENO);
|
||||
WriteFdPairMap(&fds_writer, STDERR_FILENO, STDERR_FILENO);
|
||||
|
||||
- for (const auto& pair : launch_options.fds_to_remap) {
|
||||
+ for (const auto& pair : launch_options->fds_to_remap) {
|
||||
WriteFdPairMap(&fds_writer, pair.first, pair.second);
|
||||
}
|
||||
|
||||
@@ -448,7 +464,7 @@ void FlatpakSandbox::SpawnOnBusThread(
|
||||
dbus::MessageWriter env_writer(nullptr);
|
||||
writer.OpenArray("{ss}", &env_writer);
|
||||
|
||||
- for (const auto& pair : launch_options.environment) {
|
||||
+ for (const auto& pair : launch_options->environment) {
|
||||
dbus::MessageWriter entry_writer(nullptr);
|
||||
env_writer.OpenDictEntry(&entry_writer);
|
||||
|
||||
@@ -472,11 +488,11 @@ void FlatpakSandbox::SpawnOnBusThread(
|
||||
#else
|
||||
#endif
|
||||
|
||||
- if (launch_options.clear_environment) {
|
||||
+ if (launch_options->clear_environment) {
|
||||
spawn_flags |= kFlatpakSpawn_ClearEnvironment;
|
||||
}
|
||||
|
||||
- if (launch_options.kill_on_parent_death) {
|
||||
+ if (launch_options->kill_on_parent_death) {
|
||||
spawn_flags |= kFlatpakSpawn_WatchBus;
|
||||
}
|
||||
|
||||
@@ -485,6 +501,28 @@ void FlatpakSandbox::SpawnOnBusThread(
|
||||
dbus::MessageWriter options_writer(nullptr);
|
||||
writer.OpenArray("{sv}", &options_writer);
|
||||
|
||||
+ if (!spawn_options->sandbox_expose_ro.empty()) {
|
||||
+ dbus::MessageWriter entry_writer(nullptr);
|
||||
+ options_writer.OpenDictEntry(&entry_writer);
|
||||
+
|
||||
+ entry_writer.AppendString("sandbox-expose-fd-ro");
|
||||
+
|
||||
+ dbus::MessageWriter variant_writer(nullptr);
|
||||
+ entry_writer.OpenVariant("ah", &variant_writer);
|
||||
+
|
||||
+ dbus::MessageWriter fds_writer(nullptr);
|
||||
+ variant_writer.OpenArray("h", &fds_writer);
|
||||
+
|
||||
+ for (const base::ScopedFD& fd : spawn_options->sandbox_expose_ro) {
|
||||
+ CHECK(fd.is_valid()) << "Invalid spawn expose fd";
|
||||
+ fds_writer.AppendFileDescriptor(fd.get());
|
||||
+ }
|
||||
+
|
||||
+ variant_writer.CloseContainer(&fds_writer);
|
||||
+ entry_writer.CloseContainer(&variant_writer);
|
||||
+ options_writer.CloseContainer(&entry_writer);
|
||||
+ }
|
||||
+
|
||||
if (sandbox_flags != 0) {
|
||||
dbus::MessageWriter entry_writer(nullptr);
|
||||
options_writer.OpenDictEntry(&entry_writer);
|
||||
diff --git a/sandbox/linux/services/flatpak_sandbox.h b/sandbox/linux/services/flatpak_sandbox.h
|
||||
index 167bbc85945ad..de8e7165b4573 100644
|
||||
--- a/sandbox/linux/services/flatpak_sandbox.h
|
||||
+++ b/sandbox/linux/services/flatpak_sandbox.h
|
||||
@@ -9,6 +9,8 @@
|
||||
#include "base/compiler_specific.h"
|
||||
#include "base/containers/flat_map.h"
|
||||
#include "base/containers/flat_set.h"
|
||||
+#include "base/files/file_path.h"
|
||||
+#include "base/files/scoped_file.h"
|
||||
#include "base/no_destructor.h"
|
||||
#include "base/process/kill.h"
|
||||
#include "base/process/launch.h"
|
||||
@@ -34,6 +36,20 @@ namespace sandbox {
|
||||
// it is known inside the sandbox's PID namespace.
|
||||
class SANDBOX_EXPORT FlatpakSandbox {
|
||||
public:
|
||||
+ class SpawnOptions {
|
||||
+ public:
|
||||
+ SpawnOptions() = default;
|
||||
+ SpawnOptions(const SpawnOptions& other) = delete;
|
||||
+ SpawnOptions(SpawnOptions&& other) = delete;
|
||||
+
|
||||
+ bool ExposePathRo(base::FilePath path);
|
||||
+
|
||||
+ private:
|
||||
+ friend class FlatpakSandbox;
|
||||
+
|
||||
+ std::vector<base::ScopedFD> sandbox_expose_ro;
|
||||
+ };
|
||||
+
|
||||
static FlatpakSandbox* GetInstance();
|
||||
|
||||
// Represents the level of sandboxing inside a Flatpak. kNone means this is
|
||||
@@ -55,7 +71,8 @@ class SANDBOX_EXPORT FlatpakSandbox {
|
||||
// GetRelativePid. This is the reason why a vanilla ProcessId is returned
|
||||
// rather than a base::Process instance.
|
||||
base::Process LaunchProcess(const base::CommandLine& cmdline,
|
||||
- const base::LaunchOptions& launch_options);
|
||||
+ const base::LaunchOptions& launch_options,
|
||||
+ const SpawnOptions& spawn_options = {});
|
||||
|
||||
// Indefinitely waits for the given process and fills the exit code pointer
|
||||
// if given and non-null. Returns false on wait failure.
|
||||
@@ -84,11 +101,13 @@ class SANDBOX_EXPORT FlatpakSandbox {
|
||||
void OnSpawnExitedSignal(dbus::Signal* signal);
|
||||
|
||||
base::ProcessId Spawn(const base::CommandLine& cmdline,
|
||||
- const base::LaunchOptions& launch_options);
|
||||
+ const base::LaunchOptions& launch_options,
|
||||
+ const SpawnOptions& spawn_options);
|
||||
void SpawnOnBusThread(base::ProcessId* out_external_pid,
|
||||
base::WaitableEvent* event,
|
||||
- const base::CommandLine& cmdline,
|
||||
- const base::LaunchOptions& launch_options);
|
||||
+ const base::CommandLine* cmdline,
|
||||
+ const base::LaunchOptions* launch_options,
|
||||
+ const SpawnOptions* spawn_options);
|
||||
void OnSpawnResponse(base::ProcessId* out_external_pid,
|
||||
base::WaitableEvent* event,
|
||||
dbus::Response* response,
|
||||
--
|
||||
2.39.2
|
||||
|
|
@ -0,0 +1,114 @@
|
|||
From 7869e89107f51f022de5884c6098cd4311823b26 Mon Sep 17 00:00:00 2001
|
||||
From: Mario Sanchez Prada <mario@endlessm.com>
|
||||
Date: Thu, 28 Jan 2016 13:53:08 +0000
|
||||
Subject: [PATCH] memory: Enable the tab discards feature
|
||||
|
||||
This allows manually discarding tabs from chrome://discards as well
|
||||
as automatic tab discards once a certain level of "memory pressure"
|
||||
is reached.
|
||||
---
|
||||
chrome/browser/resource_coordinator/tab_manager.cc | 12 +++++++-----
|
||||
chrome/browser/resource_coordinator/tab_manager.h | 6 +++---
|
||||
2 files changed, 10 insertions(+), 8 deletions(-)
|
||||
|
||||
diff --git a/chrome/browser/resource_coordinator/tab_manager.cc b/chrome/browser/resource_coordinator/tab_manager.cc
|
||||
index 7bf4213423c75..1fe76674209f2 100644
|
||||
--- a/chrome/browser/resource_coordinator/tab_manager.cc
|
||||
+++ b/chrome/browser/resource_coordinator/tab_manager.cc
|
||||
@@ -120,7 +120,9 @@ void TabManager::Start() {
|
||||
// handled by Performance Manager.
|
||||
#if BUILDFLAG(IS_CHROMEOS_ASH)
|
||||
delegate_->StartPeriodicOOMScoreUpdate();
|
||||
+#endif
|
||||
|
||||
+#if BUILDFLAG(IS_CHROMEOS_ASH) || BUILDFLAG(IS_LINUX)
|
||||
// Create a |MemoryPressureListener| to listen for memory events when
|
||||
// MemoryCoordinator is disabled. When MemoryCoordinator is enabled
|
||||
// it asks TabManager to do tab discarding.
|
||||
@@ -133,7 +135,7 @@ void TabManager::Start() {
|
||||
OnMemoryPressure(level);
|
||||
}
|
||||
}
|
||||
-#endif // BUILDFLAG(IS_CHROMEOS_ASH)
|
||||
+#endif // BUILDFLAG(IS_CHROMEOS_ASH) || BUILDFLAG(IS_LINUX)
|
||||
|
||||
// Create the graph observer. This is the source of page almost idle data and
|
||||
// EQT measurements.
|
||||
@@ -192,7 +194,6 @@ WebContents* TabManager::DiscardTabByExtension(content::WebContents* contents) {
|
||||
return DiscardTabImpl(LifecycleUnitDiscardReason::EXTERNAL);
|
||||
}
|
||||
|
||||
-#if BUILDFLAG(IS_CHROMEOS_ASH)
|
||||
void TabManager::DiscardTabFromMemoryPressure() {
|
||||
// Output a log with per-process memory usage and number of file descriptors,
|
||||
// as well as GPU memory details. Discard happens without waiting for the log
|
||||
@@ -203,6 +204,7 @@ void TabManager::DiscardTabFromMemoryPressure() {
|
||||
// (https://crbug.com/1040522).
|
||||
memory::OomMemoryDetails::Log("Tab Discards Memory details");
|
||||
|
||||
+#if BUILDFLAG(IS_CHROMEOS_ASH) || BUILDFLAG(IS_LINUX)
|
||||
// Start handling memory pressure. Suppress further notifications before
|
||||
// completion in case a slow handler queues up multiple dispatches of this
|
||||
// method and inadvertently discards more than necessary tabs/apps in a burst.
|
||||
@@ -211,8 +213,8 @@ void TabManager::DiscardTabFromMemoryPressure() {
|
||||
TabDiscardDoneCB tab_discard_done(base::BindOnce(
|
||||
&TabManager::OnTabDiscardDone, weak_ptr_factory_.GetWeakPtr()));
|
||||
DiscardTab(LifecycleUnitDiscardReason::URGENT, std::move(tab_discard_done));
|
||||
+#endif // BUILDFLAG(IS_CHROMEOS_ASH) || BUILDFLAG(IS_LINUX)
|
||||
}
|
||||
-#endif // BUILDFLAG(IS_CHROMEOS_ASH)
|
||||
|
||||
void TabManager::AddObserver(TabLifecycleObserver* observer) {
|
||||
TabLifecycleUnitExternal::AddTabLifecycleObserver(observer);
|
||||
@@ -242,7 +244,7 @@ bool TabManager::IsInternalPage(const GURL& url) {
|
||||
return false;
|
||||
}
|
||||
|
||||
-#if BUILDFLAG(IS_CHROMEOS_ASH)
|
||||
+#if BUILDFLAG(IS_CHROMEOS_ASH) || BUILDFLAG(IS_LINUX)
|
||||
void TabManager::OnMemoryPressure(
|
||||
base::MemoryPressureListener::MemoryPressureLevel memory_pressure_level) {
|
||||
// If Chrome is shutting down, do not do anything.
|
||||
@@ -286,7 +288,7 @@ void TabManager::UnregisterMemoryPressureListener() {
|
||||
// Destroying the memory pressure listener to unregister from the observer.
|
||||
memory_pressure_listener_.reset();
|
||||
}
|
||||
-#endif // BUILDFLAG(IS_CHROMEOS_ASH)
|
||||
+#endif // BUILDFLAG(IS_CHROMEOS_ASH) || BUILDFLAG(IS_LINUX)
|
||||
|
||||
// TODO(jamescook): This should consider tabs with references to other tabs,
|
||||
// such as tabs created with JavaScript window.open(). Potentially consider
|
||||
diff --git a/chrome/browser/resource_coordinator/tab_manager.h b/chrome/browser/resource_coordinator/tab_manager.h
|
||||
index 1465b0a6da1f1..72a54fa9ca4b2 100644
|
||||
--- a/chrome/browser/resource_coordinator/tab_manager.h
|
||||
+++ b/chrome/browser/resource_coordinator/tab_manager.h
|
||||
@@ -90,7 +90,7 @@ class TabManager : public LifecycleUnitObserver,
|
||||
// was discarded.
|
||||
content::WebContents* DiscardTabByExtension(content::WebContents* contents);
|
||||
|
||||
-#if BUILDFLAG(IS_CHROMEOS_ASH)
|
||||
+#if BUILDFLAG(IS_CHROMEOS_ASH) || BUILDFLAG(IS_LINUX)
|
||||
// Discards a tab in response to memory pressure.
|
||||
void DiscardTabFromMemoryPressure();
|
||||
#endif
|
||||
@@ -136,7 +136,7 @@ class TabManager : public LifecycleUnitObserver,
|
||||
// can be easily reloaded and hence makes a good choice to discard.
|
||||
static bool IsInternalPage(const GURL& url);
|
||||
|
||||
-#if BUILDFLAG(IS_CHROMEOS_ASH)
|
||||
+#if BUILDFLAG(IS_CHROMEOS_ASH) || BUILDFLAG(IS_LINUX)
|
||||
// Called by the memory pressure listener when the memory pressure rises.
|
||||
void OnMemoryPressure(
|
||||
base::MemoryPressureListener::MemoryPressureLevel memory_pressure_level);
|
||||
@@ -151,7 +151,7 @@ class TabManager : public LifecycleUnitObserver,
|
||||
// Unregister to stop listening to memory pressure. Called on shutdown or
|
||||
// beginning of tab discards.
|
||||
void UnregisterMemoryPressureListener();
|
||||
-#endif // BUILDFLAG(IS_CHROMEOS_ASH)
|
||||
+#endif // BUILDFLAG(IS_CHROMEOS_ASH) || BUILDFLAG(IS_LINUX)
|
||||
|
||||
// Discards the less important LifecycleUnit that supports discarding under
|
||||
// |reason|.
|
||||
--
|
||||
2.39.2
|
||||
|
|
@ -0,0 +1,52 @@
|
|||
From 2db736551b35cb89993ba3cc4367374bf5b9558b Mon Sep 17 00:00:00 2001
|
||||
From: Daniel Drake <drake@endlessm.com>
|
||||
Date: Fri, 3 Jul 2015 14:59:24 -0600
|
||||
Subject: [PATCH] x11: Set _NET_WM_BYPASS_COMPOSITOR for fullscreen
|
||||
|
||||
This improves performance at full screen.
|
||||
---
|
||||
ui/ozone/platform/x11/x11_window.cc | 8 ++++++++
|
||||
ui/ozone/platform/x11/x11_window.h | 1 +
|
||||
2 files changed, 9 insertions(+)
|
||||
|
||||
diff --git a/ui/ozone/platform/x11/x11_window.cc b/ui/ozone/platform/x11/x11_window.cc
|
||||
index 7ebbdf4700a63..a4e81f425ee95 100644
|
||||
--- a/ui/ozone/platform/x11/x11_window.cc
|
||||
+++ b/ui/ozone/platform/x11/x11_window.cc
|
||||
@@ -639,6 +639,8 @@ void X11Window::SetFullscreen(bool fullscreen, int64_t target_display_id) {
|
||||
state_ = new_state;
|
||||
SetFullscreen(fullscreen);
|
||||
|
||||
+ SetBypassCompositor(fullscreen);
|
||||
+
|
||||
if (unmaximize_and_remaximize)
|
||||
Maximize();
|
||||
|
||||
@@ -1881,6 +1883,12 @@ void X11Window::SetFullscreen(bool fullscreen) {
|
||||
x11::Atom::None);
|
||||
}
|
||||
|
||||
+void X11Window::SetBypassCompositor(bool bypass) {
|
||||
+ x11::SetProperty<uint32_t>(xwindow_,
|
||||
+ x11::GetAtom("_NET_WM_BYPASS_COMPOSITOR"),
|
||||
+ x11::Atom::CARDINAL, bypass);
|
||||
+}
|
||||
+
|
||||
bool X11Window::IsActive() const {
|
||||
// Focus and stacking order are independent in X11. Since we cannot guarantee
|
||||
// a window is topmost iff it has focus, just use the focus state to determine
|
||||
diff --git a/ui/ozone/platform/x11/x11_window.h b/ui/ozone/platform/x11/x11_window.h
|
||||
index 6cbd0d0a7146b..94adbd3741221 100644
|
||||
--- a/ui/ozone/platform/x11/x11_window.h
|
||||
+++ b/ui/ozone/platform/x11/x11_window.h
|
||||
@@ -232,6 +232,7 @@ class X11Window : public PlatformWindow,
|
||||
void CloseXWindow();
|
||||
void Map(bool inactive = false);
|
||||
void SetFullscreen(bool fullscreen);
|
||||
+ void SetBypassCompositor(bool bypass);
|
||||
bool IsActive() const;
|
||||
bool IsTargetedBy(const x11::Event& xev) const;
|
||||
void HandleEvent(const x11::Event& xev);
|
||||
--
|
||||
2.39.2
|
||||
|
|
@ -0,0 +1,77 @@
|
|||
From 60447fb3f5a546d53a4a3aa8cb8f14903f616d17 Mon Sep 17 00:00:00 2001
|
||||
From: Ryan Gonzalez <rymg19@gmail.com>
|
||||
Date: Tue, 20 Jul 2021 14:18:31 -0500
|
||||
Subject: [PATCH] Enable support for libfdk-aac and OpenH264
|
||||
|
||||
---
|
||||
BUILD.gn | 5 +++++
|
||||
chromium/scripts/build_ffmpeg.py | 22 +++++++++++++++++++---
|
||||
chromium/scripts/generate_gn.py | 1 +
|
||||
3 files changed, 25 insertions(+), 3 deletions(-)
|
||||
|
||||
diff --git a/third_party/ffmpeg/BUILD.gn b/third_party/ffmpeg/BUILD.gn
|
||||
index 91e2f508c3..6b67df2f6b 100644
|
||||
--- a/third_party/ffmpeg/BUILD.gn
|
||||
+++ b/third_party/ffmpeg/BUILD.gn
|
||||
@@ -443,6 +443,11 @@ if (is_component_ffmpeg) {
|
||||
"-L",
|
||||
rebase_path(target_gen_dir, root_build_dir),
|
||||
]
|
||||
+
|
||||
+ libs = [
|
||||
+ "fdk-aac",
|
||||
+ "openh264",
|
||||
+ ]
|
||||
} else if (is_win) {
|
||||
# Windows component build needs the .def file to export ffmpeg symbols.
|
||||
deps += [ ":ffmpeg_generate_def" ]
|
||||
diff --git a/third_party/ffmpeg/chromium/scripts/build_ffmpeg.py b/third_party/ffmpeg/chromium/scripts/build_ffmpeg.py
|
||||
index 19d0a0f7bc..13bec7605a 100755
|
||||
--- a/third_party/ffmpeg/chromium/scripts/build_ffmpeg.py
|
||||
+++ b/third_party/ffmpeg/chromium/scripts/build_ffmpeg.py
|
||||
@@ -1001,11 +1001,27 @@ def ConfigureAndBuild(target_arch, target_os, host_os, host_arch, parallel_jobs,
|
||||
'--ar=cygwin-wrapper lib',
|
||||
])
|
||||
|
||||
+ if target_os == 'linux':
|
||||
+ # Always use libfdk-aac
|
||||
+ configure_flags['Common'].extend([
|
||||
+ '--enable-demuxer=aac',
|
||||
+ '--enable-parser=aac',
|
||||
+ '--enable-libfdk-aac',
|
||||
+ '--enable-decoder=libfdk_aac',
|
||||
+ '--disable-decoder=aac',
|
||||
+ ])
|
||||
+
|
||||
+ # Use OpenH264 when libx264 is not being used.
|
||||
+ configure_flags['Chromium'].extend([
|
||||
+ '--enable-libopenh264',
|
||||
+ '--enable-decoder=libopenh264',
|
||||
+ '--disable-decoder=h264',
|
||||
+ ])
|
||||
+
|
||||
# Google Chrome & ChromeOS specific configuration.
|
||||
configure_flags['Chrome'].extend([
|
||||
- '--enable-decoder=aac,h264',
|
||||
- '--enable-demuxer=aac',
|
||||
- '--enable-parser=aac,h264',
|
||||
+ '--enable-decoder=h264',
|
||||
+ '--enable-parser=h264',
|
||||
])
|
||||
|
||||
# Google ChromeOS specific configuration.
|
||||
diff --git a/third_party/ffmpeg/chromium/scripts/generate_gn.py b/third_party/ffmpeg/chromium/scripts/generate_gn.py
|
||||
index d36b0a22c3..16c5dcee5f 100755
|
||||
--- a/third_party/ffmpeg/chromium/scripts/generate_gn.py
|
||||
+++ b/third_party/ffmpeg/chromium/scripts/generate_gn.py
|
||||
@@ -685,6 +685,7 @@ ALLOWED_LICENSES = [
|
||||
'LGPL (v2.1 or later) GENERATED FILE',
|
||||
'MIT/X11 (BSD like)',
|
||||
'Public domain LGPL (v2.1 or later)',
|
||||
+ 'ISC',
|
||||
]
|
||||
|
||||
# Files permitted to report an UNKNOWN license. All files mentioned here should
|
||||
--
|
||||
2.39.2
|
||||
|
File diff suppressed because it is too large
Load diff
|
@ -0,0 +1,10 @@
|
|||
[
|
||||
{
|
||||
"type": "patch",
|
||||
"paths": [
|
||||
"patches/ffmpeg/Enable-support-for-libfdk-aac-and-OpenH264.patch",
|
||||
"patches/ffmpeg/ffmpeg-Handle-transient-decode-errors-arising-from-libfdk-.patch",
|
||||
"patches/ffmpeg/Update-build-configuration.patch"
|
||||
]
|
||||
}
|
||||
]
|
|
@ -0,0 +1,48 @@
|
|||
From aa591989d204a64f2cb9d5cb616a9481b695c0c9 Mon Sep 17 00:00:00 2001
|
||||
From: Jan Schmidt <jan@centricular.com>
|
||||
Date: Wed, 1 May 2019 17:49:42 +0200
|
||||
Subject: [PATCH] ffmpeg: Handle transient decode errors arising from
|
||||
libfdk-aac
|
||||
|
||||
GStreamer can successfully play an .m4a file that ffplay cannot, albeit
|
||||
with some audible glitching.
|
||||
|
||||
For most errors, the input buffer should be discarded in this case, but
|
||||
decoding not stopped, so we attempt to do this in order to make decoding more robust.
|
||||
(see https://github.com/esrlabs/fdk-aac/blob/master/libAACdec/include/aacdecoder_lib.h#L362)
|
||||
|
||||
These errors happen much more often with the cut-down fdk-aac that
|
||||
avoids patent encumbered portions of AAC
|
||||
|
||||
https://phabricator.endlessm.com/T23374
|
||||
---
|
||||
libavcodec/libfdk-aacdec.c | 12 ++++++++----
|
||||
1 file changed, 8 insertions(+), 4 deletions(-)
|
||||
|
||||
diff --git a/third_party/ffmpeg/libavcodec/libfdk-aacdec.c b/third_party/ffmpeg/libavcodec/libfdk-aacdec.c
|
||||
index 8c1586e25e..d81289e97d 100644
|
||||
--- a/third_party/ffmpeg/libavcodec/libfdk-aacdec.c
|
||||
+++ b/third_party/ffmpeg/libavcodec/libfdk-aacdec.c
|
||||
@@ -409,11 +409,15 @@ static int fdk_aac_decode_frame(AVCodecContext *avctx, AVFrame *frame,
|
||||
err = aacDecoder_DecodeFrame(s->handle, (INT_PCM *) s->decoder_buffer,
|
||||
s->decoder_buffer_size / sizeof(INT_PCM),
|
||||
flags);
|
||||
- if (err == AAC_DEC_NOT_ENOUGH_BITS) {
|
||||
- ret = avpkt->size - valid;
|
||||
- goto end;
|
||||
- }
|
||||
if (err != AAC_DEC_OK) {
|
||||
+ /* Just ignore sync or non-fatal decode errors and keep feeding */
|
||||
+ if ((err >= aac_dec_sync_error_start && err <= aac_dec_sync_error_end) ||
|
||||
+ (err >= aac_dec_decode_error_start && err <= aac_dec_decode_error_end) ||
|
||||
+ (err >= aac_dec_anc_data_error_start && err <= aac_dec_anc_data_error_end)) {
|
||||
+ ret = avpkt->size - valid;
|
||||
+ goto end;
|
||||
+ }
|
||||
+ /* All other errors, return them */
|
||||
av_log(avctx, AV_LOG_ERROR,
|
||||
"aacDecoder_DecodeFrame() failed: %x\n", err);
|
||||
ret = AVERROR_UNKNOWN;
|
||||
--
|
||||
2.39.2
|
||||
|
29
infra/Flatpak/com.alex313031.thorium/portal_error.txt
Normal file
29
infra/Flatpak/com.alex313031.thorium/portal_error.txt
Normal file
|
@ -0,0 +1,29 @@
|
|||
Your Flatpak version does not support a feature needed for this Chromium Flatpak
|
||||
to run. This generally happens when your distribution has unprivileged user
|
||||
namespaces disabled.
|
||||
|
||||
========== FOR DEBIAN FAMILY USERS ==========
|
||||
|
||||
If the distro you are currently using is Debian or a derivative, you can run the
|
||||
following commands as root (you can enter a root shell via 'sudo -i'):
|
||||
|
||||
dpkg-statoverride --update --add root root 0755 /usr/bin/bwrap
|
||||
echo kernel.unprivileged_userns_clone=1 > /etc/sysctl.d/50-bubblewrap.conf
|
||||
sudo sysctl -w kernel.unprivileged_userns_clone=1
|
||||
|
||||
========== FOR OTHER DISTROS =========
|
||||
|
||||
If you installed a "hardened" security kernel, these also usually disable
|
||||
unprivileged user namespaces. They can be re-enabled by running the following
|
||||
as root (you can enter a root shell via 'sudo -i'):
|
||||
|
||||
echo kernel.unprivileged_userns_clone=1 > /etc/sysctl.d/50-bubblewrap.conf
|
||||
sudo sysctl -w kernel.unprivileged_userns_clone=1
|
||||
|
||||
If 'ls -l /usr/bin/bwrap' contains 'rws', then bwrap is also setuid. This can be
|
||||
removed, if present, via:
|
||||
|
||||
sudo chmod u-s /usr/bin/bwrap
|
||||
|
||||
However, note that the permissions may be overridden on the next update of your
|
||||
distro's bubblewrap package.
|
49
infra/Flatpak/com.alex313031.thorium/unlink_profiles.py
Executable file
49
infra/Flatpak/com.alex313031.thorium/unlink_profiles.py
Executable file
|
@ -0,0 +1,49 @@
|
|||
#!/usr/bin/env python3
|
||||
|
||||
from pathlib import Path
|
||||
import json
|
||||
import os
|
||||
import traceback
|
||||
import sys
|
||||
|
||||
|
||||
def migrate_profile(profile: Path):
|
||||
prefs_file = profile / 'Preferences'
|
||||
with prefs_file.open() as fp:
|
||||
prefs = json.load(fp)
|
||||
|
||||
modified = False
|
||||
KEYS_TO_REMOVE = ['account_info', 'google']
|
||||
for key in KEYS_TO_REMOVE:
|
||||
if key in prefs:
|
||||
del prefs[key]
|
||||
modified = True
|
||||
|
||||
if modified:
|
||||
print('Update profile:', profile.name)
|
||||
tmp = prefs_file.with_suffix('.tmp')
|
||||
with open(tmp, 'w') as fp:
|
||||
json.dump(prefs, fp)
|
||||
|
||||
tmp.rename(prefs_file)
|
||||
|
||||
|
||||
def main():
|
||||
data_dir = Path(os.environ['XDG_CONFIG_HOME']) / 'chromium'
|
||||
profiles = [data_dir / 'Default']
|
||||
profiles.extend(data_dir.glob('Profile *'))
|
||||
|
||||
succeeded = True
|
||||
|
||||
for profile in profiles:
|
||||
try:
|
||||
migrate_profile(profile)
|
||||
except Exception:
|
||||
traceback.print_exc()
|
||||
succeeded = False
|
||||
|
||||
sys.exit(0 if succeeded else 1)
|
||||
|
||||
|
||||
if __name__ == '__main__':
|
||||
main()
|
|
@ -352,10 +352,6 @@
|
|||
<message name="IDS_TABLET_MULTITASK_MENU_NUDGE_TEXT" desc="Text that is shown when the tablet multitask menu nudge is displayed.">
|
||||
Swipe down for more layout options
|
||||
</message>
|
||||
<message name="IDS_MULTITASK_MENU_FEEDBACK_BUTTON_NAME" desc="Button text of the dogfood feedback button on the multitask menu.">
|
||||
Send feedback
|
||||
</message>
|
||||
|
||||
<if expr="chromeos_ash">
|
||||
<!-- The following strings are located here for accessibility from both //ash and //chrome -->
|
||||
<message name="IDS_ENABLE_BLUETOOTH" desc="The message to display in the network list when Tether is enabled but Bluetooth is disabled.">
|
||||
|
@ -2367,6 +2363,36 @@
|
|||
<message name="IDS_PERSONALIZATION_APP_THEME_LABEL" desc="Label for theme element in personalization hub">
|
||||
Theme
|
||||
</message>
|
||||
<message name="IDS_PERSONALIZATION_APP_THEME_DYNAMIC_COLOR_LABEL" desc="Label for dynamic color theme element in personalization hub">
|
||||
Accent colors
|
||||
</message>
|
||||
<message name="IDS_PERSONALIZATION_APP_THEME_DYNAMIC_COLOR_DESCRIPTION" desc="Description for dynamic color theme element in personalization hub">
|
||||
Use color sets that match your wallpaper
|
||||
</message>
|
||||
<message name="IDS_PERSONALIZATION_APP_THEME_COLOR_SCHEME_TONAL_SPOT" desc="Label for dynamic color tonal spot scheme in personalization hub">
|
||||
Wallpaper tone
|
||||
</message>
|
||||
<message name="IDS_PERSONALIZATION_APP_THEME_COLOR_SCHEME_NEUTRAL" desc="Label for dynamic color neutral scheme in personalization hub">
|
||||
Neutral
|
||||
</message>
|
||||
<message name="IDS_PERSONALIZATION_APP_THEME_COLOR_SCHEME_VIBRANT" desc="Label for dynamic color vibrant scheme in personalization hub">
|
||||
Vibrant
|
||||
</message>
|
||||
<message name="IDS_PERSONALIZATION_APP_THEME_COLOR_SCHEME_EXPRESSIVE" desc="Label for dynamic color expressive scheme in personalization hub">
|
||||
Expressive
|
||||
</message>
|
||||
<message name="IDS_PERSONALIZATION_APP_THEME_STATIC_COLOR_GOOGLE_BLUE" desc="Label for static color google blue in personalization hub">
|
||||
Google blue
|
||||
</message>
|
||||
<message name="IDS_PERSONALIZATION_APP_THEME_STATIC_COLOR_LIGHT_PINK" desc="Label for static color light pink in personalization hub">
|
||||
Light pink
|
||||
</message>
|
||||
<message name="IDS_PERSONALIZATION_APP_THEME_STATIC_COLOR_DARK_GREEN" desc="Label for static color dark green in personalization hub">
|
||||
Dark green
|
||||
</message>
|
||||
<message name="IDS_PERSONALIZATION_APP_THEME_STATIC_COLOR_LIGHT_PURPLE" desc="Label for static color light purple in personalization hub">
|
||||
Light purple
|
||||
</message>
|
||||
<message name="IDS_PERSONALIZATION_APP_THEME_DARK_COLOR_MODE" desc="Label for dark color mode setting">
|
||||
Dark
|
||||
</message>
|
||||
|
@ -2449,6 +2475,12 @@
|
|||
<message name="IDS_PERSONALIZATION_APP_AMBIENT_MODE_TOPIC_SOURCE_ART_GALLERY_DESCRIPTION" desc="Description for the radio button to choose the topic source from art gallery. The radio button allows the user to set Art gallery for ambient mode, which shows photos to the user when their device is idle.">
|
||||
Select curated artwork and images
|
||||
</message>
|
||||
<message name="IDS_PERSONALIZATION_APP_AMBIENT_MODE_TOPIC_SOURCE_VIDEO" desc="Label for the radio button to choose the video topic source. The radio button allows the user to set which video ti play for ambient mode.">
|
||||
Dawn to dark
|
||||
</message>
|
||||
<message name="IDS_PERSONALIZATION_APP_AMBIENT_MODE_TOPIC_SOURCE_VIDEO_DESCRIPTION" desc="Description for the radio button to choose the topic source from video animation. The radio button allows the user to set which video to play for ambient mode.">
|
||||
Select Thoriumbook exclusive artwork
|
||||
</message>
|
||||
<message name="IDS_PERSONALIZATION_APP_AMBIENT_MODE_TOPIC_SOURCE_SELECTED_ROW" desc="A11y label for the selected topic source row in ambient mode.">
|
||||
<ph name="TOPIC_SOURCE">$1<ex>Google Photos</ex></ph> <ph name="TOPIC_SOURCE_DESC">$2<ex>Select your memories</ex></ph> selected, press Enter to select <ph name="TOPIC_SOURCE">$1<ex>Google Photos</ex></ph> albums
|
||||
</message>
|
||||
|
@ -2506,6 +2538,9 @@
|
|||
<message name="IDS_PERSONALIZATION_APP_AMBIENT_MODE_ANIMATION_FLOAT_ON_BY_LABEL" desc="Label for the ambient mode float on by animation.">
|
||||
Float on by
|
||||
</message>
|
||||
<message name="IDS_PERSONALIZATION_APP_AMBIENT_MODE_ANIMATION_VIDEO_LABEL" desc="Label for the ambient mode float on by animation.">
|
||||
Dawn to dark
|
||||
</message>
|
||||
<message name="IDS_PERSONALIZATION_APP_AMBIENT_MODE_ZERO_STATE_MESSAGE" desc="Message shown in the Ambient subpage in the personalization hub when ambient mode is disabled.">
|
||||
Turn on the toggle to select the screen saver options
|
||||
</message>
|
||||
|
@ -2572,6 +2607,9 @@
|
|||
<message name="IDS_PERSONALIZATION_APP_KEYBOARD_BACKLIGHT_TITLE" desc="Title for the keyboard backlight section of personalization hub.">
|
||||
Keyboard backlight
|
||||
</message>
|
||||
<message name="IDS_PERSONALIZATION_APP_KEYBOARD_ZONES_TITLE" desc="Title for the keyboard zones in zone customization section of personalization hub.">
|
||||
Keyboard zones
|
||||
</message>
|
||||
<message name="IDS_PERSONALIZATION_APP_KEYBOARD_BACKLIGHT_WALLPAPER_COLOR_LABEL" desc="Label for the wallpaper extracted color in the keyboard backlight section of personalization hub.">
|
||||
Wallpaper color
|
||||
</message>
|
||||
|
@ -2634,6 +2672,21 @@
|
|||
<message name="IDS_PERSONALIZATION_APP_TIME_OF_DAY_WALLPAPER_DIALOG_CONFIRM_BUTTON" desc="Label for the button to accept the dialog confirming user's selection of a Time of Day wallpaper.">
|
||||
Confirm
|
||||
</message>
|
||||
<message name="IDS_PERSONALIZATION_APP_TIME_OF_DAY_VIDEO_CLOUDS_ALBUM_TITLE" desc="Title for the clouds video in the ambient section of the hub.">
|
||||
Cloud Flow
|
||||
</message>
|
||||
<message name="IDS_PERSONALIZATION_APP_TIME_OF_DAY_VIDEO_NEW_MEXICO_ALBUM_TITLE" desc="Title for the new mexico video in the ambient section of the hub.">
|
||||
Earth Flow
|
||||
</message>
|
||||
<message name="IDS_PERSONALIZATION_APP_TIME_OF_DAY_VIDEO_ALBUM_DESCRIPTION" desc="Common description all videos in the ambient section of the hub.">
|
||||
Thoriumbook exclusive
|
||||
</message>
|
||||
<message name="IDS_PERSONALIZATION_APP_TIME_OF_DAY_BANNER_TITLE" desc="Title for the Time of Day promo banner.">
|
||||
Exclusive Thoriumbook assets now available
|
||||
</message>
|
||||
<message name="IDS_PERSONALIZATION_APP_TIME_OF_DAY_BANNER_DESCRIPTION" desc="Description shown in the Time of Day promo banner.">
|
||||
You now have access to new <ph name="BEGIN_LINK_WALLPAPER_SUBPAGE"><a href="chrome://personalization/wallpaper"></ph>wallpapers<ph name="END_LINK_WALLPAPER_SUBPAGE"></a></ph> and <ph name="BEGIN_LINK_SCREENSAVER_SUBPAGE"><a href="chrome://personalization/ambient"></ph>screen saver<ph name="END_LINK_SCREENSAVER_SUBPAGE"></a></ph>
|
||||
</message>
|
||||
|
||||
<!-- Personalization App Search Results -->
|
||||
<message name="IDS_PERSONALIZATION_APP_SEARCH_RESULT_TITLE" desc="Text for search result item which, when clicked, navigates the user to personalization app.">
|
||||
|
@ -3175,6 +3228,10 @@
|
|||
<message name="IDS_SHIMLESS_RMA_LID_CALIBRATION_INSTRUCTIONS" translateable="false" desc="Instructions for calibrating gyroscope and accelerometer located in the lid of the device.">
|
||||
Before proceeding, place your whole device (base and lid) on a flat surface.
|
||||
</message>
|
||||
<!-- Nearby Presence -->
|
||||
<message name="IDS_NEARBY_PRESENCE_DEVICE_NAME" is_accessibility_with_no_ui="true" desc="The device name used to advertise the user's device during a feature flow. Displayed to other devices.">
|
||||
<ph name="GIVEN_NAME">$1<ex>Josh</ex></ph>'s <ph name="DEVICE_TYPE">$2<ex>Thoriumbook</ex></ph>
|
||||
</message>
|
||||
<!-- Finalize device page -->
|
||||
<message name="IDS_SHIMLESS_RMA_FINALIZE_PAGE_TITLE" translateable="false" desc="Title for the page shown when finalizing the device. Finalizing is the process of confirming the device is ready to return to the owner.">
|
||||
Finalizing repair
|
||||
|
@ -3681,6 +3738,8 @@
|
|||
</message>
|
||||
<message name="IDS_FEEDBACK_TOOL_AUTOFILL_LOGS_CHECKBOX" translateable="false" desc="Checkbox for Google internal account to attach autofill logs from the current page.">
|
||||
Send <ph name="BEGIN_LINK1"><a href="#" id="autofillMetadataUrl"></ph>autofill metadata<ph name="END_LINK1"></a></ph>
|
||||
<ph name="LINE_BREAK"><br></ph>
|
||||
(your autofill data won't be shared)
|
||||
</message>
|
||||
<message name="IDS_FEEDBACK_TOOL_ASSISTANT_LOGS_MESSAGE" translateable="false" desc="Message shown after user clicks on the assistant logs hyperlink">
|
||||
Google Assistance captures recent history and information such as your identity and location to help us better understand your issue. The information is stored for up to 90 days and access is restricted to the team working on this issue.
|
||||
|
@ -3803,6 +3862,21 @@
|
|||
<message name="IDS_SHORTCUT_CUSTOMIZATION_SHORTCUT_WITH_CONFILICT_STATUS_MESSAGE" desc="The status message that displays when user clicks button to override an accelerator" translateable="false">
|
||||
Shortcut is used by <ph name="CONFLICT_ACCEL_NAME">$1<ex>BRIGHTNESS_UP</ex></ph>. Press a new shortcut or press the same one again to use it for this action instead.
|
||||
</message>
|
||||
<message name="IDS_SHORTCUT_CUSTOMIZATION_SEARCH_NO_RESULTS" desc="Text description of a search that has no results." translateable="false">
|
||||
No search results found
|
||||
</message>
|
||||
<message name="IDS_SHORTCUT_CUSTOMIZATION_SEARCH_CLEAR_QUERY_LABEL" desc="The label for the button that clears search input, displayed when the user hovers over the button or when a screen reader describes that button." translateable="false">
|
||||
Clear search
|
||||
</message>
|
||||
<message name="IDS_SHORTCUT_CUSTOMIZATION_SEARCH_PLACEHOLDER_LABEL" desc="Placeholder text shown in search input field before user has typed anything." translateable="false">
|
||||
Search shortcuts
|
||||
</message>
|
||||
<message name="IDS_SHORTCUT_CUSTOMIZATION_SEARCH_ACCELERATOR_TEXT_DIVIDER" desc="The text shown between multiple shortcut keys in search results." translateable="false">
|
||||
or
|
||||
</message>
|
||||
<message name="IDS_SHORTCUT_CUSTOMIZATION_SEARCH_RESULT_ROW_A11Y_RESULT_SELECTED" desc="ThoriumVox alert to indicate the position number of a selected result in a list of search results and the selected result text itself, and that the user can press enter to navigate to section described by the search result." translateable="false">
|
||||
Search result <ph name="LIST_POSITION">$1<ex>1</ex></ph> of <ph name="LIST_SIZE">$2<ex>2</ex></ph>: <ph name="SEARCH_RESULT_TEXT">$3<ex>Open new tab, ctrl T</ex></ph>. Press Enter to navigate to shortcut.
|
||||
</message>
|
||||
<message name="IDS_SHORTCUT_CUSTOMIZATION_CATEGORY_GENERAL" desc="Category named 'General' shown on the navigation sidebar">
|
||||
General
|
||||
</message>
|
||||
|
@ -3873,7 +3947,7 @@
|
|||
Desks
|
||||
</message>
|
||||
<message name="IDS_SHORTCUT_CUSTOMIZATION_SUBCATEGORY_CHROMEVOX" desc="Subcategory named 'ThoriumVox' shown within main shortcuts section">
|
||||
ChromeVox
|
||||
ThoriumVox
|
||||
</message>
|
||||
<message name="IDS_SHORTCUT_CUSTOMIZATION_SUBCATEGORY_VISIBILITY" desc="Subcategory named 'Visibility' shown within main shortcuts section">
|
||||
Visibility
|
||||
|
@ -3881,91 +3955,94 @@
|
|||
<message name="IDS_SHORTCUT_CUSTOMIZATION_SUBCATEGORY_ACCESSIBILITY_NAVIGATION" desc="Subcategory named 'AccessibilityNavigation' shown within main shortcuts section">
|
||||
Accessibility navigation
|
||||
</message>
|
||||
<message name="IDS_SHORTCUT_CUSTOMIZATION_ICON_LABEL_ARROW_DOWN" desc="The text read aloud by the screen reader describing the keyboard icon 'arrow down'." translateable="false">
|
||||
<message name="IDS_SHORTCUT_CUSTOMIZATION_ICON_LABEL_ARROW_DOWN" desc="The text read aloud by the screen reader describing the keyboard icon 'arrow down'.">
|
||||
arrow down
|
||||
</message>
|
||||
<message name="IDS_SHORTCUT_CUSTOMIZATION_ICON_LABEL_ARROW_LEFT" desc="The text read aloud by the screen reader describing the keyboard icon 'arrow left'." translateable="false">
|
||||
<message name="IDS_SHORTCUT_CUSTOMIZATION_ICON_LABEL_ARROW_LEFT" desc="The text read aloud by the screen reader describing the keyboard icon 'arrow left'.">
|
||||
arrow left
|
||||
</message>
|
||||
<message name="IDS_SHORTCUT_CUSTOMIZATION_ICON_LABEL_ARROW_RIGHT" desc="The text read aloud by the screen reader describing the keyboard icon 'arrow right'." translateable="false">
|
||||
<message name="IDS_SHORTCUT_CUSTOMIZATION_ICON_LABEL_ARROW_RIGHT" desc="The text read aloud by the screen reader describing the keyboard icon 'arrow right'.">
|
||||
arrow right
|
||||
</message>
|
||||
<message name="IDS_SHORTCUT_CUSTOMIZATION_ICON_LABEL_ARROW_UP" desc="The text read aloud by the screen reader describing the keyboard icon 'arrow up'." translateable="false">
|
||||
<message name="IDS_SHORTCUT_CUSTOMIZATION_ICON_LABEL_ARROW_UP" desc="The text read aloud by the screen reader describing the keyboard icon 'arrow up'.">
|
||||
arrow up
|
||||
</message>
|
||||
<message name="IDS_SHORTCUT_CUSTOMIZATION_ICON_LABEL_AUDIO_VOLUME_DOWN" desc="The text read aloud by the screen reader describing the keyboard icon 'volume down'." translateable="false">
|
||||
<message name="IDS_SHORTCUT_CUSTOMIZATION_ICON_LABEL_AUDIO_VOLUME_DOWN" desc="The text read aloud by the screen reader describing the keyboard icon 'volume down'.">
|
||||
volume down
|
||||
</message>
|
||||
<message name="IDS_SHORTCUT_CUSTOMIZATION_ICON_LABEL_AUDIO_VOLUME_MUTE" desc="The text read aloud by the screen reader describing the keyboard icon 'volume mute'." translateable="false">
|
||||
<message name="IDS_SHORTCUT_CUSTOMIZATION_ICON_LABEL_AUDIO_VOLUME_MUTE" desc="The text read aloud by the screen reader describing the keyboard icon 'volume mute'.">
|
||||
volume mute
|
||||
</message>
|
||||
<message name="IDS_SHORTCUT_CUSTOMIZATION_ICON_LABEL_AUDIO_VOLUME_UP" desc="The text read aloud by the screen reader describing the keyboard icon 'volume up'." translateable="false">
|
||||
<message name="IDS_SHORTCUT_CUSTOMIZATION_ICON_LABEL_AUDIO_VOLUME_UP" desc="The text read aloud by the screen reader describing the keyboard icon 'volume up'.">
|
||||
volume up
|
||||
</message>
|
||||
<message name="IDS_SHORTCUT_CUSTOMIZATION_ICON_LABEL_BRIGHTNESS_DOWN" desc="The text read aloud by the screen reader describing the keyboard icon 'brightness down'." translateable="false">
|
||||
<message name="IDS_SHORTCUT_CUSTOMIZATION_ICON_LABEL_BRIGHTNESS_DOWN" desc="The text read aloud by the screen reader describing the keyboard icon 'brightness down'.">
|
||||
brightness down
|
||||
</message>
|
||||
<message name="IDS_SHORTCUT_CUSTOMIZATION_ICON_LABEL_BRIGHTNESS_UP" desc="The text read aloud by the screen reader describing the keyboard icon 'brightness up'." translateable="false">
|
||||
<message name="IDS_SHORTCUT_CUSTOMIZATION_ICON_LABEL_BRIGHTNESS_UP" desc="The text read aloud by the screen reader describing the keyboard icon 'brightness up'.">
|
||||
brightness up
|
||||
</message>
|
||||
<message name="IDS_SHORTCUT_CUSTOMIZATION_ICON_LABEL_BROWSER_BACK" desc="The text read aloud by the screen reader describing the keyboard icon 'back'." translateable="false">
|
||||
<message name="IDS_SHORTCUT_CUSTOMIZATION_ICON_LABEL_BROWSER_BACK" desc="The text read aloud by the screen reader describing the keyboard icon 'back'.">
|
||||
back
|
||||
</message>
|
||||
<message name="IDS_SHORTCUT_CUSTOMIZATION_ICON_LABEL_BROWSER_FORWARD" desc="The text read aloud by the screen reader describing the keyboard icon 'forward'." translateable="false">
|
||||
forward
|
||||
</message>
|
||||
<message name="IDS_SHORTCUT_CUSTOMIZATION_ICON_LABEL_BROWSER_REFRESH" desc="The text read aloud by the screen reader describing the keyboard icon 'refresh'." translateable="false">
|
||||
<message name="IDS_SHORTCUT_CUSTOMIZATION_ICON_LABEL_BROWSER_REFRESH" desc="The text read aloud by the screen reader describing the keyboard icon 'refresh'.">
|
||||
refresh
|
||||
</message>
|
||||
<message name="IDS_SHORTCUT_CUSTOMIZATION_ICON_LABEL_BROWSER_SEARCH" desc="The text read aloud by the screen reader describing the keyboard icon 'search'." translateable="false">
|
||||
search
|
||||
</message>
|
||||
<message name="IDS_SHORTCUT_CUSTOMIZATION_ICON_LABEL_TOGGLE_DICTATION" desc="The text read aloud by the screen reader describing the keyboard icon 'toggle dictation'." translateable="false">
|
||||
<message name="IDS_SHORTCUT_CUSTOMIZATION_ICON_LABEL_TOGGLE_DICTATION" desc="The text read aloud by the screen reader describing the keyboard icon 'toggle dictation'.">
|
||||
toggle dictation
|
||||
</message>
|
||||
<message name="IDS_SHORTCUT_CUSTOMIZATION_ICON_LABEL_EMOJI_PICKER" desc="The text read aloud by the screen reader describing the keyboard icon 'emoji picker'." translateable="false">
|
||||
<message name="IDS_SHORTCUT_CUSTOMIZATION_ICON_LABEL_EMOJI_PICKER" desc="The text read aloud by the screen reader describing the keyboard icon 'emoji picker'.">
|
||||
emoji picker
|
||||
</message>
|
||||
<message name="IDS_SHORTCUT_CUSTOMIZATION_ICON_LABEL_KEYBOARD_BACKLIGHT_TOGGLE" desc="The text read aloud by the screen reader describing the keyboard icon 'toggle keyboard backlight'." translateable="false">
|
||||
<message name="IDS_SHORTCUT_CUSTOMIZATION_ICON_LABEL_KEYBOARD_BACKLIGHT_TOGGLE" desc="The text read aloud by the screen reader describing the keyboard icon 'toggle keyboard backlight'.">
|
||||
toggle keyboard backlight
|
||||
</message>
|
||||
<message name="IDS_SHORTCUT_CUSTOMIZATION_ICON_LABEL_KEYBOARD_BRIGHTNESS_UP" desc="The text read aloud by the screen reader describing the keyboard icon 'keyboard brightness up'." translateable="false">
|
||||
<message name="IDS_SHORTCUT_CUSTOMIZATION_ICON_LABEL_KEYBOARD_BRIGHTNESS_UP" desc="The text read aloud by the screen reader describing the keyboard icon 'keyboard brightness up'.">
|
||||
keyboard brightness up
|
||||
</message>
|
||||
<message name="IDS_SHORTCUT_CUSTOMIZATION_ICON_LABEL_KEYBOARD_BRIGHTNESS_DOWN" desc="The text read aloud by the screen reader describing the keyboard icon 'keyboard brightness down'." translateable="false">
|
||||
<message name="IDS_SHORTCUT_CUSTOMIZATION_ICON_LABEL_KEYBOARD_BRIGHTNESS_DOWN" desc="The text read aloud by the screen reader describing the keyboard icon 'keyboard brightness down'.">
|
||||
keyboard brightness down
|
||||
</message>
|
||||
<message name="IDS_SHORTCUT_CUSTOMIZATION_ICON_LABEL_LAUNCH_APPLICATION1" desc="The text read aloud by the screen reader describing the keyboard icon 'overview'." translateable="false">
|
||||
overview
|
||||
<message name="IDS_SHORTCUT_CUSTOMIZATION_ICON_LABEL_LAUNCH_APPLICATION1" desc="The text read aloud by the screen reader describing the keyboard icon 'show windows'.">
|
||||
show windows
|
||||
</message>
|
||||
<message name="IDS_SHORTCUT_CUSTOMIZATION_ICON_LABEL_LAUNCH_APPLICATION2" desc="The text read aloud by the screen reader describing the keyboard icon 'open calculator'." translateable="false">
|
||||
open calculator
|
||||
<message name="IDS_SHORTCUT_CUSTOMIZATION_ICON_LABEL_LAUNCH_APPLICATION2" desc="The text read aloud by the screen reader describing the keyboard icon 'calculator app'.">
|
||||
calculator app
|
||||
</message>
|
||||
<message name="IDS_SHORTCUT_CUSTOMIZATION_ICON_LABEL_LAUNCH_ASSISTANT" desc="The text read aloud by the screen reader describing the keyboard icon 'assistant'." translateable="false">
|
||||
assistant
|
||||
<message name="IDS_SHORTCUT_CUSTOMIZATION_ICON_LABEL_LAUNCH_ASSISTANT" desc="The text read aloud by the screen reader describing the keyboard icon 'Google Assistant'.">
|
||||
Google Assistant
|
||||
</message>
|
||||
<message name="IDS_SHORTCUT_CUSTOMIZATION_ICON_LABEL_MEDIA_FAST_FORWARD" desc="The text read aloud by the screen reader describing the keyboard icon 'fast forward media'." translateable="false">
|
||||
<message name="IDS_SHORTCUT_CUSTOMIZATION_ICON_LABEL_MEDIA_FAST_FORWARD" desc="The text read aloud by the screen reader describing the keyboard icon 'fast forward media'.">
|
||||
fast forward media
|
||||
</message>
|
||||
<message name="IDS_SHORTCUT_CUSTOMIZATION_ICON_LABEL_MEDIA_PAUSE" desc="The text read aloud by the screen reader describing the keyboard icon 'pause media'." translateable="false">
|
||||
<message name="IDS_SHORTCUT_CUSTOMIZATION_ICON_LABEL_MEDIA_PAUSE" desc="The text read aloud by the screen reader describing the keyboard icon 'pause media'.">
|
||||
pause media
|
||||
</message>
|
||||
<message name="IDS_SHORTCUT_CUSTOMIZATION_ICON_LABEL_MEDIA_PLAY" desc="The text read aloud by the screen reader describing the keyboard icon 'play media'." translateable="false">
|
||||
<message name="IDS_SHORTCUT_CUSTOMIZATION_ICON_LABEL_MEDIA_PLAY" desc="The text read aloud by the screen reader describing the keyboard icon 'play media'.">
|
||||
play media
|
||||
</message>
|
||||
<message name="IDS_SHORTCUT_CUSTOMIZATION_ICON_LABEL_MEDIA_PLAY_PAUSE" desc="The text read aloud by the screen reader describing the keyboard icon 'play pause'." translateable="false">
|
||||
play pause
|
||||
<message name="IDS_SHORTCUT_CUSTOMIZATION_ICON_LABEL_MEDIA_PLAY_PAUSE" desc="The text read aloud by the screen reader describing the keyboard icon 'play or pause media'.">
|
||||
play or pause media
|
||||
</message>
|
||||
<message name="IDS_SHORTCUT_CUSTOMIZATION_ICON_LABEL_MEDIA_TRACK_NEXT" desc="The text read aloud by the screen reader describing the keyboard icon 'next track'." translateable="false">
|
||||
<message name="IDS_SHORTCUT_CUSTOMIZATION_ICON_LABEL_MEDIA_TRACK_NEXT" desc="The text read aloud by the screen reader describing the keyboard icon 'next track'.">
|
||||
next track
|
||||
</message>
|
||||
<message name="IDS_SHORTCUT_CUSTOMIZATION_ICON_LABEL_MEDIA_TRACK_PREVIOUS" desc="The text read aloud by the screen reader describing the keyboard icon 'previous track'." translateable="false">
|
||||
<message name="IDS_SHORTCUT_CUSTOMIZATION_ICON_LABEL_MEDIA_TRACK_PREVIOUS" desc="The text read aloud by the screen reader describing the keyboard icon 'previous track'.">
|
||||
previous track
|
||||
</message>
|
||||
<message name="IDS_SHORTCUT_CUSTOMIZATION_ICON_LABEL_MICROPHONE_MUTE_TOGGLE" desc="The text read aloud by the screen reader describing the keyboard icon 'toggle microphone mute'." translateable="false">
|
||||
<message name="IDS_SHORTCUT_CUSTOMIZATION_ICON_LABEL_MENU" desc="The text read aloud by the screen reader describing the keyboard icon 'menu." translateable="false">
|
||||
menu
|
||||
</message>
|
||||
<message name="IDS_SHORTCUT_CUSTOMIZATION_ICON_LABEL_MICROPHONE_MUTE_TOGGLE" desc="The text read aloud by the screen reader describing the keyboard icon 'toggle microphone mute'.">
|
||||
toggle microphone mute
|
||||
</message>
|
||||
<message name="IDS_SHORTCUT_CUSTOMIZATION_ICON_LABEL_MODE_CHANGE" desc="The text read aloud by the screen reader describing the keyboard icon 'mode change'." translateable="false">
|
||||
<message name="IDS_SHORTCUT_CUSTOMIZATION_ICON_LABEL_MODE_CHANGE" desc="The text read aloud by the screen reader describing the keyboard icon 'mode change'.">
|
||||
mode change
|
||||
</message>
|
||||
<message name="IDS_SHORTCUT_CUSTOMIZATION_ICON_LABEL_OPEN_LAUNCHER" desc="The text read aloud by the screen reader describing the keyboard icon 'launcher'." translateable="false">
|
||||
|
@ -3974,16 +4051,16 @@
|
|||
<message name="IDS_SHORTCUT_CUSTOMIZATION_ICON_LABEL_POWER" desc="The text read aloud by the screen reader describing the keyboard icon 'power'." translateable="false">
|
||||
power
|
||||
</message>
|
||||
<message name="IDS_SHORTCUT_CUSTOMIZATION_ICON_LABEL_PRINT_SCREEN" desc="The text read aloud by the screen reader describing the keyboard icon 'screenshot'." translateable="false">
|
||||
screenshot
|
||||
<message name="IDS_SHORTCUT_CUSTOMIZATION_ICON_LABEL_PRINT_SCREEN" desc="The text read aloud by the screen reader describing the keyboard icon 'take screenshot'.">
|
||||
take screenshot
|
||||
</message>
|
||||
<message name="IDS_SHORTCUT_CUSTOMIZATION_ICON_LABEL_PRIVACY_SCREEN_TOGGLE" desc="The text read aloud by the screen reader describing the keyboard icon 'toggle privacy screen'." translateable="false">
|
||||
<message name="IDS_SHORTCUT_CUSTOMIZATION_ICON_LABEL_PRIVACY_SCREEN_TOGGLE" desc="The text read aloud by the screen reader describing the keyboard icon 'toggle privacy screen'.">
|
||||
toggle privacy screen
|
||||
</message>
|
||||
<message name="IDS_SHORTCUT_CUSTOMIZATION_ICON_LABEL_SETTINGS" desc="The text read aloud by the screen reader describing the keyboard icon 'settings'." translateable="false">
|
||||
<message name="IDS_SHORTCUT_CUSTOMIZATION_ICON_LABEL_SETTINGS" desc="The text read aloud by the screen reader describing the keyboard icon 'settings'.">
|
||||
settings
|
||||
</message>
|
||||
<message name="IDS_SHORTCUT_CUSTOMIZATION_ICON_LABEL_ZOOM_TOGGLE" desc="The text read aloud by the screen reader describing the keyboard icon 'full screen'." translateable="false">
|
||||
<message name="IDS_SHORTCUT_CUSTOMIZATION_ICON_LABEL_ZOOM_TOGGLE" desc="The text read aloud by the screen reader describing the keyboard icon 'full screen'.">
|
||||
full screen
|
||||
</message>
|
||||
<!-- End of Shortcut Customization -->
|
||||
|
@ -4004,6 +4081,12 @@
|
|||
<message name="IDS_SETTINGS_APN_DESCRIPTION_WITH_LEARN_MORE_LINK" desc="Text describing APN settings menu with a link to more detailed information.">
|
||||
Manage network APN settings. APNs establish a connection between a cellular network and the internet. <ph name="BEGIN_LINK"><a href="#" ></ph>Learn more<ph name="END_LINK"></a></ph>
|
||||
</message>
|
||||
<message name="IDS_SETTINGS_APN_ZERO_STATE_DESCRIPTION" desc="Text explaining there is no APN information to show because the network has not been attempted to be connected with, and that the user might need to add a custom APN.">
|
||||
You are not connected yet. If your mobile carrier recommends a custom APN, enter the APN information by selecting "+ New APN"
|
||||
</message>
|
||||
<message name="IDS_SETTINGS_APN_CUSTOM_APNS_ERROR_MESSAGE" desc="Error message displayed when a cellular network fails to connect due to APN-related reasons, informing the user that none of the enabled custom APNs were successful in being used to connect.">
|
||||
Can't connect to any enabled custom APNs. Contact your mobile carrier for more information.
|
||||
</message>
|
||||
<message name="IDS_SETTINGS_APN_MENU_DETAILS" desc="Details button in three dotted menu for APNs">
|
||||
Details
|
||||
</message>
|
||||
|
|
|
@ -1 +1 @@
|
|||
Subproject commit 9edbc885548c92a45e64df3a7002c9700061f638
|
||||
Subproject commit d92ac48ba54ee93c801f331678a7994e39b117f3
|
Loading…
Reference in a new issue