From 4545e5ee73a1ea21aab1215aae64f47428eb6a0b Mon Sep 17 00:00:00 2001 From: Michael Peters Date: Sun, 2 Oct 2022 04:08:56 -0500 Subject: [PATCH] Initial commit, builds 101.0.4951.54-1-x86_64 --- .gitignore | 14 + PKGBUILD | 135 +++++++ PKGBUILD.backup | 135 +++++++ PKGBUILD.template | 135 +++++++ aur-PKGBUILD | 289 +++++++++++++++ ...ium-drirc-disable-10bpc-color-configs.conf | 15 + aur-mods.sh | 11 + ...ble-GlobalMediaControlsCastStartStop.patch | 32 ++ .../remove-no-opaque-pointers-flag.patch | 18 + aur-patches/roll-src-third_party-ffmpeg.patch | 333 ++++++++++++++++++ ...e-VirtualCursor-standard-layout-type.patch | 238 +++++++++++++ ...se-oauth2-client-switches-as-default.patch | 17 + aur-patches/wayland-egl.patch | 22 ++ build.sh | 94 +++++ configure-libraries.sh | 50 +++ makefile | 124 +++++++ michael-patches/michael-customizations.patch | 212 +++++++++++ 17 files changed, 1874 insertions(+) create mode 100644 .gitignore create mode 100755 PKGBUILD create mode 100755 PKGBUILD.backup create mode 100755 PKGBUILD.template create mode 100644 aur-PKGBUILD create mode 100644 aur-confs/chromium-drirc-disable-10bpc-color-configs.conf create mode 100755 aur-mods.sh create mode 100644 aur-patches/enable-GlobalMediaControlsCastStartStop.patch create mode 100644 aur-patches/remove-no-opaque-pointers-flag.patch create mode 100644 aur-patches/roll-src-third_party-ffmpeg.patch create mode 100644 aur-patches/sql-make-VirtualCursor-standard-layout-type.patch create mode 100644 aur-patches/use-oauth2-client-switches-as-default.patch create mode 100644 aur-patches/wayland-egl.patch create mode 100755 build.sh create mode 100755 configure-libraries.sh create mode 100644 makefile create mode 100644 michael-patches/michael-customizations.patch diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..a96320b --- /dev/null +++ b/.gitignore @@ -0,0 +1,14 @@ +archive +aur-ungoogled-chromium +cache +chromium-downloads +chromium-launcher +chromium-src** +old-zips +pkg +src +ungoogled-chromium +ungoogled-chromium-michael*.zst +chromium-launcher.tar.gz +chromium-src-release.tar.gz +aur-confs.tar.gz diff --git a/PKGBUILD b/PKGBUILD new file mode 100755 index 0000000..ea5eaad --- /dev/null +++ b/PKGBUILD @@ -0,0 +1,135 @@ +# Based on aur/chromium-vaapi, with ungoogled-chromium patches, and some extra tweaks by Michael + +# Maintainer: Michael Peters + +# Contributor: Pierre Schmitz +# Contributor: Jan "heftig" Steffens +# Contributor: Daniel J Griffiths + +pkgname=ungoogled-chromium-michael +pkgdesc="Michael's custom build of ungoogled-chromium" + +pkgver=101.0.4951.54 +pkgrel=1 + +arch=('x86_64') +license=('BSD') + +provides=('chromium') +conflicts=('chromium') + +options=('debug' '!lto') # Chromium adds its own flags for ThinLTO + +depends=('gtk3' 'nss' 'alsa-lib' 'xdg-utils' 'libxss' 'libcups' 'libgcrypt' + 'ttf-liberation' 'systemd' 'dbus' 'libpulse' 'pciutils' 'libva' + 'desktop-file-utils' 'hicolor-icon-theme') +makedepends=('python' 'gn' 'ninja' 'clang' 'lld' 'gperf' 'nodejs' 'pipewire' + 'java-runtime-headless') +optdepends=('pipewire: WebRTC desktop sharing under Wayland' + 'kdialog: support for native dialogs in Plasma' + 'org.freedesktop.secrets: password storage backend on GNOME / Xfce' + 'kwallet: support for storing passwords in KWallet on Plasma') + +source=('chromium-src-release.tar.gz' + 'aur-confs.tar.gz' + 'chromium-launcher.tar.gz') +sha256sums=('135dd761de526e4ac0ad3de10ac9b0b97f0b0f572aaf2063f53a6a5103a71a0b' + 'cb75bd9700a36858b63067fedd1862c79ebc0086a82bf35064b111f3817fee88' + '9cc5da044ec72a2e27b5444ba5a6b6af89dd6608657cb166d9df7461b83e2cee') + +# Possible replacements are listed in build/linux/unbundle/replace_gn_files.py +# Keys are the names in the above script; values are the dependencies in Arch +declare -gA _system_libs=( + [ffmpeg]=ffmpeg + [flac]=flac + [fontconfig]=fontconfig + [freetype]=freetype2 + [harfbuzz-ng]=harfbuzz + [icu]=icu + [libdrm]= + [libjpeg]=libjpeg + [libpng]=libpng + #[libvpx]=libvpx + [libwebp]=libwebp + [libxml]=libxml2 + [libxslt]=libxslt + [opus]=opus + [re2]=re2 [snappy]=snappy [zlib]=minizip +) +_unwanted_bundled_libs=( + $(printf "%s\n" ${!_system_libs[@]} | sed 's/^libjpeg$/&_turbo/') +) +depends+=(${_system_libs[@]}) + +package() { + cd "$srcdir/chromium-launcher" + + make PREFIX=/usr DESTDIR="$pkgdir" install + install -Dm644 LICENSE \ + "$pkgdir/usr/share/licenses/chromium/LICENSE.launcher" + + cd "$srcdir/chromium-src" + + install -D out/Release/chrome "$pkgdir/usr/lib/chromium/chromium" + install -D out/Release/chromedriver "$pkgdir/usr/bin/chromedriver" + install -Dm4755 out/Release/chrome_sandbox "$pkgdir/usr/lib/chromium/chrome-sandbox" + + install -Dm644 ../aur-confs/chromium-drirc-disable-10bpc-color-configs.conf \ + "$pkgdir/usr/share/drirc.d/10-$pkgname.conf" + + install -Dm644 chrome/installer/linux/common/desktop.template \ + "$pkgdir/usr/share/applications/chromium.desktop" + install -Dm644 chrome/app/resources/manpage.1.in \ + "$pkgdir/usr/share/man/man1/chromium.1" + sed -i \ + -e 's/@@MENUNAME@@/Chromium/g' \ + -e 's/@@PACKAGE@@/chromium/g' \ + -e 's/@@USR_BIN_SYMLINK_NAME@@/chromium/g' \ + "$pkgdir/usr/share/applications/chromium.desktop" \ + "$pkgdir/usr/share/man/man1/chromium.1" + + install -Dm644 chrome/installer/linux/common/chromium-browser/chromium-browser.appdata.xml \ + "$pkgdir/usr/share/metainfo/chromium.appdata.xml" + sed -ni \ + -e 's/chromium-browser\.desktop/chromium.desktop/' \ + -e '//d' \ + -e '/

/N;/

\n.*\(We invite\|Chromium supports Vorbis\)/,/<\/p>/d' \ + -e '/^ + +# Contributor: Pierre Schmitz +# Contributor: Jan "heftig" Steffens +# Contributor: Daniel J Griffiths + +pkgname=ungoogled-chromium-michael +pkgdesc="Michael's custom build of ungoogled-chromium" + +pkgver=101.0.4951.54 +pkgrel=1 + +arch=('x86_64') +license=('BSD') + +provides=('chromium') +conflicts=('chromium') + +options=('debug' '!lto') # Chromium adds its own flags for ThinLTO + +depends=('gtk3' 'nss' 'alsa-lib' 'xdg-utils' 'libxss' 'libcups' 'libgcrypt' + 'ttf-liberation' 'systemd' 'dbus' 'libpulse' 'pciutils' 'libva' + 'desktop-file-utils' 'hicolor-icon-theme') +makedepends=('python' 'gn' 'ninja' 'clang' 'lld' 'gperf' 'nodejs' 'pipewire' + 'java-runtime-headless') +optdepends=('pipewire: WebRTC desktop sharing under Wayland' + 'kdialog: support for native dialogs in Plasma' + 'org.freedesktop.secrets: password storage backend on GNOME / Xfce' + 'kwallet: support for storing passwords in KWallet on Plasma') + +source=('chromium-src-release.tar.gz' + 'aur-confs.tar.gz' + 'chromium-launcher.tar.gz') +sha256sums=('d377e88d1b998c61e0d4e65a1a3578f1e21869063f21766fccde8eb60b7fcbcb' + 'cb75bd9700a36858b63067fedd1862c79ebc0086a82bf35064b111f3817fee88' + 'ca5a54b9c50c94c4d1496f529ca7970f5d2fc51bc7546746c132cccdc5d89920') + +# Possible replacements are listed in build/linux/unbundle/replace_gn_files.py +# Keys are the names in the above script; values are the dependencies in Arch +declare -gA _system_libs=( + [ffmpeg]=ffmpeg + [flac]=flac + [fontconfig]=fontconfig + [freetype]=freetype2 + [harfbuzz-ng]=harfbuzz + [icu]=icu + [libdrm]= + [libjpeg]=libjpeg + [libpng]=libpng + #[libvpx]=libvpx + [libwebp]=libwebp + [libxml]=libxml2 + [libxslt]=libxslt + [opus]=opus + [re2]=re2 [snappy]=snappy [zlib]=minizip +) +_unwanted_bundled_libs=( + $(printf "%s\n" ${!_system_libs[@]} | sed 's/^libjpeg$/&_turbo/') +) +depends+=(${_system_libs[@]}) + +package() { + cd "$srcdir/chromium-launcher" + + make PREFIX=/usr DESTDIR="$pkgdir" install + install -Dm644 LICENSE \ + "$pkgdir/usr/share/licenses/chromium/LICENSE.launcher" + + cd "$srcdir/chromium-src" + + install -D out/Release/chrome "$pkgdir/usr/lib/chromium/chromium" + install -D out/Release/chromedriver "$pkgdir/usr/bin/chromedriver" + install -Dm4755 out/Release/chrome_sandbox "$pkgdir/usr/lib/chromium/chrome-sandbox" + + install -Dm644 ../aur-confs/chromium-drirc-disable-10bpc-color-configs.conf \ + "$pkgdir/usr/share/drirc.d/10-$pkgname.conf" + + install -Dm644 chrome/installer/linux/common/desktop.template \ + "$pkgdir/usr/share/applications/chromium.desktop" + install -Dm644 chrome/app/resources/manpage.1.in \ + "$pkgdir/usr/share/man/man1/chromium.1" + sed -i \ + -e 's/@@MENUNAME@@/Chromium/g' \ + -e 's/@@PACKAGE@@/chromium/g' \ + -e 's/@@USR_BIN_SYMLINK_NAME@@/chromium/g' \ + "$pkgdir/usr/share/applications/chromium.desktop" \ + "$pkgdir/usr/share/man/man1/chromium.1" + + install -Dm644 chrome/installer/linux/common/chromium-browser/chromium-browser.appdata.xml \ + "$pkgdir/usr/share/metainfo/chromium.appdata.xml" + sed -ni \ + -e 's/chromium-browser\.desktop/chromium.desktop/' \ + -e '//d' \ + -e '/

/N;/

\n.*\(We invite\|Chromium supports Vorbis\)/,/<\/p>/d' \ + -e '/^ + +# Contributor: Pierre Schmitz +# Contributor: Jan "heftig" Steffens +# Contributor: Daniel J Griffiths + +pkgname=ungoogled-chromium-michael +pkgdesc="Michael's custom build of ungoogled-chromium" + +pkgver=101.0.4951.54 +pkgrel=1 + +arch=('x86_64') +license=('BSD') + +provides=('chromium') +conflicts=('chromium') + +options=('debug' '!lto') # Chromium adds its own flags for ThinLTO + +depends=('gtk3' 'nss' 'alsa-lib' 'xdg-utils' 'libxss' 'libcups' 'libgcrypt' + 'ttf-liberation' 'systemd' 'dbus' 'libpulse' 'pciutils' 'libva' + 'desktop-file-utils' 'hicolor-icon-theme') +makedepends=('python' 'gn' 'ninja' 'clang' 'lld' 'gperf' 'nodejs' 'pipewire' + 'java-runtime-headless') +optdepends=('pipewire: WebRTC desktop sharing under Wayland' + 'kdialog: support for native dialogs in Plasma' + 'org.freedesktop.secrets: password storage backend on GNOME / Xfce' + 'kwallet: support for storing passwords in KWallet on Plasma') + +source=('chromium-src-release.tar.gz' + 'aur-confs.tar.gz' + 'chromium-launcher.tar.gz') +sha256sums=('' + '' + '') + +# Possible replacements are listed in build/linux/unbundle/replace_gn_files.py +# Keys are the names in the above script; values are the dependencies in Arch +declare -gA _system_libs=( + [ffmpeg]=ffmpeg + [flac]=flac + [fontconfig]=fontconfig + [freetype]=freetype2 + [harfbuzz-ng]=harfbuzz + [icu]=icu + [libdrm]= + [libjpeg]=libjpeg + [libpng]=libpng + #[libvpx]=libvpx + [libwebp]=libwebp + [libxml]=libxml2 + [libxslt]=libxslt + [opus]=opus + [re2]=re2 [snappy]=snappy [zlib]=minizip +) +_unwanted_bundled_libs=( + $(printf "%s\n" ${!_system_libs[@]} | sed 's/^libjpeg$/&_turbo/') +) +depends+=(${_system_libs[@]}) + +package() { + cd "$srcdir/chromium-launcher" + + make PREFIX=/usr DESTDIR="$pkgdir" install + install -Dm644 LICENSE \ + "$pkgdir/usr/share/licenses/chromium/LICENSE.launcher" + + cd "$srcdir/chromium-src" + + install -D out/Release/chrome "$pkgdir/usr/lib/chromium/chromium" + install -D out/Release/chromedriver "$pkgdir/usr/bin/chromedriver" + install -Dm4755 out/Release/chrome_sandbox "$pkgdir/usr/lib/chromium/chrome-sandbox" + + install -Dm644 ../aur-confs/chromium-drirc-disable-10bpc-color-configs.conf \ + "$pkgdir/usr/share/drirc.d/10-$pkgname.conf" + + install -Dm644 chrome/installer/linux/common/desktop.template \ + "$pkgdir/usr/share/applications/chromium.desktop" + install -Dm644 chrome/app/resources/manpage.1.in \ + "$pkgdir/usr/share/man/man1/chromium.1" + sed -i \ + -e 's/@@MENUNAME@@/Chromium/g' \ + -e 's/@@PACKAGE@@/chromium/g' \ + -e 's/@@USR_BIN_SYMLINK_NAME@@/chromium/g' \ + "$pkgdir/usr/share/applications/chromium.desktop" \ + "$pkgdir/usr/share/man/man1/chromium.1" + + install -Dm644 chrome/installer/linux/common/chromium-browser/chromium-browser.appdata.xml \ + "$pkgdir/usr/share/metainfo/chromium.appdata.xml" + sed -ni \ + -e 's/chromium-browser\.desktop/chromium.desktop/' \ + -e '//d' \ + -e '/

/N;/

\n.*\(We invite\|Chromium supports Vorbis\)/,/<\/p>/d' \ + -e '/^ +# Maintainer: JustKidding + +# Based on aur/chromium-vaapi, with ungoogled-chromium patches + +# Maintainer: Evangelos Foutras +# Contributor: Pierre Schmitz +# Contributor: Jan "heftig" Steffens +# Contributor: Daniel J Griffiths + +pkgname=ungoogled-chromium +pkgver=101.0.4951.54 +pkgrel=1 +_launcher_ver=8 +_gcc_patchset=4 +pkgdesc="A lightweight approach to removing Google web service dependency" +arch=('x86_64') +url="https://github.com/Eloston/ungoogled-chromium" +license=('BSD') +depends=('gtk3' 'nss' 'alsa-lib' 'xdg-utils' 'libxss' 'libcups' 'libgcrypt' + 'ttf-liberation' 'systemd' 'dbus' 'libpulse' 'pciutils' 'libva' + 'desktop-file-utils' 'hicolor-icon-theme') +makedepends=('python' 'gn' 'ninja' 'clang' 'lld' 'gperf' 'nodejs' 'pipewire' + 'java-runtime-headless') +optdepends=('pipewire: WebRTC desktop sharing under Wayland' + 'kdialog: support for native dialogs in Plasma' + 'org.freedesktop.secrets: password storage backend on GNOME / Xfce' + 'kwallet: support for storing passwords in KWallet on Plasma') +options=('debug' '!lto') # Chromium adds its own flags for ThinLTO +source=(https://commondatastorage.googleapis.com/chromium-browser-official/chromium-$pkgver.tar.xz + https://github.com/foutrelis/chromium-launcher/archive/v$_launcher_ver/chromium-launcher-$_launcher_ver.tar.gz + https://github.com/stha09/chromium-patches/releases/download/chromium-${pkgver%%.*}-patchset-$_gcc_patchset/chromium-${pkgver%%.*}-patchset-$_gcc_patchset.tar.xz + enable-GlobalMediaControlsCastStartStop.patch + chromium-libxml-unbundle.patch + sql-make-VirtualCursor-standard-layout-type.patch + use-oauth2-client-switches-as-default.patch) +sha256sums=('c26cc6fd453d9a42a6b5e46fa4f3ee62ed368bb78101512b6816bc5d8f4200b5' + '213e50f48b67feb4441078d50b0fd431df34323be15be97c55302d3fdac4483a' + '8ed519d21ccd8b382ddd384e9c15306a60d2e3495f48a62dea07c9be9bbffebd' + '779fb13f2494209d3a7f1f23a823e59b9dded601866d3ab095937a1a04e19ac6' + 'fd3bf124aacc45f2d0a4f1dd86303fa7f2a3d4f4eeaf33854631d6cb39e12485' + 'b94b2e88f63cfb7087486508b8139599c89f96d7a4181c61fec4b4e250ca327a' + 'e393174d7695d0bafed69e868c5fbfecf07aa6969f3b64596d0bae8b067e1711') +provides=('chromium') +conflicts=('chromium') +_uc_usr=Eloston +_uc_ver=$pkgver-1 +source=(${source[@]} + $pkgname-$_uc_ver.tar.gz::https://github.com/$_uc_usr/ungoogled-chromium/archive/$_uc_ver.tar.gz + chromium-drirc-disable-10bpc-color-configs.conf + wayland-egl.patch) +sha256sums=(${sha256sums[@]} + '8c5da085191a8586bf52ff3bbd0548f1af0fe1792c5db8530d4b158df83a092b' + 'babda4f5c1179825797496898d77334ac067149cac03d797ab27ac69671a7feb' + '34d08ea93cb4762cb33c7cffe931358008af32265fc720f2762f0179c3973574') + +# Possible replacements are listed in build/linux/unbundle/replace_gn_files.py +# Keys are the names in the above script; values are the dependencies in Arch +declare -gA _system_libs=( + [ffmpeg]=ffmpeg + [flac]=flac + [fontconfig]=fontconfig + [freetype]=freetype2 + [harfbuzz-ng]=harfbuzz + [icu]=icu + [libdrm]= + [libjpeg]=libjpeg + [libpng]=libpng + #[libvpx]=libvpx + [libwebp]=libwebp + [libxml]=libxml2 + [libxslt]=libxslt + [opus]=opus + [re2]=re2 + [snappy]=snappy + [zlib]=minizip +) +_unwanted_bundled_libs=( + $(printf "%s\n" ${!_system_libs[@]} | sed 's/^libjpeg$/&_turbo/') +) +depends+=(${_system_libs[@]}) + +prepare() { + cd "$srcdir/chromium-$pkgver" + + # Allow building against system libraries in official builds + sed -i 's/OFFICIAL_BUILD/GOOGLE_CHROME_BUILD/' \ + tools/generate_shim_headers/generate_shim_headers.py + + # https://crbug.com/893950 + sed -i -e 's/\/malloc/' -e 's/\/free/' \ + third_party/blink/renderer/core/xml/*.cc \ + third_party/blink/renderer/core/xml/parser/xml_document_parser.cc \ + third_party/libxml/chromium/*.cc \ + third_party/maldoca/src/maldoca/ole/oss_utils.h + + # Use the --oauth2-client-id= and --oauth2-client-secret= switches for + # setting GOOGLE_DEFAULT_CLIENT_ID and GOOGLE_DEFAULT_CLIENT_SECRET at + # runtime -- this allows signing into Chromium without baked-in values + patch -Np1 -i ../use-oauth2-client-switches-as-default.patch + + # Upstream fixes + + # Revert kGlobalMediaControlsCastStartStop enabled by default + # https://crbug.com/1314342 + patch -Rp1 -F3 -i ../enable-GlobalMediaControlsCastStartStop.patch + + # https://chromium-review.googlesource.com/c/chromium/src/+/3488058 + patch -Np1 -i ../chromium-libxml-unbundle.patch + + # https://chromium-review.googlesource.com/c/chromium/src/+/2862724 + patch -Np1 -i ../sql-make-VirtualCursor-standard-layout-type.patch + + # Fixes for building with libstdc++ instead of libc++ + #patch -Np1 -i ../patches/ + + # Wayland/EGL regression (crbug #1071528 #1071550) + patch -Np1 -i ../wayland-egl.patch + + # Ungoogled Chromium changes + _ungoogled_repo="$srcdir/$pkgname-$_uc_ver" + _utils="${_ungoogled_repo}/utils" + python "$_utils/prune_binaries.py" ./ "$_ungoogled_repo/pruning.list" + python "$_utils/patches.py" apply ./ "$_ungoogled_repo/patches" + python "$_utils/domain_substitution.py" apply -r "$_ungoogled_repo/domain_regex.list" \ + -f "$_ungoogled_repo/domain_substitution.list" -c domainsubcache.tar.gz ./ + + # Link to system tools required by the build + mkdir -p third_party/node/linux/node-linux-x64/bin + ln -s /usr/bin/node third_party/node/linux/node-linux-x64/bin/ + ln -s /usr/bin/java third_party/jdk/current/bin/ + + # Remove bundled libraries for which we will use the system copies; this + # *should* do what the remove_bundled_libraries.py script does, with the + # added benefit of not having to list all the remaining libraries + local _lib + for _lib in ${_unwanted_bundled_libs[@]}; do + find "third_party/$_lib" -type f \ + \! -path "third_party/$_lib/chromium/*" \ + \! -path "third_party/$_lib/google/*" \ + \! -path "third_party/harfbuzz-ng/utils/hb_scoped.h" \ + \! -regex '.*\.\(gn\|gni\|isolate\)' \ + -delete + done + + ./build/linux/unbundle/replace_gn_files.py \ + --system-libraries "${!_system_libs[@]}" +} + +build() { + make -C chromium-launcher-$_launcher_ver + + cd "$srcdir/chromium-$pkgver" + + export CC=clang + export CXX=clang++ + export AR=ar + export NM=nm + + local _flags=( + 'custom_toolchain="//build/toolchain/linux/unbundle:default"' + 'host_toolchain="//build/toolchain/linux/unbundle:default"' + 'is_official_build=true' # implies is_cfi=true on x86_64 + 'symbol_level=0' # sufficient for backtraces on x86(_64) + 'chrome_pgo_phase=0' # needs newer clang to read the bundled PGO profile + 'disable_fieldtrial_testing_config=true' + 'blink_enable_generated_code_formatting=false' + 'ffmpeg_branding="Chrome"' + 'proprietary_codecs=true' + 'rtc_use_pipewire=true' + 'link_pulseaudio=true' + 'use_gnome_keyring=false' + 'use_sysroot=false' + 'use_custom_libcxx=false' + 'enable_widevine=true' + ) + + if [[ -n ${_system_libs[icu]+set} ]]; then + _flags+=('icu_use_data_file=false') + fi + + # Append ungoogled chromium flags to _flags array + _ungoogled_repo="$srcdir/$pkgname-$_uc_ver" + readarray -t -O ${#_flags[@]} _flags < "${_ungoogled_repo}/flags.gn" + + # Facilitate deterministic builds (taken from build/config/compiler/BUILD.gn) + CFLAGS+=' -Wno-builtin-macro-redefined' + CXXFLAGS+=' -Wno-builtin-macro-redefined' + CPPFLAGS+=' -D__DATE__= -D__TIME__= -D__TIMESTAMP__=' + + # Do not warn about unknown warning options + CFLAGS+=' -Wno-unknown-warning-option' + CXXFLAGS+=' -Wno-unknown-warning-option' + + # Let Chromium set its own symbol level + CFLAGS=${CFLAGS/-g } + CXXFLAGS=${CXXFLAGS/-g } + + # https://github.com/ungoogled-software/ungoogled-chromium-archlinux/issues/123 + CFLAGS=${CFLAGS/-fexceptions} + CFLAGS=${CFLAGS/-fcf-protection} + CXXFLAGS=${CXXFLAGS/-fexceptions} + CXXFLAGS=${CXXFLAGS/-fcf-protection} + + # This appears to cause random segfaults when combined with ThinLTO + # https://bugs.archlinux.org/task/73518 + CFLAGS=${CFLAGS/-fstack-clash-protection} + CXXFLAGS=${CXXFLAGS/-fstack-clash-protection} + + # https://crbug.com/957519#c122 + CXXFLAGS=${CXXFLAGS/-Wp,-D_GLIBCXX_ASSERTIONS} + + gn gen out/Release --args="${_flags[*]}" + ninja -C out/Release chrome chrome_sandbox chromedriver +} + +package() { + cd chromium-launcher-$_launcher_ver + make PREFIX=/usr DESTDIR="$pkgdir" install + install -Dm644 LICENSE \ + "$pkgdir/usr/share/licenses/chromium/LICENSE.launcher" + + cd "$srcdir/chromium-$pkgver" + + install -D out/Release/chrome "$pkgdir/usr/lib/chromium/chromium" + install -D out/Release/chromedriver "$pkgdir/usr/bin/chromedriver" + install -Dm4755 out/Release/chrome_sandbox "$pkgdir/usr/lib/chromium/chrome-sandbox" + + install -Dm644 ../chromium-drirc-disable-10bpc-color-configs.conf \ + "$pkgdir/usr/share/drirc.d/10-$pkgname.conf" + + install -Dm644 chrome/installer/linux/common/desktop.template \ + "$pkgdir/usr/share/applications/chromium.desktop" + install -Dm644 chrome/app/resources/manpage.1.in \ + "$pkgdir/usr/share/man/man1/chromium.1" + sed -i \ + -e 's/@@MENUNAME@@/Chromium/g' \ + -e 's/@@PACKAGE@@/chromium/g' \ + -e 's/@@USR_BIN_SYMLINK_NAME@@/chromium/g' \ + "$pkgdir/usr/share/applications/chromium.desktop" \ + "$pkgdir/usr/share/man/man1/chromium.1" + + install -Dm644 chrome/installer/linux/common/chromium-browser/chromium-browser.appdata.xml \ + "$pkgdir/usr/share/metainfo/chromium.appdata.xml" + sed -ni \ + -e 's/chromium-browser\.desktop/chromium.desktop/' \ + -e '//d' \ + -e '/

/N;/

\n.*\(We invite\|Chromium supports Vorbis\)/,/<\/p>/d' \ + -e '/^ + + + + + + + diff --git a/aur-mods.sh b/aur-mods.sh new file mode 100755 index 0000000..6b08898 --- /dev/null +++ b/aur-mods.sh @@ -0,0 +1,11 @@ + +# Allow building against system libraries in official builds +sed -i 's/OFFICIAL_BUILD/GOOGLE_CHROME_BUILD/' \ + tools/generate_shim_headers/generate_shim_headers.py + +# https://crbug.com/893950 +sed -i -e 's/\/malloc/' -e 's/\/free/' \ + third_party/blink/renderer/core/xml/*.cc \ + third_party/blink/renderer/core/xml/parser/xml_document_parser.cc \ + third_party/libxml/chromium/*.cc \ + third_party/maldoca/src/maldoca/ole/oss_utils.h diff --git a/aur-patches/enable-GlobalMediaControlsCastStartStop.patch b/aur-patches/enable-GlobalMediaControlsCastStartStop.patch new file mode 100644 index 0000000..e0d4544 --- /dev/null +++ b/aur-patches/enable-GlobalMediaControlsCastStartStop.patch @@ -0,0 +1,32 @@ +From b58f0f2725a8c1a8a131f9984b5fd53b54119dba Mon Sep 17 00:00:00 2001 +From: Muyao Xu +Date: Thu, 20 Jan 2022 23:46:21 +0000 +Subject: [PATCH] [Zenith] Enable GlobalMediaControlsCastStartStop flag by + default + +The feature is rolled out to 100% stable through finch for M96+. +This CL enables it by default and fixes some unit tests failures. + +Bug: 1287242, 1287305 +Change-Id: I7e5c9625b77379fef253c41ef292a0dd6fc366fb +Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/3388416 +Reviewed-by: Takumi Fujimoto +Commit-Queue: Muyao Xu +Cr-Commit-Position: refs/heads/main@{#961658} +--- + chrome/browser/media/router/media_router_feature.cc | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/chrome/browser/media/router/media_router_feature.cc b/chrome/browser/media/router/media_router_feature.cc +index f28f9b0b802..a8d544f7d6d 100644 +--- a/chrome/browser/media/router/media_router_feature.cc ++++ b/chrome/browser/media/router/media_router_feature.cc +@@ -33,7 +33,7 @@ const base::Feature kMediaRouter{"MediaRouter", + const base::Feature kCastAllowAllIPsFeature{"CastAllowAllIPs", + base::FEATURE_DISABLED_BY_DEFAULT}; + const base::Feature kGlobalMediaControlsCastStartStop{ +- "GlobalMediaControlsCastStartStop", base::FEATURE_DISABLED_BY_DEFAULT}; ++ "GlobalMediaControlsCastStartStop", base::FEATURE_ENABLED_BY_DEFAULT}; + const base::Feature kAllowAllSitesToInitiateMirroring{ + "AllowAllSitesToInitiateMirroring", base::FEATURE_DISABLED_BY_DEFAULT}; + const base::Feature kDialMediaRouteProvider{"DialMediaRouteProvider", diff --git a/aur-patches/remove-no-opaque-pointers-flag.patch b/aur-patches/remove-no-opaque-pointers-flag.patch new file mode 100644 index 0000000..a8eba73 --- /dev/null +++ b/aur-patches/remove-no-opaque-pointers-flag.patch @@ -0,0 +1,18 @@ +--- chromium-102.0.5005.61/build/config/compiler/BUILD.gn.orig 2022-05-19 10:35:52.991415777 +0000 ++++ chromium-102.0.5005.61/build/config/compiler/BUILD.gn 2022-05-19 10:36:11.102017131 +0000 +@@ -1538,15 +1538,6 @@ config("default_warnings") { + cflags += [ "-Wno-deprecated-non-prototype" ] + } + +- if (!is_nacl && !(is_chromeos || +- default_toolchain == "//build/toolchain/cros:target")) { +- # TODO(https://crbug.com/1316298): Re-enable once test failure is figured out +- cflags += [ +- "-Xclang", +- "-no-opaque-pointers", +- ] +- } +- + if (is_fuchsia) { + # TODO(https://bugs.chromium.org/p/fuchsia/issues/detail?id=77383) + cflags += [ "-Wno-deprecated-copy" ] diff --git a/aur-patches/roll-src-third_party-ffmpeg.patch b/aur-patches/roll-src-third_party-ffmpeg.patch new file mode 100644 index 0000000..e739b40 --- /dev/null +++ b/aur-patches/roll-src-third_party-ffmpeg.patch @@ -0,0 +1,333 @@ +From 6e554a30893150793c2638e3689cf208ffc8e375 Mon Sep 17 00:00:00 2001 +From: Dale Curtis +Date: Sat, 2 Apr 2022 05:13:53 +0000 +Subject: [PATCH] Roll src/third_party/ffmpeg/ 574c39cce..32b2d1d526 (1125 + commits) + +https://chromium.googlesource.com/chromium/third_party/ffmpeg.git/+log/574c39cce323..32b2d1d526 + +Created with: + roll-dep src/third_party/ffmpeg + +Fixed: 1293918 +Cq-Include-Trybots: luci.chromium.try:mac_chromium_asan_rel_ng,linux_chromium_asan_rel_ng,linux_chromium_chromeos_asan_rel_ng +Change-Id: I41945d0f963e3d1f65940067bac22f63b68e37d2 +Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/3565647 +Auto-Submit: Dale Curtis +Reviewed-by: Dan Sanders +Commit-Queue: Dale Curtis +Cr-Commit-Position: refs/heads/main@{#988253} +--- + .../clear_key_cdm/ffmpeg_cdm_audio_decoder.cc | 29 ++++++++++--------- + media/ffmpeg/ffmpeg_common.cc | 11 +++---- + media/filters/audio_file_reader.cc | 9 +++--- + media/filters/audio_file_reader_unittest.cc | 6 ++-- + .../filters/audio_video_metadata_extractor.cc | 11 +++++-- + .../filters/ffmpeg_aac_bitstream_converter.cc | 7 +++-- + ...ffmpeg_aac_bitstream_converter_unittest.cc | 2 +- + media/filters/ffmpeg_audio_decoder.cc | 13 +++++---- + 8 files changed, 51 insertions(+), 37 deletions(-) + +diff --git a/media/cdm/library_cdm/clear_key_cdm/ffmpeg_cdm_audio_decoder.cc b/media/cdm/library_cdm/clear_key_cdm/ffmpeg_cdm_audio_decoder.cc +index e4fc3f460e2..9b1ad9f7675 100644 +--- a/media/cdm/library_cdm/clear_key_cdm/ffmpeg_cdm_audio_decoder.cc ++++ b/media/cdm/library_cdm/clear_key_cdm/ffmpeg_cdm_audio_decoder.cc +@@ -74,7 +74,7 @@ void CdmAudioDecoderConfigToAVCodecContext( + codec_context->sample_fmt = AV_SAMPLE_FMT_NONE; + } + +- codec_context->channels = config.channel_count; ++ codec_context->ch_layout.nb_channels = config.channel_count; + codec_context->sample_rate = config.samples_per_second; + + if (config.extra_data) { +@@ -124,8 +124,8 @@ void CopySamples(cdm::AudioFormat cdm_format, + case cdm::kAudioFormatPlanarS16: + case cdm::kAudioFormatPlanarF32: { + const int decoded_size_per_channel = +- decoded_audio_size / av_frame.channels; +- for (int i = 0; i < av_frame.channels; ++i) { ++ decoded_audio_size / av_frame.ch_layout.nb_channels; ++ for (int i = 0; i < av_frame.ch_layout.nb_channels; ++i) { + memcpy(output_buffer, av_frame.extended_data[i], + decoded_size_per_channel); + output_buffer += decoded_size_per_channel; +@@ -185,13 +185,14 @@ bool FFmpegCdmAudioDecoder::Initialize( + // Success! + decoding_loop_ = std::make_unique(codec_context_.get()); + samples_per_second_ = config.samples_per_second; +- bytes_per_frame_ = codec_context_->channels * config.bits_per_channel / 8; ++ bytes_per_frame_ = ++ codec_context_->ch_layout.nb_channels * config.bits_per_channel / 8; + output_timestamp_helper_ = + std::make_unique(config.samples_per_second); + is_initialized_ = true; + + // Store initial values to guard against midstream configuration changes. +- channels_ = codec_context_->channels; ++ channels_ = codec_context_->ch_layout.nb_channels; + av_sample_format_ = codec_context_->sample_fmt; + + return true; +@@ -291,17 +292,19 @@ cdm::Status FFmpegCdmAudioDecoder::DecodeBuffer( + for (auto& frame : audio_frames) { + int decoded_audio_size = 0; + if (frame->sample_rate != samples_per_second_ || +- frame->channels != channels_ || frame->format != av_sample_format_) { ++ frame->ch_layout.nb_channels != channels_ || ++ frame->format != av_sample_format_) { + DLOG(ERROR) << "Unsupported midstream configuration change!" + << " Sample Rate: " << frame->sample_rate << " vs " +- << samples_per_second_ << ", Channels: " << frame->channels +- << " vs " << channels_ << ", Sample Format: " << frame->format +- << " vs " << av_sample_format_; ++ << samples_per_second_ ++ << ", Channels: " << frame->ch_layout.nb_channels << " vs " ++ << channels_ << ", Sample Format: " << frame->format << " vs " ++ << av_sample_format_; + return cdm::kDecodeError; + } + + decoded_audio_size = av_samples_get_buffer_size( +- nullptr, codec_context_->channels, frame->nb_samples, ++ nullptr, codec_context_->ch_layout.nb_channels, frame->nb_samples, + codec_context_->sample_fmt, 1); + if (!decoded_audio_size) + continue; +@@ -320,9 +323,9 @@ bool FFmpegCdmAudioDecoder::OnNewFrame( + size_t* total_size, + std::vector>* audio_frames, + AVFrame* frame) { +- *total_size += av_samples_get_buffer_size(nullptr, codec_context_->channels, +- frame->nb_samples, +- codec_context_->sample_fmt, 1); ++ *total_size += av_samples_get_buffer_size( ++ nullptr, codec_context_->ch_layout.nb_channels, frame->nb_samples, ++ codec_context_->sample_fmt, 1); + audio_frames->emplace_back(av_frame_clone(frame)); + return true; + } +diff --git a/media/ffmpeg/ffmpeg_common.cc b/media/ffmpeg/ffmpeg_common.cc +index 87ca8969626..76f03d6608e 100644 +--- a/media/ffmpeg/ffmpeg_common.cc ++++ b/media/ffmpeg/ffmpeg_common.cc +@@ -345,10 +345,11 @@ bool AVCodecContextToAudioDecoderConfig(const AVCodecContext* codec_context, + codec_context->sample_fmt, codec_context->codec_id); + + ChannelLayout channel_layout = +- codec_context->channels > 8 ++ codec_context->ch_layout.nb_channels > 8 + ? CHANNEL_LAYOUT_DISCRETE +- : ChannelLayoutToChromeChannelLayout(codec_context->channel_layout, +- codec_context->channels); ++ : ChannelLayoutToChromeChannelLayout( ++ codec_context->ch_layout.u.mask, ++ codec_context->ch_layout.nb_channels); + + int sample_rate = codec_context->sample_rate; + switch (codec) { +@@ -401,7 +402,7 @@ bool AVCodecContextToAudioDecoderConfig(const AVCodecContext* codec_context, + extra_data, encryption_scheme, seek_preroll, + codec_context->delay); + if (channel_layout == CHANNEL_LAYOUT_DISCRETE) +- config->SetChannelsForDiscrete(codec_context->channels); ++ config->SetChannelsForDiscrete(codec_context->ch_layout.nb_channels); + + #if BUILDFLAG(ENABLE_PLATFORM_AC3_EAC3_AUDIO) + // These are bitstream formats unknown to ffmpeg, so they don't have +@@ -470,7 +471,7 @@ void AudioDecoderConfigToAVCodecContext(const AudioDecoderConfig& config, + + // TODO(scherkus): should we set |channel_layout|? I'm not sure if FFmpeg uses + // said information to decode. +- codec_context->channels = config.channels(); ++ codec_context->ch_layout.nb_channels = config.channels(); + codec_context->sample_rate = config.samples_per_second(); + + if (config.extra_data().empty()) { +diff --git a/media/filters/audio_file_reader.cc b/media/filters/audio_file_reader.cc +index 5f257bdfaa6..e1be5aa9a5b 100644 +--- a/media/filters/audio_file_reader.cc ++++ b/media/filters/audio_file_reader.cc +@@ -113,14 +113,15 @@ bool AudioFileReader::OpenDecoder() { + + // Verify the channel layout is supported by Chrome. Acts as a sanity check + // against invalid files. See http://crbug.com/171962 +- if (ChannelLayoutToChromeChannelLayout(codec_context_->channel_layout, +- codec_context_->channels) == ++ if (ChannelLayoutToChromeChannelLayout( ++ codec_context_->ch_layout.u.mask, ++ codec_context_->ch_layout.nb_channels) == + CHANNEL_LAYOUT_UNSUPPORTED) { + return false; + } + + // Store initial values to guard against midstream configuration changes. +- channels_ = codec_context_->channels; ++ channels_ = codec_context_->ch_layout.nb_channels; + audio_codec_ = CodecIDToAudioCodec(codec_context_->codec_id); + sample_rate_ = codec_context_->sample_rate; + av_sample_format_ = codec_context_->sample_fmt; +@@ -223,7 +224,7 @@ bool AudioFileReader::OnNewFrame( + if (frames_read < 0) + return false; + +- const int channels = frame->channels; ++ const int channels = frame->ch_layout.nb_channels; + if (frame->sample_rate != sample_rate_ || channels != channels_ || + frame->format != av_sample_format_) { + DLOG(ERROR) << "Unsupported midstream configuration change!" +diff --git a/media/filters/audio_file_reader_unittest.cc b/media/filters/audio_file_reader_unittest.cc +index 2aba7927a31..1f45a50cace 100644 +--- a/media/filters/audio_file_reader_unittest.cc ++++ b/media/filters/audio_file_reader_unittest.cc +@@ -121,11 +121,11 @@ class AudioFileReaderTest : public testing::Test { + EXPECT_FALSE(reader_->Open()); + } + +- void RunTestFailingDecode(const char* fn) { ++ void RunTestFailingDecode(const char* fn, int expect_read = 0) { + Initialize(fn); + EXPECT_TRUE(reader_->Open()); + std::vector> decoded_audio_packets; +- EXPECT_EQ(reader_->Read(&decoded_audio_packets), 0); ++ EXPECT_EQ(reader_->Read(&decoded_audio_packets), expect_read); + } + + void RunTestPartialDecode(const char* fn) { +@@ -219,7 +219,7 @@ TEST_F(AudioFileReaderTest, AAC_ADTS) { + } + + TEST_F(AudioFileReaderTest, MidStreamConfigChangesFail) { +- RunTestFailingDecode("midstream_config_change.mp3"); ++ RunTestFailingDecode("midstream_config_change.mp3", 42624); + } + #endif + +diff --git a/media/filters/audio_video_metadata_extractor.cc b/media/filters/audio_video_metadata_extractor.cc +index 185819eb936..69ff508c221 100644 +--- a/media/filters/audio_video_metadata_extractor.cc ++++ b/media/filters/audio_video_metadata_extractor.cc +@@ -113,6 +113,15 @@ bool AudioVideoMetadataExtractor::Extract(DataSource* source, + if (!stream) + continue; + ++ void* display_matrix = ++ av_stream_get_side_data(stream, AV_PKT_DATA_DISPLAYMATRIX, nullptr); ++ if (display_matrix) { ++ rotation_ = VideoTransformation::FromFFmpegDisplayMatrix( ++ static_cast(display_matrix)) ++ .rotation; ++ info.tags["rotate"] = base::NumberToString(rotation_); ++ } ++ + // Extract dictionary from streams also. Needed for containers that attach + // metadata to contained streams instead the container itself, like OGG. + ExtractDictionary(stream->metadata, &info.tags); +@@ -255,8 +264,6 @@ void AudioVideoMetadataExtractor::ExtractDictionary(AVDictionary* metadata, + if (raw_tags->find(tag->key) == raw_tags->end()) + (*raw_tags)[tag->key] = tag->value; + +- if (ExtractInt(tag, "rotate", &rotation_)) +- continue; + if (ExtractString(tag, "album", &album_)) + continue; + if (ExtractString(tag, "artist", &artist_)) +diff --git a/media/filters/ffmpeg_aac_bitstream_converter.cc b/media/filters/ffmpeg_aac_bitstream_converter.cc +index 6f231c85729..ca5e5fb927d 100644 +--- a/media/filters/ffmpeg_aac_bitstream_converter.cc ++++ b/media/filters/ffmpeg_aac_bitstream_converter.cc +@@ -195,14 +195,15 @@ bool FFmpegAACBitstreamConverter::ConvertPacket(AVPacket* packet) { + if (!header_generated_ || codec_ != stream_codec_parameters_->codec_id || + audio_profile_ != stream_codec_parameters_->profile || + sample_rate_index_ != sample_rate_index || +- channel_configuration_ != stream_codec_parameters_->channels || ++ channel_configuration_ != ++ stream_codec_parameters_->ch_layout.nb_channels || + frame_length_ != header_plus_packet_size) { + header_generated_ = + GenerateAdtsHeader(stream_codec_parameters_->codec_id, + 0, // layer + stream_codec_parameters_->profile, sample_rate_index, + 0, // private stream +- stream_codec_parameters_->channels, ++ stream_codec_parameters_->ch_layout.nb_channels, + 0, // originality + 0, // home + 0, // copyrighted_stream +@@ -214,7 +215,7 @@ bool FFmpegAACBitstreamConverter::ConvertPacket(AVPacket* packet) { + codec_ = stream_codec_parameters_->codec_id; + audio_profile_ = stream_codec_parameters_->profile; + sample_rate_index_ = sample_rate_index; +- channel_configuration_ = stream_codec_parameters_->channels; ++ channel_configuration_ = stream_codec_parameters_->ch_layout.nb_channels; + frame_length_ = header_plus_packet_size; + } + +diff --git a/media/filters/ffmpeg_aac_bitstream_converter_unittest.cc b/media/filters/ffmpeg_aac_bitstream_converter_unittest.cc +index 1fd4c5ccd7d..f59bcd8fdaf 100644 +--- a/media/filters/ffmpeg_aac_bitstream_converter_unittest.cc ++++ b/media/filters/ffmpeg_aac_bitstream_converter_unittest.cc +@@ -34,7 +34,7 @@ class FFmpegAACBitstreamConverterTest : public testing::Test { + memset(&test_parameters_, 0, sizeof(AVCodecParameters)); + test_parameters_.codec_id = AV_CODEC_ID_AAC; + test_parameters_.profile = FF_PROFILE_AAC_MAIN; +- test_parameters_.channels = 2; ++ test_parameters_.ch_layout.nb_channels = 2; + test_parameters_.extradata = extradata_header_; + test_parameters_.extradata_size = sizeof(extradata_header_); + } +diff --git a/media/filters/ffmpeg_audio_decoder.cc b/media/filters/ffmpeg_audio_decoder.cc +index 6a56c675f7d..4615fdeb3fb 100644 +--- a/media/filters/ffmpeg_audio_decoder.cc ++++ b/media/filters/ffmpeg_audio_decoder.cc +@@ -28,7 +28,7 @@ namespace media { + + // Return the number of channels from the data in |frame|. + static inline int DetermineChannels(AVFrame* frame) { +- return frame->channels; ++ return frame->ch_layout.nb_channels; + } + + // Called by FFmpeg's allocation routine to allocate a buffer. Uses +@@ -231,7 +231,7 @@ bool FFmpegAudioDecoder::OnNewFrame(const DecoderBuffer& buffer, + // Translate unsupported into discrete layouts for discrete configurations; + // ffmpeg does not have a labeled discrete configuration internally. + ChannelLayout channel_layout = ChannelLayoutToChromeChannelLayout( +- codec_context_->channel_layout, codec_context_->channels); ++ codec_context_->ch_layout.u.mask, codec_context_->ch_layout.nb_channels); + if (channel_layout == CHANNEL_LAYOUT_UNSUPPORTED && + config_.channel_layout() == CHANNEL_LAYOUT_DISCRETE) { + channel_layout = CHANNEL_LAYOUT_DISCRETE; +@@ -348,11 +348,11 @@ bool FFmpegAudioDecoder::ConfigureDecoder(const AudioDecoderConfig& config) { + // Success! + av_sample_format_ = codec_context_->sample_fmt; + +- if (codec_context_->channels != config.channels()) { ++ if (codec_context_->ch_layout.nb_channels != config.channels()) { + MEDIA_LOG(ERROR, media_log_) + << "Audio configuration specified " << config.channels() + << " channels, but FFmpeg thinks the file contains " +- << codec_context_->channels << " channels"; ++ << codec_context_->ch_layout.nb_channels << " channels"; + ReleaseFFmpegResources(); + state_ = DecoderState::kUninitialized; + return false; +@@ -403,7 +403,7 @@ int FFmpegAudioDecoder::GetAudioBuffer(struct AVCodecContext* s, + if (frame->nb_samples <= 0) + return AVERROR(EINVAL); + +- if (s->channels != channels) { ++ if (s->ch_layout.nb_channels != channels) { + DLOG(ERROR) << "AVCodecContext and AVFrame disagree on channel count."; + return AVERROR(EINVAL); + } +@@ -436,7 +436,8 @@ int FFmpegAudioDecoder::GetAudioBuffer(struct AVCodecContext* s, + ChannelLayout channel_layout = + config_.channel_layout() == CHANNEL_LAYOUT_DISCRETE + ? CHANNEL_LAYOUT_DISCRETE +- : ChannelLayoutToChromeChannelLayout(s->channel_layout, s->channels); ++ : ChannelLayoutToChromeChannelLayout(s->ch_layout.u.mask, ++ s->ch_layout.nb_channels); + + if (channel_layout == CHANNEL_LAYOUT_UNSUPPORTED) { + DLOG(ERROR) << "Unsupported channel layout."; diff --git a/aur-patches/sql-make-VirtualCursor-standard-layout-type.patch b/aur-patches/sql-make-VirtualCursor-standard-layout-type.patch new file mode 100644 index 0000000..3364d41 --- /dev/null +++ b/aur-patches/sql-make-VirtualCursor-standard-layout-type.patch @@ -0,0 +1,238 @@ +From 144479ad7b4287bee4067f95e4218f614798a865 Mon Sep 17 00:00:00 2001 +From: Stephan Hartmann +Date: Sun, 16 Jan 2022 19:15:26 +0000 +Subject: [PATCH] sql: make VirtualCursor standard layout type + +sql::recover::VirtualCursor needs to be a standard layout type, but +has members of type std::unique_ptr. However, std::unique_ptr is not +guaranteed to be standard layout. Compiling with clang combined with +gcc-11 libstdc++ fails because of this. + +Bug: 1189788 +Change-Id: Ia6dc388cc5ef1c0f2afc75f8ca45b9f12687ca9c +--- + sql/recover_module/btree.cc | 18 ++++++++++++------ + sql/recover_module/btree.h | 21 +++++++++++++++------ + sql/recover_module/cursor.cc | 24 ++++++++++++------------ + sql/recover_module/cursor.h | 2 +- + sql/recover_module/pager.cc | 5 ++--- + sql/recover_module/pager.h | 6 +++--- + 6 files changed, 45 insertions(+), 31 deletions(-) + +diff --git a/sql/recover_module/btree.cc b/sql/recover_module/btree.cc +index cc9420e5c05..f12d8fa32a2 100644 +--- a/sql/recover_module/btree.cc ++++ b/sql/recover_module/btree.cc +@@ -136,16 +136,22 @@ static_assert(std::is_trivially_destructible::value, + "Move the destructor to the .cc file if it's non-trival"); + #endif // !DCHECK_IS_ON() + +-LeafPageDecoder::LeafPageDecoder(DatabasePageReader* db_reader) noexcept +- : page_id_(db_reader->page_id()), +- db_reader_(db_reader), +- cell_count_(ComputeCellCount(db_reader)), +- next_read_index_(0), +- last_record_size_(0) { ++LeafPageDecoder::LeafPageDecoder() noexcept = default; ++ ++void LeafPageDecoder::Initialize(DatabasePageReader* db_reader) { ++ page_id_ = db_reader->page_id(); ++ db_reader_ = db_reader; ++ cell_count_ = ComputeCellCount(db_reader); ++ next_read_index_ = 0; ++ last_record_size_ = 0; + DCHECK(IsOnValidPage(db_reader)); + DCHECK(DatabasePageReader::IsValidPageId(page_id_)); + } + ++void LeafPageDecoder::Reset() { ++ db_reader_ = nullptr; ++} ++ + bool LeafPageDecoder::TryAdvance() { + DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_); + DCHECK(CanAdvance()); +diff --git a/sql/recover_module/btree.h b/sql/recover_module/btree.h +index eaa087a5c52..df0e0c937c0 100644 +--- a/sql/recover_module/btree.h ++++ b/sql/recover_module/btree.h +@@ -101,9 +101,7 @@ class LeafPageDecoder { + public: + // Creates a decoder for a DatabasePageReader's last read page. + // +- // |db_reader| must have been used to read an inner page of a table B-tree. +- // |db_reader| must outlive this instance. +- explicit LeafPageDecoder(DatabasePageReader* db_reader) noexcept; ++ LeafPageDecoder() noexcept; + ~LeafPageDecoder() noexcept = default; + + LeafPageDecoder(const LeafPageDecoder&) = delete; +@@ -151,6 +149,17 @@ class LeafPageDecoder { + // read as long as CanAdvance() returns true. + bool TryAdvance(); + ++ // Initialize with DatabasePageReader ++ // |db_reader| must have been used to read an inner page of a table B-tree. ++ // |db_reader| must outlive this instance. ++ void Initialize(DatabasePageReader* db_reader); ++ ++ // Reset internal DatabasePageReader ++ void Reset(); ++ ++ // True if DatabasePageReader is valid ++ bool IsValid() { return (db_reader_ != nullptr); } ++ + // True if the given reader may point to an inner page in a table B-tree. + // + // The last ReadPage() call on |db_reader| must have succeeded. +@@ -164,14 +173,14 @@ class LeafPageDecoder { + static int ComputeCellCount(DatabasePageReader* db_reader); + + // The number of the B-tree page this reader is reading. +- const int64_t page_id_; ++ int64_t page_id_; + // Used to read the tree page. + // + // Raw pointer usage is acceptable because this instance's owner is expected + // to ensure that the DatabasePageReader outlives this. +- DatabasePageReader* const db_reader_; ++ DatabasePageReader* db_reader_; + // Caches the ComputeCellCount() value for this reader's page. +- const int cell_count_ = ComputeCellCount(db_reader_); ++ int cell_count_; + + // The reader's cursor state. + // +diff --git a/sql/recover_module/cursor.cc b/sql/recover_module/cursor.cc +index 4f827edf1b4..240de4999fe 100644 +--- a/sql/recover_module/cursor.cc ++++ b/sql/recover_module/cursor.cc +@@ -28,7 +28,7 @@ VirtualCursor::~VirtualCursor() { + int VirtualCursor::First() { + DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_); + inner_decoders_.clear(); +- leaf_decoder_ = nullptr; ++ leaf_decoder_.Reset(); + + AppendPageDecoder(table_->root_page_id()); + return Next(); +@@ -38,18 +38,18 @@ int VirtualCursor::Next() { + DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_); + record_reader_.Reset(); + +- while (!inner_decoders_.empty() || leaf_decoder_.get()) { +- if (leaf_decoder_.get()) { +- if (!leaf_decoder_->CanAdvance()) { ++ while (!inner_decoders_.empty() || leaf_decoder_.IsValid()) { ++ if (leaf_decoder_.IsValid()) { ++ if (!leaf_decoder_.CanAdvance()) { + // The leaf has been exhausted. Remove it from the DFS stack. +- leaf_decoder_ = nullptr; ++ leaf_decoder_.Reset(); + continue; + } +- if (!leaf_decoder_->TryAdvance()) ++ if (!leaf_decoder_.TryAdvance()) + continue; + +- if (!payload_reader_.Initialize(leaf_decoder_->last_record_size(), +- leaf_decoder_->last_record_offset())) { ++ if (!payload_reader_.Initialize(leaf_decoder_.last_record_size(), ++ leaf_decoder_.last_record_offset())) { + continue; + } + if (!record_reader_.Initialize()) +@@ -101,13 +101,13 @@ int VirtualCursor::ReadColumn(int column_index, + int64_t VirtualCursor::RowId() { + DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_); + DCHECK(record_reader_.IsInitialized()); +- DCHECK(leaf_decoder_.get()); +- return leaf_decoder_->last_record_rowid(); ++ DCHECK(leaf_decoder_.IsValid()); ++ return leaf_decoder_.last_record_rowid(); + } + + void VirtualCursor::AppendPageDecoder(int page_id) { + DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_); +- DCHECK(leaf_decoder_.get() == nullptr) ++ DCHECK(!leaf_decoder_.IsValid()) + << __func__ + << " must only be called when the current path has no leaf decoder"; + +@@ -115,7 +115,7 @@ void VirtualCursor::AppendPageDecoder(int page_id) { + return; + + if (LeafPageDecoder::IsOnValidPage(&db_reader_)) { +- leaf_decoder_ = std::make_unique(&db_reader_); ++ leaf_decoder_.Initialize(&db_reader_); + return; + } + +diff --git a/sql/recover_module/cursor.h b/sql/recover_module/cursor.h +index 845b7852648..cc4e85f83f9 100644 +--- a/sql/recover_module/cursor.h ++++ b/sql/recover_module/cursor.h +@@ -130,7 +130,7 @@ class VirtualCursor { + std::vector> inner_decoders_; + + // Decodes the leaf page containing records. +- std::unique_ptr leaf_decoder_; ++ LeafPageDecoder leaf_decoder_; + + SEQUENCE_CHECKER(sequence_checker_); + }; +diff --git a/sql/recover_module/pager.cc b/sql/recover_module/pager.cc +index 58e75de2704..69d98cef98d 100644 +--- a/sql/recover_module/pager.cc ++++ b/sql/recover_module/pager.cc +@@ -23,8 +23,7 @@ static_assert(DatabasePageReader::kMaxPageId <= std::numeric_limits::max(), + "ints are not appropriate for representing page IDs"); + + DatabasePageReader::DatabasePageReader(VirtualTable* table) +- : page_data_(std::make_unique(table->page_size())), +- table_(table) { ++ : page_data_(table->page_size()), table_(table) { + DCHECK(table != nullptr); + DCHECK(IsValidPageSize(table->page_size())); + } +@@ -58,7 +57,7 @@ int DatabasePageReader::ReadPage(int page_id) { + "The |read_offset| computation above may overflow"); + + int sqlite_status = +- RawRead(sqlite_file, read_size, read_offset, page_data_.get()); ++ RawRead(sqlite_file, read_size, read_offset, page_data_.data()); + + // |page_id_| needs to be set to kInvalidPageId if the read failed. + // Otherwise, future ReadPage() calls with the previous |page_id_| value +diff --git a/sql/recover_module/pager.h b/sql/recover_module/pager.h +index 07cac3cb989..d08f0932fab 100644 +--- a/sql/recover_module/pager.h ++++ b/sql/recover_module/pager.h +@@ -6,8 +6,8 @@ + #define SQL_RECOVER_MODULE_PAGER_H_ + + #include +-#include + #include ++#include + + #include "base/check_op.h" + #include "base/memory/raw_ptr.h" +@@ -72,7 +72,7 @@ class DatabasePageReader { + DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_); + DCHECK_NE(page_id_, kInvalidPageId) + << "Successful ReadPage() required before accessing pager state"; +- return page_data_.get(); ++ return page_data_.data(); + } + + // The number of bytes in the page read by the last ReadPage() call. +@@ -139,7 +139,7 @@ class DatabasePageReader { + int page_id_ = kInvalidPageId; + // Stores the bytes of the last page successfully read by ReadPage(). + // The content is undefined if the last call to ReadPage() did not succeed. +- const std::unique_ptr page_data_; ++ std::vector page_data_; + // Raw pointer usage is acceptable because this instance's owner is expected + // to ensure that the VirtualTable outlives this. + const raw_ptr table_; diff --git a/aur-patches/use-oauth2-client-switches-as-default.patch b/aur-patches/use-oauth2-client-switches-as-default.patch new file mode 100644 index 0000000..9d9c57b --- /dev/null +++ b/aur-patches/use-oauth2-client-switches-as-default.patch @@ -0,0 +1,17 @@ +diff -upr chromium-89.0.4389.58.orig/google_apis/google_api_keys.cc chromium-89.0.4389.58/google_apis/google_api_keys.cc +--- chromium-89.0.4389.58.orig/google_apis/google_api_keys.cc 2021-02-24 22:37:18.494007649 +0000 ++++ chromium-89.0.4389.58/google_apis/google_api_keys.cc 2021-02-24 22:35:00.865777600 +0000 +@@ -154,11 +154,11 @@ class APIKeyCache { + + std::string default_client_id = CalculateKeyValue( + GOOGLE_DEFAULT_CLIENT_ID, +- STRINGIZE_NO_EXPANSION(GOOGLE_DEFAULT_CLIENT_ID), nullptr, ++ STRINGIZE_NO_EXPANSION(GOOGLE_DEFAULT_CLIENT_ID), ::switches::kOAuth2ClientID, + std::string(), environment.get(), command_line, gaia_config); + std::string default_client_secret = CalculateKeyValue( + GOOGLE_DEFAULT_CLIENT_SECRET, +- STRINGIZE_NO_EXPANSION(GOOGLE_DEFAULT_CLIENT_SECRET), nullptr, ++ STRINGIZE_NO_EXPANSION(GOOGLE_DEFAULT_CLIENT_SECRET), ::switches::kOAuth2ClientSecret, + std::string(), environment.get(), command_line, gaia_config); + + // We currently only allow overriding the baked-in values for the diff --git a/aur-patches/wayland-egl.patch b/aur-patches/wayland-egl.patch new file mode 100644 index 0000000..58a0798 --- /dev/null +++ b/aur-patches/wayland-egl.patch @@ -0,0 +1,22 @@ +--- a/ui/gl/gl_image_native_pixmap.cc 2020-05-18 11:40:06.000000000 -0700 ++++ b/ui/gl/gl_image_native_pixmap.cc 2020-05-22 02:07:16.007770442 -0700 +@@ -288,6 +288,8 @@ + std::move(scoped_fd)); + } + ++ handle.planes[0].size = size_.GetArea(); ++ + return handle; + #endif // !defined(OS_FUCHSIA) + } +--- a/gpu/command_buffer/service/error_state.cc 2020-05-18 11:39:22.000000000 -0700 ++++ b/gpu/command_buffer/service/error_state.cc 2020-05-22 13:43:09.181180388 -0700 +@@ -115,6 +115,8 @@ + // buffer. + error = GL_NO_ERROR; + } ++ if (error == GL_INVALID_ENUM) ++ error = GL_NO_ERROR; + return error; + } + diff --git a/build.sh b/build.sh new file mode 100755 index 0000000..d29b2f3 --- /dev/null +++ b/build.sh @@ -0,0 +1,94 @@ +# Pulled from PKGBUILD on AUR + +# Possible replacements are listed in chromium-src/linux/unbundle/replace_gn_files.py +# Keys are the names in the above script; values are the dependencies in Arch +declare -gA _system_libs=( + [ffmpeg]=ffmpeg + [flac]=flac + [fontconfig]=fontconfig + [freetype]=freetype2 + [harfbuzz-ng]=harfbuzz + [icu]=icu + [libdrm]= + [libjpeg]=libjpeg + [libpng]=libpng + #[libvpx]=libvpx + [libwebp]=libwebp + [libxml]=libxml2 + [libxslt]=libxslt + [opus]=opus + [re2]=re2 + [snappy]=snappy + [zlib]=minizip +) + +build() { + export CC=clang + export CXX=clang++ + export AR=ar + export NM=nm + + local _flags=( + 'custom_toolchain="//build/toolchain/linux/unbundle:default"' + 'host_toolchain="//build/toolchain/linux/unbundle:default"' + 'is_official_build=true' # implies is_cfi=true on x86_64 + 'symbol_level=0' # sufficient for backtraces on x86(_64) + 'chrome_pgo_phase=0' # needs newer clang to read the bundled PGO profile + 'disable_fieldtrial_testing_config=true' + 'blink_enable_generated_code_formatting=false' + 'ffmpeg_branding="Chrome"' + 'proprietary_codecs=true' + 'rtc_use_pipewire=true' + 'link_pulseaudio=true' + 'use_gnome_keyring=false' + 'use_sysroot=false' + 'use_custom_libcxx=false' + 'enable_widevine=true' + ) + + if [[ -n ${_system_libs[icu]+set} ]]; then + _flags+=('icu_use_data_file=false') + fi + + # Append ungoogled chromium flags to _flags array + _ungoogled_repo="../ungoogled-chromium" + readarray -t -O ${#_flags[@]} _flags < "${_ungoogled_repo}/flags.gn" + + # Facilitate deterministic builds (taken from chromium-src/config/compiler/BUILD.gn) + CFLAGS+=' -Wno-builtin-macro-redefined' + CXXFLAGS+=' -Wno-builtin-macro-redefined' + CPPFLAGS+=' -D__DATE__= -D__TIME__= -D__TIMESTAMP__=' + + # Do not warn about unknown warning options + CFLAGS+=' -Wno-unknown-warning-option' + CXXFLAGS+=' -Wno-unknown-warning-option' + + # Let Chromium set its own symbol level + CFLAGS=${CFLAGS/-g } + CXXFLAGS=${CXXFLAGS/-g } + + # https://github.com/ungoogled-software/ungoogled-chromium-archlinux/issues/123 + CFLAGS=${CFLAGS/-fexceptions} + CFLAGS=${CFLAGS/-fcf-protection} + CXXFLAGS=${CXXFLAGS/-fexceptions} + CXXFLAGS=${CXXFLAGS/-fcf-protection} + + # This appears to cause random segfaults when combined with ThinLTO + # https://bugs.archlinux.org/task/73518 + CFLAGS=${CFLAGS/-fstack-clash-protection} + CXXFLAGS=${CXXFLAGS/-fstack-clash-protection} + + # https://crbug.com/957519#c122 + CXXFLAGS=${CXXFLAGS/-Wp,-D_GLIBCXX_ASSERTIONS} + + # echo python build/util/lastchange.py -o build/util/LASTCHANGE + # python build/util/lastchange.py -o build/util/LASTCHANGE + + echo gn gen out/Release --args="${_flags[*]}" + gn gen out/Release --args="${_flags[*]}" + + echo ninja -C out/release chrome chrome_sandbox chromedriver + ninja -C out/Release chrome chrome_sandbox chromedriver +} +build + diff --git a/configure-libraries.sh b/configure-libraries.sh new file mode 100755 index 0000000..7244016 --- /dev/null +++ b/configure-libraries.sh @@ -0,0 +1,50 @@ +# From AUR PKGBUILD + +# Possible replacements are listed in build/linux/unbundle/replace_gn_files.py +# Keys are the names in the above script; values are the dependencies in Arch +declare -gA _system_libs=( + [ffmpeg]=ffmpeg + [flac]=flac + [fontconfig]=fontconfig + [freetype]=freetype2 + [harfbuzz-ng]=harfbuzz + [icu]=icu + [libdrm]= + [libjpeg]=libjpeg + [libpng]=libpng + #[libvpx]=libvpx + [libwebp]=libwebp + [libxml]=libxml2 + [libxslt]=libxslt + [opus]=opus + [re2]=re2 + [snappy]=snappy + [zlib]=minizip +) +_unwanted_bundled_libs=( + $(printf "%s\n" ${!_system_libs[@]} | sed 's/^libjpeg$/&_turbo/') +) + +prepare() { + # Link to system tools required by the build + mkdir -p third_party/node/linux/node-linux-x64/bin + ln -s /usr/bin/node third_party/node/linux/node-linux-x64/bin/ + ln -s /usr/bin/java third_party/jdk/current/bin/ + + local _lib + for _lib in ${_unwanted_bundled_libs[@]}; do + find "third_party/$_lib" -type f \ + \! -path "third_party/$_lib/chromium/*" \ + \! -path "third_party/$_lib/google/*" \ + \! -path "third_party/harfbuzz-ng/utils/hb_scoped.h" \ + \! -regex '.*\.\(gn\|gni\|isolate\)' \ + -delete + done + + ./build/linux/unbundle/replace_gn_files.py \ + --system-libraries "${!_system_libs[@]}" + + echo "done" +} +prepare + diff --git a/makefile b/makefile new file mode 100644 index 0000000..32db5b3 --- /dev/null +++ b/makefile @@ -0,0 +1,124 @@ +# Build requires gn and ninja +# also clang, clang++, ar, nm + +# ungoogled-chromium way +retrieve: + mkdir -p chromium-downloads + ./ungoogled-chromium/utils/downloads.py retrieve -c chromium-downloads -i ./ungoogled-chromium/downloads.ini + +unpack: + ./ungoogled-chromium/utils/downloads.py unpack -c chromium-downloads -i ./ungoogled-chromium/downloads.ini -- chromium-src + +# google way +checkout: + mkdir -p repo + export PATH="$$PATH:$${HOME}/builds/chromium/depot_tools" && cd repo && fetch --nohooks chromium + + +# AUR Preparation Steps +apply-aur-mods: + cd chromium-src && ../aur-mods.sh + +apply-aur-patches: + # Use the --oauth2-client-id= and --oauth2-client-secret= switches for + # setting GOOGLE_DEFAULT_CLIENT_ID and GOOGLE_DEFAULT_CLIENT_SECRET at + # runtime -- this allows signing into Chromium without baked-in values + cd chromium-src && patch -Np1 -i ../aur-patches/use-oauth2-client-switches-as-default.patch + + # Remove '-Xclang -no-opaque-pointers' flag not supported by our clang + cd chromium-src && patch -Np1 -i ../aur-patches/remove-no-opaque-pointers-flag.patch + + # Upstream fixes + + # Revert kGlobalMediaControlsCastStartStop enabled by default + # https://crbug.com/1314342 + cd chromium-src && patch -Rp1 -F3 -i ../aur-patches/enable-GlobalMediaControlsCastStartStop.patch + + # https://chromium-review.googlesource.com/c/chromium/src/+/3488058 + #archived cd chromium-src && patch -Np1 -i ../aur-patches/chromium-libxml-unbundle.patch + + # Revert ffmpeg roll requiring new channel layout API support + # https://crbug.com/1325301 + cd chromium-src && patch -Rp1 -i ../aur-patches/roll-src-third_party-ffmpeg.patch + + # https://chromium-review.googlesource.com/c/chromium/src/+/2862724 + cd chromium-src && patch -Np1 -i ../aur-patches/sql-make-VirtualCursor-standard-layout-type.patch + + # Wayland/EGL regression (crbug #1071528 #1071550) + cd chromium-src && patch -Np1 -i ../aur-patches/wayland-egl.patch + +# Ungoogled Chromium Steps +prune-binaries: + ./ungoogled-chromium/utils/prune_binaries.py chromium-src ./ungoogled-chromium/pruning.list + +apply-ungoogle-patches: + ./ungoogled-chromium/utils/patches.py apply chromium-src ./ungoogled-chromium/patches + +apply-michael-patches: + cd chromium-src && patch -Np1 -i ../michael-patches/michael-customizations.patch + +subst-domains: + mkdir -p chromium-src/cache + ./ungoogled-chromium/utils/domain_substitution.py apply \ + -r ./ungoogled-chromium/domain_regex.list \ + -f ./ungoogled-chromium/domain_substitution.list \ + -c chromium-src/cache/domsubcache.tar.gz \ + chromium-src + +# More AUR Preparation Steps +configure-libraries: + cd chromium-src && ../configure-libraries.sh + +# Build the package +build-chromium: + cd chromium-src && ../build.sh + +build-launcher: + cd chromium-launcher && make + +clean-zips: + rm chromium-src-release.tar.gz + rm chromium-launcher.tar.gz + rm aur-confs.tar.gz + +#chromium-src/out/Release/swiftshader/*.so \ + +create-zips: + apack chromium-src-release.tar.gz \ + chromium-src/LICENSE \ + chromium-src/out/Release/chrome \ + chromium-src/out/Release/chromedriver \ + chromium-src/out/Release/chrome_sandbox \ + chromium-src/out/Release/chrome_100_percent.pak \ + chromium-src/out/Release/chrome_200_percent.pak \ + chromium-src/out/Release/chrome_crashpad_handler \ + chromium-src/out/Release/resources.pak \ + chromium-src/out/Release/v8_context_snapshot.bin \ + chromium-src/out/Release/libEGL.so \ + chromium-src/out/Release/libGLESv2.so \ + chromium-src/out/Release/libvk_swiftshader.so \ + chromium-src/out/Release/vk_swiftshader_icd.json\ + chromium-src/out/Release/locales/*.pak \ + chromium-src/chrome/app/theme/chromium/product_logo_*.png \ + chromium-src/chrome/app/theme/default_100_percent/chromium/product_logo_*.png \ + chromium-src/chrome/installer/linux/common/desktop.template \ + chromium-src/chrome/installer/linux/common/chromium-browser/chromium-browser.appdata.xml \ + chromium-src/chrome/app/resources/manpage.1.in + + apack chromium-launcher.tar.gz \ + chromium-launcher + + apack aur-confs.tar.gz \ + aur-confs/chromium-drirc-disable-10bpc-color-configs.conf + +create-pkgbuild: + cp PKGBUILD.template PKGBUILD + sed -i "s//$$(sha256sum chromium-src-release.tar.gz | awk '{ print $$1 }')/" PKGBUILD + sed -i "s//$$(sha256sum aur-confs.tar.gz | awk '{ print $$1 }')/" PKGBUILD + sed -i "s//$$(sha256sum chromium-launcher.tar.gz | awk '{ print $$1 }')/" PKGBUILD + +makepkg: + makepkg + +install: + makepkg --install diff --git a/michael-patches/michael-customizations.patch b/michael-patches/michael-customizations.patch new file mode 100644 index 0000000..c2adbe7 --- /dev/null +++ b/michael-patches/michael-customizations.patch @@ -0,0 +1,212 @@ +diff --git a/chrome/browser/ui/tabs/tab_menu_model.cc b/chrome/browser/ui/tabs/tab_menu_model.cc +index 08b078d90..a2cdc60be 100644 +--- a/chrome/browser/ui/tabs/tab_menu_model.cc ++++ b/chrome/browser/ui/tabs/tab_menu_model.cc +@@ -49,47 +49,51 @@ void TabMenuModel::Build(TabStripModel* tab_strip, int index) { + } + + int num_tabs = indices.size(); ++ // New Tab + AddItemWithStringId(TabStripModel::CommandNewTabToRight, + base::i18n::IsRTL() ? IDS_TAB_CXMENU_NEWTABTOLEFT + : IDS_TAB_CXMENU_NEWTABTORIGHT); +- if (reading_list::switches::IsReadingListEnabled() && +- !tab_strip->profile()->IsGuestSession()) { +- AddItem( +- TabStripModel::CommandAddToReadLater, +- l10n_util::GetPluralStringFUTF16(IDS_TAB_CXMENU_READ_LATER, num_tabs)); +- SetEnabledAt(GetItemCount() - 1, +- tab_strip->IsReadLaterSupportedForAny(indices)); +- if (base::FeatureList::IsEnabled(features::kReadLaterNewBadgePromo)) +- SetIsNewFeatureAt(GetItemCount() - 1, true); +- } +- if (ExistingTabGroupSubMenuModel::ShouldShowSubmenu(tab_strip, index)) { +- // Create submenu with existing groups +- add_to_existing_group_submenu_ = +- std::make_unique(delegate(), tab_strip, +- index); +- AddSubMenu(TabStripModel::CommandAddToExistingGroup, +- l10n_util::GetPluralStringFUTF16(IDS_TAB_CXMENU_ADD_TAB_TO_GROUP, +- num_tabs), +- add_to_existing_group_submenu_.get()); +- if (base::FeatureList::IsEnabled(features::kTabGroupsNewBadgePromo)) +- SetIsNewFeatureAt(GetItemCount() - 1, true); +- } else { +- AddItem(TabStripModel::CommandAddToNewGroup, +- l10n_util::GetPluralStringFUTF16( +- IDS_TAB_CXMENU_ADD_TAB_TO_NEW_GROUP, num_tabs)); +- SetElementIdentifierAt(GetItemCount() - 1, kAddToNewGroupItemIdentifier); +- if (base::FeatureList::IsEnabled(features::kTabGroupsNewBadgePromo)) +- SetIsNewFeatureAt(GetItemCount() - 1, true); +- } +- +- for (const auto& selection : indices) { +- if (tab_strip->GetTabGroupForTab(selection).has_value()) { +- AddItemWithStringId(TabStripModel::CommandRemoveFromGroup, +- IDS_TAB_CXMENU_REMOVE_TAB_FROM_GROUP); +- break; +- } +- } ++ // Add to reading list (removed) ++ // if (reading_list::switches::IsReadingListEnabled() && ++ // !tab_strip->profile()->IsGuestSession()) { ++ // AddItem( ++ // TabStripModel::CommandAddToReadLater, ++ // l10n_util::GetPluralStringFUTF16(IDS_TAB_CXMENU_READ_LATER, num_tabs)); ++ // SetEnabledAt(GetItemCount() - 1, ++ // tab_strip->IsReadLaterSupportedForAny(indices)); ++ // if (base::FeatureList::IsEnabled(features::kReadLaterNewBadgePromo)) ++ // SetIsNewFeatureAt(GetItemCount() - 1, true); ++ // } ++ // Change tab group (removed) ++ // if (ExistingTabGroupSubMenuModel::ShouldShowSubmenu(tab_strip, index)) { ++ // // Create submenu with existing groups ++ // add_to_existing_group_submenu_ = ++ // std::make_unique(delegate(), tab_strip, ++ // index); ++ // AddSubMenu(TabStripModel::CommandAddToExistingGroup, ++ // l10n_util::GetPluralStringFUTF16(IDS_TAB_CXMENU_ADD_TAB_TO_GROUP, ++ // num_tabs), ++ // add_to_existing_group_submenu_.get()); ++ // if (base::FeatureList::IsEnabled(features::kTabGroupsNewBadgePromo)) ++ // SetIsNewFeatureAt(GetItemCount() - 1, true); ++ // } else { ++ // AddItem(TabStripModel::CommandAddToNewGroup, ++ // l10n_util::GetPluralStringFUTF16( ++ // IDS_TAB_CXMENU_ADD_TAB_TO_NEW_GROUP, num_tabs)); ++ // SetElementIdentifierAt(GetItemCount() - 1, kAddToNewGroupItemIdentifier); ++ // if (base::FeatureList::IsEnabled(features::kTabGroupsNewBadgePromo)) ++ // SetIsNewFeatureAt(GetItemCount() - 1, true); ++ // } ++ // ++ // for (const auto& selection : indices) { ++ // if (tab_strip->GetTabGroupForTab(selection).has_value()) { ++ // AddItemWithStringId(TabStripModel::CommandRemoveFromGroup, ++ // IDS_TAB_CXMENU_REMOVE_TAB_FROM_GROUP); ++ // break; ++ // } ++ // } + ++ // New Window / Move to other window + if (ExistingWindowSubMenuModel::ShouldShowSubmenu(tab_strip->profile())) { + // Create submenu with existing windows + add_to_existing_window_submenu_ = ExistingWindowSubMenuModel::Create( +@@ -105,9 +109,17 @@ void TabMenuModel::Build(TabStripModel* tab_strip, int index) { + } + + AddSeparator(ui::NORMAL_SEPARATOR); +- AddItemWithStringId(TabStripModel::CommandReload, IDS_TAB_CXMENU_RELOAD); +- AddItemWithStringId(TabStripModel::CommandDuplicate, +- IDS_TAB_CXMENU_DUPLICATE); ++ // AddItemWithStringId(TabStripModel::CommandCloseTab, IDS_TAB_CXMENU_CLOSETAB); ++ AddItemWithStringId(TabStripModel::CommandCloseOtherTabs, ++ IDS_TAB_CXMENU_CLOSEOTHERTABS); ++ AddItemWithStringId(TabStripModel::CommandCloseTabsToRight, ++ base::i18n::IsRTL() ? IDS_TAB_CXMENU_CLOSETABSTOLEFT ++ : IDS_TAB_CXMENU_CLOSETABSTORIGHT); ++ ++ AddSeparator(ui::NORMAL_SEPARATOR); ++ // AddItemWithStringId(TabStripModel::CommandReload, IDS_TAB_CXMENU_RELOAD); ++ // AddItemWithStringId(TabStripModel::CommandDuplicate, ++ // IDS_TAB_CXMENU_DUPLICATE); + bool will_pin = tab_strip->WillContextMenuPin(index); + AddItemWithStringId( + TabStripModel::CommandTogglePinned, +@@ -159,14 +171,6 @@ void TabMenuModel::Build(TabStripModel* tab_strip, int index) { + #endif + } + } +- +- AddSeparator(ui::NORMAL_SEPARATOR); +- AddItemWithStringId(TabStripModel::CommandCloseTab, IDS_TAB_CXMENU_CLOSETAB); +- AddItemWithStringId(TabStripModel::CommandCloseOtherTabs, +- IDS_TAB_CXMENU_CLOSEOTHERTABS); +- AddItemWithStringId(TabStripModel::CommandCloseTabsToRight, +- base::i18n::IsRTL() ? IDS_TAB_CXMENU_CLOSETABSTOLEFT +- : IDS_TAB_CXMENU_CLOSETABSTORIGHT); + } + + DEFINE_CLASS_ELEMENT_IDENTIFIER_VALUE(TabMenuModel, +diff --git a/chrome/browser/ui/views/frame/tab_strip_region_view.cc b/chrome/browser/ui/views/frame/tab_strip_region_view.cc +index 1e741368e..fac2b5f51 100644 +--- a/chrome/browser/ui/views/frame/tab_strip_region_view.cc ++++ b/chrome/browser/ui/views/frame/tab_strip_region_view.cc +@@ -142,7 +142,8 @@ TabStripRegionView::TabStripRegionView(std::unique_ptr tab_strip) { + } + + if (browser->is_type_normal() && +- !base::CommandLine::ForCurrentProcess()->HasSwitch("remove-tabsearch-button")) { ++ !base::CommandLine::ForCurrentProcess()->HasSwitch("remove-tabsearch-button") && ++ false) { + auto tab_search_button = std::make_unique(tab_strip_); + tab_search_button->SetTooltipText( + l10n_util::GetStringUTF16(IDS_TOOLTIP_TAB_SEARCH)); +diff --git a/chrome/browser/ui/views/location_bar/location_bar_view.cc b/chrome/browser/ui/views/location_bar/location_bar_view.cc +index 03e8c0fb9..2acc440b1 100644 +--- a/chrome/browser/ui/views/location_bar/location_bar_view.cc ++++ b/chrome/browser/ui/views/location_bar/location_bar_view.cc +@@ -354,14 +354,15 @@ void LocationBarView::Init() { + params.types_enabled.push_back(PageActionIconType::kSaveAutofillAddress); + } + } +- if (browser_) { +-#if BUILDFLAG(IS_CHROMEOS_ASH) +- params.types_enabled.push_back(PageActionIconType::kSharingHub); +-#else +- if (sharing_hub::SharingHubOmniboxEnabled(profile_) && !is_popup_mode_) +- params.types_enabled.push_back(PageActionIconType::kSharingHub); +-#endif +- } ++ // Remove sharing hub icon ++// if (browser_) { ++// #if BUILDFLAG(IS_CHROMEOS_ASH) ++// params.types_enabled.push_back(PageActionIconType::kSharingHub); ++// #else ++// if (sharing_hub::SharingHubOmniboxEnabled(profile_) && !is_popup_mode_) ++// params.types_enabled.push_back(PageActionIconType::kSharingHub); ++// #endif ++// } + if (browser_ && !is_popup_mode_) + params.types_enabled.push_back(PageActionIconType::kBookmarkStar); + +diff --git a/chrome/browser/ui/views/toolbar/toolbar_view.cc b/chrome/browser/ui/views/toolbar/toolbar_view.cc +index 76fce2124..cfe392364 100644 +--- a/chrome/browser/ui/views/toolbar/toolbar_view.cc ++++ b/chrome/browser/ui/views/toolbar/toolbar_view.cc +@@ -378,20 +378,22 @@ void ToolbarView::Init() { + if (send_tab_to_self_button) + send_tab_to_self_button_ = AddChildView(std::move(send_tab_to_self_button)); + +- if (side_panel_button) +- side_panel_button_ = AddChildView(std::move(side_panel_button)); +- +- if (toolbar_account_icon_container) { +- toolbar_account_icon_container_ = +- AddChildView(std::move(toolbar_account_icon_container)); +- avatar_ = toolbar_account_icon_container_->avatar_button(); +- } else { +- // TODO(crbug.com/932818): Remove this once the +- // |kAutofillEnableToolbarStatusChip| is fully launched. +- avatar_ = +- AddChildView(std::make_unique(browser_view_)); +- avatar_->SetVisible(show_avatar_toolbar_button); +- } ++ // Remove side panel ++ // if (side_panel_button) ++ // side_panel_button_ = AddChildView(std::move(side_panel_button)); ++ ++ // Remove toolbar ++ // if (toolbar_account_icon_container) { ++ // toolbar_account_icon_container_ = ++ // AddChildView(std::move(toolbar_account_icon_container)); ++ // avatar_ = toolbar_account_icon_container_->avatar_button(); ++ // } else { ++ // // TODO(crbug.com/932818): Remove this once the ++ // // |kAutofillEnableToolbarStatusChip| is fully launched. ++ // avatar_ = ++ // AddChildView(std::make_unique(browser_view_)); ++ // avatar_->SetVisible(show_avatar_toolbar_button); ++ // } + + auto app_menu_button = std::make_unique(this); + app_menu_button->SetFlipCanvasOnPaintForRTLUI(true);