Date: Tuesday, August 30, 2022 @ 18:56:32 Author: foutrelis Revision: 454794
archrelease: copy trunk to extra-x86_64 Added: chromium/repos/extra-x86_64/PKGBUILD (from rev 454793, chromium/trunk/PKGBUILD) chromium/repos/extra-x86_64/angle-wayland-include-protocol.patch (from rev 454793, chromium/trunk/angle-wayland-include-protocol.patch) chromium/repos/extra-x86_64/enable-GlobalMediaControlsCastStartStop.patch (from rev 454793, chromium/trunk/enable-GlobalMediaControlsCastStartStop.patch) chromium/repos/extra-x86_64/fix-TFLite-build-on-linux-with-system-zlib.patch (from rev 454793, chromium/trunk/fix-TFLite-build-on-linux-with-system-zlib.patch) chromium/repos/extra-x86_64/roll-src-third_party-ffmpeg.patch (from rev 454793, chromium/trunk/roll-src-third_party-ffmpeg.patch) chromium/repos/extra-x86_64/use-oauth2-client-switches-as-default.patch (from rev 454793, chromium/trunk/use-oauth2-client-switches-as-default.patch) Deleted: chromium/repos/extra-x86_64/PKGBUILD chromium/repos/extra-x86_64/chromium-tflite-system-zlib.patch chromium/repos/extra-x86_64/enable-GlobalMediaControlsCastStartStop.patch chromium/repos/extra-x86_64/remove-no-opaque-pointers-flag.patch chromium/repos/extra-x86_64/roll-src-third_party-ffmpeg.patch chromium/repos/extra-x86_64/use-oauth2-client-switches-as-default.patch chromium/repos/extra-x86_64/x11-ozone-fix-X11-screensaver-suspension.patch --------------------------------------------------+ PKGBUILD | 554 ++++++++--------- angle-wayland-include-protocol.patch | 38 + chromium-tflite-system-zlib.patch | 70 -- enable-GlobalMediaControlsCastStartStop.patch | 64 +- fix-TFLite-build-on-linux-with-system-zlib.patch | 291 +++++++++ remove-no-opaque-pointers-flag.patch | 18 roll-src-third_party-ffmpeg.patch | 666 ++++++++++----------- use-oauth2-client-switches-as-default.patch | 34 - x11-ozone-fix-X11-screensaver-suspension.patch | 490 --------------- 9 files changed, 990 insertions(+), 1235 deletions(-) Deleted: PKGBUILD =================================================================== --- PKGBUILD 2022-08-30 18:56:24 UTC (rev 454793) +++ PKGBUILD 2022-08-30 18:56:32 UTC (rev 454794) @@ -1,275 +0,0 @@ -# Maintainer: Evangelos Foutras <evange...@foutrelis.com> -# Contributor: Pierre Schmitz <pie...@archlinux.de> -# Contributor: Jan "heftig" Steffens <jan.steff...@gmail.com> -# Contributor: Daniel J Griffiths <ghost1...@archlinux.us> - -pkgname=chromium -pkgver=104.0.5112.101 -pkgrel=1 -_launcher_ver=8 -_gcc_patchset=2 -pkgdesc="A web browser built for speed, simplicity, and security" -arch=('x86_64') -url="https://www.chromium.org/Home" -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' 'git') -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 - x11-ozone-fix-X11-screensaver-suspension.patch - enable-GlobalMediaControlsCastStartStop.patch - roll-src-third_party-ffmpeg.patch - chromium-tflite-system-zlib.patch - remove-no-opaque-pointers-flag.patch - use-oauth2-client-switches-as-default.patch) -sha256sums=('60f015e1559de4044cdfa3bdc1f8fde535927c8ab15b0959ccc9b6feec832f5b' - '213e50f48b67feb4441078d50b0fd431df34323be15be97c55302d3fdac4483a' - 'ce702099849465927cf47f7bc3a4a27045d0e35e16b17481ebf35e14506bafa7' - '9956a843bc8a765c130080616ccd3ebc46ea95c3a2324c4b403bc293a8705eb2' - '779fb13f2494209d3a7f1f23a823e59b9dded601866d3ab095937a1a04e19ac6' - '30df59a9e2d95dcb720357ec4a83d9be51e59cc5551365da4c0073e68ccdec44' - '588c166bf748793758a7df438cfa665b32e09ca8fbd6380be28bc5984a33523c' - 'ab46b2c26a4dfe86486fd7e31bfc7211c515994a61a8c0cbd742f9c9e3c91873' - 'e393174d7695d0bafed69e868c5fbfecf07aa6969f3b64596d0bae8b067e1711') - -# 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[@]}) - -# Google API keys (see https://www.chromium.org/developers/how-tos/api-keys) -# Note: These are for Arch Linux use ONLY. For your own distribution, please -# get your own set of keys. -# -# Starting with Chromium 89 (2021-03-02) the OAuth2 credentials have been left -# out: https://archlinux.org/news/chromium-losing-sync-support-in-early-march/ -_google_api_key=AIzaSyDwr302FpOSkGRpLlUpPThNTDPbXcIn_FM - -prepare() { - cd 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/\<xmlMalloc\>/malloc/' -e 's/\<xmlFree\>/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 - - # Remove '-Xclang -no-opaque-pointers' flag not supported by our clang - patch -Np1 -i ../remove-no-opaque-pointers-flag.patch - - # Fix build with unbundled zlip (patch from Gentoo) - patch -Np1 -i ../chromium-tflite-system-zlib.patch - - # Upstream fixes - patch -Np1 -i ../x11-ozone-fix-X11-screensaver-suspension.patch - - # Revert kGlobalMediaControlsCastStartStop enabled by default - # https://crbug.com/1314342 - patch -Rp1 -F3 -i ../enable-GlobalMediaControlsCastStartStop.patch - - # Revert ffmpeg roll requiring new channel layout API support - # https://crbug.com/1325301 - patch -Rp1 -i ../roll-src-third_party-ffmpeg.patch - - # Fixes for building with libstdc++ instead of libc++ - patch -Np1 -i ../patches/chromium-103-VirtualCursor-std-layout.patch - - # 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 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"' - 'clang_use_chrome_plugins=false' - '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 - 'treat_warnings_as_errors=false' - '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_hangout_services_extension=true' - 'enable_widevine=true' - 'enable_nacl=false' - "google_api_key=\"$_google_api_key\"" - ) - - if [[ -n ${_system_libs[icu]+set} ]]; then - _flags+=('icu_use_data_file=false') - fi - - # 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.unstripped -} - -package() { - cd chromium-launcher-$_launcher_ver - make PREFIX=/usr DESTDIR="$pkgdir" install - install -Dm644 LICENSE \ - "$pkgdir/usr/share/licenses/chromium/LICENSE.launcher" - - cd ../chromium-$pkgver - - install -D out/Release/chrome "$pkgdir/usr/lib/chromium/chromium" - install -D out/Release/chromedriver.unstripped "$pkgdir/usr/bin/chromedriver" - install -Dm4755 out/Release/chrome_sandbox "$pkgdir/usr/lib/chromium/chrome-sandbox" - - 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 '/<update_contact>/d' \ - -e '/<p>/N;/<p>\n.*\(We invite\|Chromium supports Vorbis\)/,/<\/p>/d' \ - -e '/^<?xml/,$p' \ - "$pkgdir/usr/share/metainfo/chromium.appdata.xml" - - local toplevel_files=( - chrome_100_percent.pak - chrome_200_percent.pak - chrome_crashpad_handler - resources.pak - v8_context_snapshot.bin - - # ANGLE - libEGL.so - libGLESv2.so - - # SwiftShader ICD - libvk_swiftshader.so - vk_swiftshader_icd.json - ) - - if [[ -z ${_system_libs[icu]+set} ]]; then - toplevel_files+=(icudtl.dat) - fi - - cp "${toplevel_files[@]/#/out/Release/}" "$pkgdir/usr/lib/chromium/" - install -Dm644 -t "$pkgdir/usr/lib/chromium/locales" out/Release/locales/*.pak - - for size in 24 48 64 128 256; do - install -Dm644 "chrome/app/theme/chromium/product_logo_$size.png" \ - "$pkgdir/usr/share/icons/hicolor/${size}x${size}/apps/chromium.png" - done - - for size in 16 32; do - install -Dm644 "chrome/app/theme/default_100_percent/chromium/product_logo_$size.png" \ - "$pkgdir/usr/share/icons/hicolor/${size}x${size}/apps/chromium.png" - done - - install -Dm644 LICENSE "$pkgdir/usr/share/licenses/chromium/LICENSE" -} - -# vim:set ts=2 sw=2 et: Copied: chromium/repos/extra-x86_64/PKGBUILD (from rev 454793, chromium/trunk/PKGBUILD) =================================================================== --- PKGBUILD (rev 0) +++ PKGBUILD 2022-08-30 18:56:32 UTC (rev 454794) @@ -0,0 +1,279 @@ +# Maintainer: Evangelos Foutras <evange...@foutrelis.com> +# Contributor: Pierre Schmitz <pie...@archlinux.de> +# Contributor: Jan "heftig" Steffens <jan.steff...@gmail.com> +# Contributor: Daniel J Griffiths <ghost1...@archlinux.us> + +pkgname=chromium +pkgver=105.0.5195.52 +pkgrel=1 +_launcher_ver=8 +_gcc_patchset=1 +pkgdesc="A web browser built for speed, simplicity, and security" +arch=('x86_64') +url="https://www.chromium.org/Home" +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' 'git') +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 + fix-TFLite-build-on-linux-with-system-zlib.patch + enable-GlobalMediaControlsCastStartStop.patch + roll-src-third_party-ffmpeg.patch + angle-wayland-include-protocol.patch + use-oauth2-client-switches-as-default.patch) +sha256sums=('dc71b2be9c30c2a7a250b3dbfb26f9b0d1aa2df7335b53ed44a203ff69947c42' + '213e50f48b67feb4441078d50b0fd431df34323be15be97c55302d3fdac4483a' + 'f0c437c02cab7a6efc958f82fbb4ea35d5440f73d65731bad7c0dcaecb932121' + '5db1fae8a452774b5b177e493a2d1a435b980137b16ed74616d1fb86fe342ec7' + '779fb13f2494209d3a7f1f23a823e59b9dded601866d3ab095937a1a04e19ac6' + '30df59a9e2d95dcb720357ec4a83d9be51e59cc5551365da4c0073e68ccdec44' + 'cd0d9d2a1d6a522d47c3c0891dabe4ad72eabbebc0fe5642b9e22efa3d5ee572' + 'e393174d7695d0bafed69e868c5fbfecf07aa6969f3b64596d0bae8b067e1711') + +# 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=( + [brotli]=brotli + [dav1d]=dav1d + [ffmpeg]=ffmpeg + [flac]=flac + [fontconfig]=fontconfig + [freetype]=freetype2 + [harfbuzz-ng]=harfbuzz + [icu]=icu + [jsoncpp]=jsoncpp + [libaom]=aom + [libavif]=libavif + [libdrm]= + [libjpeg]=libjpeg + [libpng]=libpng + #[libvpx]=libvpx + [libwebp]=libwebp + [libxml]=libxml2 + [libxslt]=libxslt + [opus]=opus + [re2]=re2 + [snappy]=snappy + [woff2]=woff2 + [zlib]=minizip +) +_unwanted_bundled_libs=( + $(printf "%s\n" ${!_system_libs[@]} | sed 's/^libjpeg$/&_turbo/') +) +depends+=(${_system_libs[@]}) + +# Google API keys (see https://www.chromium.org/developers/how-tos/api-keys) +# Note: These are for Arch Linux use ONLY. For your own distribution, please +# get your own set of keys. +# +# Starting with Chromium 89 (2021-03-02) the OAuth2 credentials have been left +# out: https://archlinux.org/news/chromium-losing-sync-support-in-early-march/ +_google_api_key=AIzaSyDwr302FpOSkGRpLlUpPThNTDPbXcIn_FM + +prepare() { + cd 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/\<xmlMalloc\>/malloc/' -e 's/\<xmlFree\>/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 + patch -Np1 -i ../fix-TFLite-build-on-linux-with-system-zlib.patch + + # Revert kGlobalMediaControlsCastStartStop enabled by default + # https://crbug.com/1314342 + patch -Rp1 -F3 -i ../enable-GlobalMediaControlsCastStartStop.patch + + # Revert ffmpeg roll requiring new channel layout API support + # https://crbug.com/1325301 + patch -Rp1 -i ../roll-src-third_party-ffmpeg.patch + + # https://crbug.com/angleproject/7582 + patch -Np0 -i ../angle-wayland-include-protocol.patch + + # Fixes for building with libstdc++ instead of libc++ + patch -Np1 -i ../patches/chromium-103-VirtualCursor-std-layout.patch + patch -Np1 -i ../patches/chromium-105-Bitmap-include.patch + patch -Np1 -i ../patches/chromium-105-browser_finder-include.patch + patch -Np1 -i ../patches/chromium-105-AdjustMaskLayerGeometry-ceilf.patch + + # 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 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"' + 'clang_use_chrome_plugins=false' + '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 + 'treat_warnings_as_errors=false' + '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_hangout_services_extension=true' + 'enable_widevine=true' + 'enable_nacl=false' + "google_api_key=\"$_google_api_key\"" + ) + + if [[ -n ${_system_libs[icu]+set} ]]; then + _flags+=('icu_use_data_file=false') + fi + + # 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.unstripped +} + +package() { + cd chromium-launcher-$_launcher_ver + make PREFIX=/usr DESTDIR="$pkgdir" install + install -Dm644 LICENSE \ + "$pkgdir/usr/share/licenses/chromium/LICENSE.launcher" + + cd ../chromium-$pkgver + + install -D out/Release/chrome "$pkgdir/usr/lib/chromium/chromium" + install -D out/Release/chromedriver.unstripped "$pkgdir/usr/bin/chromedriver" + install -Dm4755 out/Release/chrome_sandbox "$pkgdir/usr/lib/chromium/chrome-sandbox" + + 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 '/<update_contact>/d' \ + -e '/<p>/N;/<p>\n.*\(We invite\|Chromium supports Vorbis\)/,/<\/p>/d' \ + -e '/^<?xml/,$p' \ + "$pkgdir/usr/share/metainfo/chromium.appdata.xml" + + local toplevel_files=( + chrome_100_percent.pak + chrome_200_percent.pak + chrome_crashpad_handler + resources.pak + v8_context_snapshot.bin + + # ANGLE + libEGL.so + libGLESv2.so + + # SwiftShader ICD + libvk_swiftshader.so + vk_swiftshader_icd.json + ) + + if [[ -z ${_system_libs[icu]+set} ]]; then + toplevel_files+=(icudtl.dat) + fi + + cp "${toplevel_files[@]/#/out/Release/}" "$pkgdir/usr/lib/chromium/" + install -Dm644 -t "$pkgdir/usr/lib/chromium/locales" out/Release/locales/*.pak + + for size in 24 48 64 128 256; do + install -Dm644 "chrome/app/theme/chromium/product_logo_$size.png" \ + "$pkgdir/usr/share/icons/hicolor/${size}x${size}/apps/chromium.png" + done + + for size in 16 32; do + install -Dm644 "chrome/app/theme/default_100_percent/chromium/product_logo_$size.png" \ + "$pkgdir/usr/share/icons/hicolor/${size}x${size}/apps/chromium.png" + done + + install -Dm644 LICENSE "$pkgdir/usr/share/licenses/chromium/LICENSE" +} + +# vim:set ts=2 sw=2 et: Copied: chromium/repos/extra-x86_64/angle-wayland-include-protocol.patch (from rev 454793, chromium/trunk/angle-wayland-include-protocol.patch) =================================================================== --- angle-wayland-include-protocol.patch (rev 0) +++ angle-wayland-include-protocol.patch 2022-08-30 18:56:32 UTC (rev 454794) @@ -0,0 +1,38 @@ +diff -upr third_party/angle.orig/BUILD.gn third_party/angle/BUILD.gn +--- third_party/angle.orig/BUILD.gn 2022-08-17 19:38:11.000000000 +0000 ++++ third_party/angle/BUILD.gn 2022-08-18 11:04:09.061751111 +0000 +@@ -489,6 +489,12 @@ config("angle_vulkan_wayland_config") { + if (angle_enable_vulkan && angle_use_wayland && + defined(vulkan_wayland_include_dirs)) { + include_dirs = vulkan_wayland_include_dirs ++ } else if (angle_enable_vulkan && angle_use_wayland) { ++ include_dirs = [ ++ "$wayland_gn_dir/src/src", ++ "$wayland_gn_dir/include/src", ++ "$wayland_gn_dir/include/protocol", ++ ] + } + } + +@@ -1073,6 +1079,7 @@ if (angle_use_wayland) { + include_dirs = [ + "$wayland_dir/egl", + "$wayland_dir/src", ++ "$wayland_gn_dir/include/protocol", + ] + } + +diff -upr third_party/angle.orig/src/third_party/volk/BUILD.gn third_party/angle/src/third_party/volk/BUILD.gn +--- third_party/angle.orig/src/third_party/volk/BUILD.gn 2022-08-17 19:38:12.000000000 +0000 ++++ third_party/angle/src/third_party/volk/BUILD.gn 2022-08-18 11:04:36.499828006 +0000 +@@ -21,6 +21,9 @@ source_set("volk") { + configs += [ "$angle_root:angle_no_cfi_icall" ] + public_deps = [ "$angle_vulkan_headers_dir:vulkan_headers" ] + if (angle_use_wayland) { +- include_dirs = [ "$wayland_dir/src" ] ++ include_dirs = [ ++ "$wayland_dir/src", ++ "$wayland_gn_dir/include/protocol", ++ ] + } + } Deleted: chromium-tflite-system-zlib.patch =================================================================== --- chromium-tflite-system-zlib.patch 2022-08-30 18:56:24 UTC (rev 454793) +++ chromium-tflite-system-zlib.patch 2022-08-30 18:56:32 UTC (rev 454794) @@ -1,70 +0,0 @@ ---- a/third_party/tflite_support/src/tensorflow_lite_support/metadata/cc/metadata_extractor.cc -+++ b/third_party/tflite_support/src/tensorflow_lite_support/metadata/cc/metadata_extractor.cc -@@ -21,8 +21,8 @@ limitations under the License. - #include "absl/status/status.h" // from @com_google_absl - #include "absl/strings/str_format.h" // from @com_google_absl - #include "absl/strings/string_view.h" // from @com_google_absl --#include "contrib/minizip/ioapi.h" --#include "contrib/minizip/unzip.h" -+#include "third_party/zlib/contrib/minizip/ioapi.h" -+#include "third_party/zlib/contrib/minizip/unzip.h" - #include "flatbuffers/flatbuffers.h" // from @flatbuffers - #include "tensorflow/lite/schema/schema_generated.h" - #include "tensorflow_lite_support/cc/common.h" ---- a/third_party/tflite_support/src/tensorflow_lite_support/metadata/cc/metadata_populator.cc -+++ b/third_party/tflite_support/src/tensorflow_lite_support/metadata/cc/metadata_populator.cc -@@ -19,8 +19,8 @@ limitations under the License. - #include <cstring> - #include <functional> - --#include "contrib/minizip/ioapi.h" --#include "contrib/minizip/zip.h" -+#include "third_party/zlib/contrib/minizip/ioapi.h" -+#include "third_party/zlib/contrib/minizip/zip.h" - #include "flatbuffers/flatbuffers.h" // from @flatbuffers - #include "tensorflow/lite/schema/schema_generated.h" - #include "tensorflow_lite_support/cc/common.h" ---- a/third_party/tflite_support/src/tensorflow_lite_support/metadata/cc/utils/zip_readonly_mem_file.cc -+++ b/third_party/tflite_support/src/tensorflow_lite_support/metadata/cc/utils/zip_readonly_mem_file.cc -@@ -19,7 +19,7 @@ limitations under the License. - #include <cstdio> - - #include "absl/strings/string_view.h" // from @com_google_absl --#include "contrib/minizip/ioapi.h" -+#include "third_party/zlib/contrib/minizip/ioapi.h" - - namespace tflite { - namespace metadata { ---- a/third_party/tflite_support/src/tensorflow_lite_support/metadata/cc/utils/zip_readonly_mem_file.h -+++ b/third_party/tflite_support/src/tensorflow_lite_support/metadata/cc/utils/zip_readonly_mem_file.h -@@ -19,7 +19,7 @@ limitations under the License. - #include <cstdlib> - - #include "absl/strings/string_view.h" // from @com_google_absl --#include "contrib/minizip/ioapi.h" -+#include "third_party/zlib/contrib/minizip/ioapi.h" - - namespace tflite { - namespace metadata { ---- a/third_party/tflite_support/src/tensorflow_lite_support/metadata/cc/utils/zip_writable_mem_file.cc -+++ b/third_party/tflite_support/src/tensorflow_lite_support/metadata/cc/utils/zip_writable_mem_file.cc -@@ -19,7 +19,7 @@ limitations under the License. - #include <cstdio> - - #include "absl/strings/string_view.h" // from @com_google_absl --#include "contrib/minizip/ioapi.h" -+#include "third_party/zlib/contrib/minizip/ioapi.h" - - namespace tflite { - namespace metadata { ---- a/third_party/tflite_support/src/tensorflow_lite_support/metadata/cc/utils/zip_writable_mem_file.h -+++ b/third_party/tflite_support/src/tensorflow_lite_support/metadata/cc/utils/zip_writable_mem_file.h -@@ -19,7 +19,7 @@ limitations under the License. - #include <cstdlib> - - #include "absl/strings/string_view.h" // from @com_google_absl --#include "contrib/minizip/ioapi.h" -+#include "third_party/zlib/contrib/minizip/ioapi.h" - - namespace tflite { - namespace metadata { Deleted: enable-GlobalMediaControlsCastStartStop.patch =================================================================== --- enable-GlobalMediaControlsCastStartStop.patch 2022-08-30 18:56:24 UTC (rev 454793) +++ enable-GlobalMediaControlsCastStartStop.patch 2022-08-30 18:56:32 UTC (rev 454794) @@ -1,32 +0,0 @@ -From b58f0f2725a8c1a8a131f9984b5fd53b54119dba Mon Sep 17 00:00:00 2001 -From: Muyao Xu <muya...@google.com> -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 <taku...@chromium.org> -Commit-Queue: Muyao Xu <muya...@google.com> -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", Copied: chromium/repos/extra-x86_64/enable-GlobalMediaControlsCastStartStop.patch (from rev 454793, chromium/trunk/enable-GlobalMediaControlsCastStartStop.patch) =================================================================== --- enable-GlobalMediaControlsCastStartStop.patch (rev 0) +++ enable-GlobalMediaControlsCastStartStop.patch 2022-08-30 18:56:32 UTC (rev 454794) @@ -0,0 +1,32 @@ +From b58f0f2725a8c1a8a131f9984b5fd53b54119dba Mon Sep 17 00:00:00 2001 +From: Muyao Xu <muya...@google.com> +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 <taku...@chromium.org> +Commit-Queue: Muyao Xu <muya...@google.com> +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", Copied: chromium/repos/extra-x86_64/fix-TFLite-build-on-linux-with-system-zlib.patch (from rev 454793, chromium/trunk/fix-TFLite-build-on-linux-with-system-zlib.patch) =================================================================== --- fix-TFLite-build-on-linux-with-system-zlib.patch (rev 0) +++ fix-TFLite-build-on-linux-with-system-zlib.patch 2022-08-30 18:56:32 UTC (rev 454794) @@ -0,0 +1,291 @@ +From ae0f9adb7e14c0d19ca695ef6ad40b321a8cb64c Mon Sep 17 00:00:00 2001 +From: Andres Salomon <dilin...@queued.net> +Date: Mon, 8 Aug 2022 23:01:53 +0000 +Subject: [PATCH] Fix TFLite build errors on linux when using the system zlib + +The commit a3be9805c1601d3fabe1e5adb6b9199c033aa2c5 updated TFLite, +which included the new zip_*_mem_file.* files that include minizip's +ioapi.h. To support that, it also declared that tflite_support depends +on minizip (in third_party/tflite_support/BUILD.gn). However, that's not +enough, and results in a build error when building using the stub linux +zlib build scripts. + +Other places that depend on minizip use a longer path to its header +files. For example, chrome/chrome_cleaner/zip_archiver/'s test_support +depends on minizip, and +chrome/chrome_cleaner/zip_archiver/target/zip_archiver_impl.cc +includes "third_party/zlib/contrib/minizip/ioapi.h". + +The new tensorflow stuff should do the same, instead of just including +"contrib/minizip/ioapi.h". This patch fixes that, as well as other +places where ioapi.h or zip.h/unzip.h are included without a fuller +path. + +Note: if you prefer to not modify the tflite code, let me know and I +can instead do a change that adds third_party/zlib as an include path +for minizip. + +R=mcro...@chromium.org, robertog...@chromium.org, se...@chromium.org, thes...@chromium.org + +Bug: 1348787 +Change-Id: I922d18b3d1c0e459437624fd248c21afc1be6bb8 +Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/3797828 +Commit-Queue: Andres Salomon <dilin...@queued.net> +Auto-Submit: Andres Salomon <dilin...@queued.net> +Reviewed-by: Michael Crouse <mcro...@chromium.org> +Cr-Commit-Position: refs/heads/main@{#1032774} +--- + third_party/tflite_support/README.chromium | 2 + + ...-errors-on-linux-when-using-the-syst.patch | 129 ++++++++++++++++++ + .../metadata/cc/metadata_extractor.cc | 4 +- + .../metadata/cc/metadata_populator.cc | 4 +- + .../cc/utils/zip_readonly_mem_file.cc | 2 +- + .../metadata/cc/utils/zip_readonly_mem_file.h | 2 +- + .../cc/utils/zip_writable_mem_file.cc | 2 +- + .../metadata/cc/utils/zip_writable_mem_file.h | 2 +- + 8 files changed, 139 insertions(+), 8 deletions(-) + create mode 100644 third_party/tflite_support/patches/0010-Fix-TFLite-build-errors-on-linux-when-using-the-syst.patch + +diff --git a/third_party/tflite_support/README.chromium b/third_party/tflite_support/README.chromium +index cfaf220adb..91f4baf82b 100644 +--- a/third_party/tflite_support/README.chromium ++++ b/third_party/tflite_support/README.chromium +@@ -36,6 +36,8 @@ is a no-op in chromium builds and upsets clang. + * This patch intentionally does not apply because it was made with + `--irreversible-delete` because it is deleting a large .tflite file causing + the chromium-presubmit bot to fail. ++10) Fix minizip path inclusion. Upstream uses contrib/minizip/, but chromium ++uses third_party/zlib/contrib/minizip/. + + Update Process (internal: http://shortn/_nwz8liqimy): + 1) Run these commands: +diff --git a/third_party/tflite_support/patches/0010-Fix-TFLite-build-errors-on-linux-when-using-the-syst.patch b/third_party/tflite_support/patches/0010-Fix-TFLite-build-errors-on-linux-when-using-the-syst.patch +new file mode 100644 +index 0000000000..34acf277fc +--- /dev/null ++++ b/third_party/tflite_support/patches/0010-Fix-TFLite-build-errors-on-linux-when-using-the-syst.patch +@@ -0,0 +1,129 @@ ++From 12da2fa8f2d779e2fc14f48de73af79e9040c141 Mon Sep 17 00:00:00 2001 ++From: Andres Salomon <dilin...@queued.net> ++Date: Sun, 31 Jul 2022 19:07:24 -0400 ++Subject: [PATCH] Fix TFLite build errors on linux when using the system zlib ++ ++The commit a3be9805c1601d3fabe1e5adb6b9199c033aa2c5 updated TFLite, ++which included the new zip_*_mem_file.* files that include minizip's ++ioapi.h. To support that, it also declared that tflite_support depends ++on minizip (in third_party/tflite_support/BUILD.gn). However, that's not ++enough, and results in a build error when building using the stub linux ++zlib build scripts. ++ ++Other places that depend on minizip use a longer path to its header ++files. For example, chrome/chrome_cleaner/zip_archiver/'s test_support ++depends on minizip, and ++chrome/chrome_cleaner/zip_archiver/target/zip_archiver_impl.cc ++includes "third_party/zlib/contrib/minizip/ioapi.h". ++ ++The new tensorflow stuff should do the same, instead of just including ++"contrib/minizip/ioapi.h". This patch fixes that, as well as other ++places where ioapi.h or zip.h/unzip.h are included without a fuller ++path. ++--- ++ .../tensorflow_lite_support/metadata/cc/metadata_extractor.cc | 4 ++-- ++ .../tensorflow_lite_support/metadata/cc/metadata_populator.cc | 4 ++-- ++ .../metadata/cc/utils/zip_readonly_mem_file.cc | 2 +- ++ .../metadata/cc/utils/zip_readonly_mem_file.h | 2 +- ++ .../metadata/cc/utils/zip_writable_mem_file.cc | 2 +- ++ .../metadata/cc/utils/zip_writable_mem_file.h | 2 +- ++ 6 files changed, 8 insertions(+), 8 deletions(-) ++ ++diff --git a/third_party/tflite_support/src/tensorflow_lite_support/metadata/cc/metadata_extractor.cc b/third_party/tflite_support/src/tensorflow_lite_support/metadata/cc/metadata_extractor.cc ++index 2a72338741626..62d0910182877 100644 ++--- a/third_party/tflite_support/src/tensorflow_lite_support/metadata/cc/metadata_extractor.cc +++++ b/third_party/tflite_support/src/tensorflow_lite_support/metadata/cc/metadata_extractor.cc ++@@ -21,14 +21,14 @@ limitations under the License. ++ #include "absl/status/status.h" // from @com_google_absl ++ #include "absl/strings/str_format.h" // from @com_google_absl ++ #include "absl/strings/string_view.h" // from @com_google_absl ++-#include "contrib/minizip/ioapi.h" ++-#include "contrib/minizip/unzip.h" ++ #include "flatbuffers/flatbuffers.h" // from @flatbuffers ++ #include "tensorflow/lite/schema/schema_generated.h" ++ #include "tensorflow_lite_support/cc/common.h" ++ #include "tensorflow_lite_support/cc/port/status_macros.h" ++ #include "tensorflow_lite_support/metadata/cc/utils/zip_readonly_mem_file.h" ++ #include "tensorflow_lite_support/metadata/metadata_schema_generated.h" +++#include "third_party/zlib/contrib/minizip/ioapi.h" +++#include "third_party/zlib/contrib/minizip/unzip.h" ++ ++ namespace tflite { ++ namespace metadata { ++diff --git a/third_party/tflite_support/src/tensorflow_lite_support/metadata/cc/metadata_populator.cc b/third_party/tflite_support/src/tensorflow_lite_support/metadata/cc/metadata_populator.cc ++index 299ade3e95d54..8e13fa63dafbc 100644 ++--- a/third_party/tflite_support/src/tensorflow_lite_support/metadata/cc/metadata_populator.cc +++++ b/third_party/tflite_support/src/tensorflow_lite_support/metadata/cc/metadata_populator.cc ++@@ -19,8 +19,6 @@ limitations under the License. ++ #include <cstring> ++ #include <functional> ++ ++-#include "contrib/minizip/ioapi.h" ++-#include "contrib/minizip/zip.h" ++ #include "flatbuffers/flatbuffers.h" // from @flatbuffers ++ #include "tensorflow/lite/schema/schema_generated.h" ++ #include "tensorflow_lite_support/cc/common.h" ++@@ -28,6 +26,8 @@ limitations under the License. ++ #include "tensorflow_lite_support/cc/port/statusor.h" ++ #include "tensorflow_lite_support/metadata/cc/utils/zip_writable_mem_file.h" ++ #include "tensorflow_lite_support/metadata/metadata_schema_generated.h" +++#include "third_party/zlib/contrib/minizip/ioapi.h" +++#include "third_party/zlib/contrib/minizip/zip.h" ++ ++ namespace tflite { ++ namespace metadata { ++diff --git a/third_party/tflite_support/src/tensorflow_lite_support/metadata/cc/utils/zip_readonly_mem_file.cc b/third_party/tflite_support/src/tensorflow_lite_support/metadata/cc/utils/zip_readonly_mem_file.cc ++index 392b6b411fe03..525ae4a2b45bd 100644 ++--- a/third_party/tflite_support/src/tensorflow_lite_support/metadata/cc/utils/zip_readonly_mem_file.cc +++++ b/third_party/tflite_support/src/tensorflow_lite_support/metadata/cc/utils/zip_readonly_mem_file.cc ++@@ -19,7 +19,7 @@ limitations under the License. ++ #include <cstdio> ++ ++ #include "absl/strings/string_view.h" // from @com_google_absl ++-#include "contrib/minizip/ioapi.h" +++#include "third_party/zlib/contrib/minizip/ioapi.h" ++ ++ namespace tflite { ++ namespace metadata { ++diff --git a/third_party/tflite_support/src/tensorflow_lite_support/metadata/cc/utils/zip_readonly_mem_file.h b/third_party/tflite_support/src/tensorflow_lite_support/metadata/cc/utils/zip_readonly_mem_file.h ++index a1799ff509de5..72413a0a56252 100644 ++--- a/third_party/tflite_support/src/tensorflow_lite_support/metadata/cc/utils/zip_readonly_mem_file.h +++++ b/third_party/tflite_support/src/tensorflow_lite_support/metadata/cc/utils/zip_readonly_mem_file.h ++@@ -19,7 +19,7 @@ limitations under the License. ++ #include <cstdlib> ++ ++ #include "absl/strings/string_view.h" // from @com_google_absl ++-#include "contrib/minizip/ioapi.h" +++#include "third_party/zlib/contrib/minizip/ioapi.h" ++ ++ namespace tflite { ++ namespace metadata { ++diff --git a/third_party/tflite_support/src/tensorflow_lite_support/metadata/cc/utils/zip_writable_mem_file.cc b/third_party/tflite_support/src/tensorflow_lite_support/metadata/cc/utils/zip_writable_mem_file.cc ++index 38ad17ad8935c..3ba91b5e22890 100644 ++--- a/third_party/tflite_support/src/tensorflow_lite_support/metadata/cc/utils/zip_writable_mem_file.cc +++++ b/third_party/tflite_support/src/tensorflow_lite_support/metadata/cc/utils/zip_writable_mem_file.cc ++@@ -19,7 +19,7 @@ limitations under the License. ++ #include <cstdio> ++ ++ #include "absl/strings/string_view.h" // from @com_google_absl ++-#include "contrib/minizip/ioapi.h" +++#include "third_party/zlib/contrib/minizip/ioapi.h" ++ ++ namespace tflite { ++ namespace metadata { ++diff --git a/third_party/tflite_support/src/tensorflow_lite_support/metadata/cc/utils/zip_writable_mem_file.h b/third_party/tflite_support/src/tensorflow_lite_support/metadata/cc/utils/zip_writable_mem_file.h ++index 30e42fdb72a31..3d329925df756 100644 ++--- a/third_party/tflite_support/src/tensorflow_lite_support/metadata/cc/utils/zip_writable_mem_file.h +++++ b/third_party/tflite_support/src/tensorflow_lite_support/metadata/cc/utils/zip_writable_mem_file.h ++@@ -19,7 +19,7 @@ limitations under the License. ++ #include <cstdlib> ++ ++ #include "absl/strings/string_view.h" // from @com_google_absl ++-#include "contrib/minizip/ioapi.h" +++#include "third_party/zlib/contrib/minizip/ioapi.h" ++ ++ namespace tflite { ++ namespace metadata { ++-- ++2.30.2 ++ +diff --git a/third_party/tflite_support/src/tensorflow_lite_support/metadata/cc/metadata_extractor.cc b/third_party/tflite_support/src/tensorflow_lite_support/metadata/cc/metadata_extractor.cc +index 2a72338741..62d0910182 100644 +--- a/third_party/tflite_support/src/tensorflow_lite_support/metadata/cc/metadata_extractor.cc ++++ b/third_party/tflite_support/src/tensorflow_lite_support/metadata/cc/metadata_extractor.cc +@@ -21,14 +21,14 @@ limitations under the License. + #include "absl/status/status.h" // from @com_google_absl + #include "absl/strings/str_format.h" // from @com_google_absl + #include "absl/strings/string_view.h" // from @com_google_absl +-#include "contrib/minizip/ioapi.h" +-#include "contrib/minizip/unzip.h" + #include "flatbuffers/flatbuffers.h" // from @flatbuffers + #include "tensorflow/lite/schema/schema_generated.h" + #include "tensorflow_lite_support/cc/common.h" + #include "tensorflow_lite_support/cc/port/status_macros.h" + #include "tensorflow_lite_support/metadata/cc/utils/zip_readonly_mem_file.h" + #include "tensorflow_lite_support/metadata/metadata_schema_generated.h" ++#include "third_party/zlib/contrib/minizip/ioapi.h" ++#include "third_party/zlib/contrib/minizip/unzip.h" + + namespace tflite { + namespace metadata { +diff --git a/third_party/tflite_support/src/tensorflow_lite_support/metadata/cc/metadata_populator.cc b/third_party/tflite_support/src/tensorflow_lite_support/metadata/cc/metadata_populator.cc +index 299ade3e95..8e13fa63da 100644 +--- a/third_party/tflite_support/src/tensorflow_lite_support/metadata/cc/metadata_populator.cc ++++ b/third_party/tflite_support/src/tensorflow_lite_support/metadata/cc/metadata_populator.cc +@@ -19,8 +19,6 @@ limitations under the License. + #include <cstring> + #include <functional> + +-#include "contrib/minizip/ioapi.h" +-#include "contrib/minizip/zip.h" + #include "flatbuffers/flatbuffers.h" // from @flatbuffers + #include "tensorflow/lite/schema/schema_generated.h" + #include "tensorflow_lite_support/cc/common.h" +@@ -28,6 +26,8 @@ limitations under the License. + #include "tensorflow_lite_support/cc/port/statusor.h" + #include "tensorflow_lite_support/metadata/cc/utils/zip_writable_mem_file.h" + #include "tensorflow_lite_support/metadata/metadata_schema_generated.h" ++#include "third_party/zlib/contrib/minizip/ioapi.h" ++#include "third_party/zlib/contrib/minizip/zip.h" + + namespace tflite { + namespace metadata { +diff --git a/third_party/tflite_support/src/tensorflow_lite_support/metadata/cc/utils/zip_readonly_mem_file.cc b/third_party/tflite_support/src/tensorflow_lite_support/metadata/cc/utils/zip_readonly_mem_file.cc +index 392b6b411f..525ae4a2b4 100644 +--- a/third_party/tflite_support/src/tensorflow_lite_support/metadata/cc/utils/zip_readonly_mem_file.cc ++++ b/third_party/tflite_support/src/tensorflow_lite_support/metadata/cc/utils/zip_readonly_mem_file.cc +@@ -19,7 +19,7 @@ limitations under the License. + #include <cstdio> + + #include "absl/strings/string_view.h" // from @com_google_absl +-#include "contrib/minizip/ioapi.h" ++#include "third_party/zlib/contrib/minizip/ioapi.h" + + namespace tflite { + namespace metadata { +diff --git a/third_party/tflite_support/src/tensorflow_lite_support/metadata/cc/utils/zip_readonly_mem_file.h b/third_party/tflite_support/src/tensorflow_lite_support/metadata/cc/utils/zip_readonly_mem_file.h +index a1799ff509..72413a0a56 100644 +--- a/third_party/tflite_support/src/tensorflow_lite_support/metadata/cc/utils/zip_readonly_mem_file.h ++++ b/third_party/tflite_support/src/tensorflow_lite_support/metadata/cc/utils/zip_readonly_mem_file.h +@@ -19,7 +19,7 @@ limitations under the License. + #include <cstdlib> + + #include "absl/strings/string_view.h" // from @com_google_absl +-#include "contrib/minizip/ioapi.h" ++#include "third_party/zlib/contrib/minizip/ioapi.h" + + namespace tflite { + namespace metadata { +diff --git a/third_party/tflite_support/src/tensorflow_lite_support/metadata/cc/utils/zip_writable_mem_file.cc b/third_party/tflite_support/src/tensorflow_lite_support/metadata/cc/utils/zip_writable_mem_file.cc +index 38ad17ad89..3ba91b5e22 100644 +--- a/third_party/tflite_support/src/tensorflow_lite_support/metadata/cc/utils/zip_writable_mem_file.cc ++++ b/third_party/tflite_support/src/tensorflow_lite_support/metadata/cc/utils/zip_writable_mem_file.cc +@@ -19,7 +19,7 @@ limitations under the License. + #include <cstdio> + + #include "absl/strings/string_view.h" // from @com_google_absl +-#include "contrib/minizip/ioapi.h" ++#include "third_party/zlib/contrib/minizip/ioapi.h" + + namespace tflite { + namespace metadata { +diff --git a/third_party/tflite_support/src/tensorflow_lite_support/metadata/cc/utils/zip_writable_mem_file.h b/third_party/tflite_support/src/tensorflow_lite_support/metadata/cc/utils/zip_writable_mem_file.h +index 30e42fdb72..3d329925df 100644 +--- a/third_party/tflite_support/src/tensorflow_lite_support/metadata/cc/utils/zip_writable_mem_file.h ++++ b/third_party/tflite_support/src/tensorflow_lite_support/metadata/cc/utils/zip_writable_mem_file.h +@@ -19,7 +19,7 @@ limitations under the License. + #include <cstdlib> + + #include "absl/strings/string_view.h" // from @com_google_absl +-#include "contrib/minizip/ioapi.h" ++#include "third_party/zlib/contrib/minizip/ioapi.h" + + namespace tflite { + namespace metadata { Deleted: remove-no-opaque-pointers-flag.patch =================================================================== --- remove-no-opaque-pointers-flag.patch 2022-08-30 18:56:24 UTC (rev 454793) +++ remove-no-opaque-pointers-flag.patch 2022-08-30 18:56:32 UTC (rev 454794) @@ -1,18 +0,0 @@ ---- chromium-104.0.5112.57/build/config/compiler/BUILD.gn.orig 2022-07-26 08:11:54.192788877 +0000 -+++ chromium-104.0.5112.57/build/config/compiler/BUILD.gn 2022-07-26 08:12:10.019328155 +0000 -@@ -1540,15 +1540,6 @@ config("default_warnings") { - cflags += [ "-Wno-unqualified-std-cast-call" ] - } - -- if (!is_nacl && !(is_chromeos || -- default_toolchain == "//build/toolchain/cros:target")) { -- # TODO(https://crbug.com/1322823): Remove flags once potential miscompile is investigated. -- cflags += [ -- "-Xclang", -- "-no-opaque-pointers", -- ] -- } -- - if (is_fuchsia) { - # TODO(https://bugs.chromium.org/p/fuchsia/issues/detail?id=77383) - cflags += [ "-Wno-deprecated-copy" ] Deleted: roll-src-third_party-ffmpeg.patch =================================================================== --- roll-src-third_party-ffmpeg.patch 2022-08-30 18:56:24 UTC (rev 454793) +++ roll-src-third_party-ffmpeg.patch 2022-08-30 18:56:32 UTC (rev 454794) @@ -1,333 +0,0 @@ -From 6e554a30893150793c2638e3689cf208ffc8e375 Mon Sep 17 00:00:00 2001 -From: Dale Curtis <dalecur...@chromium.org> -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 <dalecur...@chromium.org> -Reviewed-by: Dan Sanders <sande...@chromium.org> -Commit-Queue: Dale Curtis <dalecur...@chromium.org> -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<FFmpegDecodingLoop>(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<AudioTimestampHelper>(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<std::unique_ptr<AVFrame, ScopedPtrAVFreeFrame>>* 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<std::unique_ptr<AudioBus>> 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<int32_t*>(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."; Copied: chromium/repos/extra-x86_64/roll-src-third_party-ffmpeg.patch (from rev 454793, chromium/trunk/roll-src-third_party-ffmpeg.patch) =================================================================== --- roll-src-third_party-ffmpeg.patch (rev 0) +++ roll-src-third_party-ffmpeg.patch 2022-08-30 18:56:32 UTC (rev 454794) @@ -0,0 +1,333 @@ +From 6e554a30893150793c2638e3689cf208ffc8e375 Mon Sep 17 00:00:00 2001 +From: Dale Curtis <dalecur...@chromium.org> +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 <dalecur...@chromium.org> +Reviewed-by: Dan Sanders <sande...@chromium.org> +Commit-Queue: Dale Curtis <dalecur...@chromium.org> +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<FFmpegDecodingLoop>(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<AudioTimestampHelper>(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<std::unique_ptr<AVFrame, ScopedPtrAVFreeFrame>>* 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<std::unique_ptr<AudioBus>> 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<int32_t*>(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."; Deleted: use-oauth2-client-switches-as-default.patch =================================================================== --- use-oauth2-client-switches-as-default.patch 2022-08-30 18:56:24 UTC (rev 454793) +++ use-oauth2-client-switches-as-default.patch 2022-08-30 18:56:32 UTC (rev 454794) @@ -1,17 +0,0 @@ -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 Copied: chromium/repos/extra-x86_64/use-oauth2-client-switches-as-default.patch (from rev 454793, chromium/trunk/use-oauth2-client-switches-as-default.patch) =================================================================== --- use-oauth2-client-switches-as-default.patch (rev 0) +++ use-oauth2-client-switches-as-default.patch 2022-08-30 18:56:32 UTC (rev 454794) @@ -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 Deleted: x11-ozone-fix-X11-screensaver-suspension.patch =================================================================== --- x11-ozone-fix-X11-screensaver-suspension.patch 2022-08-30 18:56:24 UTC (rev 454793) +++ x11-ozone-fix-X11-screensaver-suspension.patch 2022-08-30 18:56:32 UTC (rev 454794) @@ -1,490 +0,0 @@ -From 8c1ebea5f601b0b5247535dcdfd01755f3e6e1a6 Mon Sep 17 00:00:00 2001 -From: Andrew Wolfers <aswolf...@chromium.org> -Date: Tue, 19 Jul 2022 15:01:25 +0000 -Subject: [PATCH] [x11][ozone] Fix X11 screensaver suspension. - -X11 screensaver suspension was broken by https://crrev.com/c/3507472, -in which usage patterns were migrated to a non-stacking paradigm. - -"Non-stacking" screensaver suspension describes an overriding behavior, -such that the last suspending or un-suspending call defines the current -state. Conversely, a "stacking" screensaver suspension paradigm allows -for parallel suspension, such that suspending calls are expected to be -matched by an equal number of un-suspending calls. - -Documentation for `PlatformScreen::SetScreenSaverSuspended` (inherited -by `X11ScreenOzone`) explains that it should be used in a non-stacking -manner [1], which contradicts the child class's underlying -implementation [2]. - -> If XScreenSaverSuspend is called multiple times with suspend set to -> 'True', it must be called an equal number of times with suspend set -> to 'False' in order for the screensaver timer to be restarted. - -This change updates the documentation/API of the `PlatformScreen` -parent class to correctly describe the stacking behavior of child class -`X11ScreenOzone`. This change also updates the implementation of -`WaylandScreen` to a stacking version. Lastly, this change updates the -call sites of `PlatformScreen` according to the API change. - -[1] https://crsrc.org/c/ui/ozone/public/platform_screen.h;l=96 -[2] https://linux.die.net/man/3/xscreensaverunsetattributes - -Bug: b:193670013 -Bug: b:196213351 -Bug: 1329573 -Bug: 1339361 -Change-Id: I60975c8da9f86a0f26f3c32cf49c4a7eeeea6a12 -Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/3759067 -Commit-Queue: Andrew Wolfers <aswolf...@chromium.org> -Reviewed-by: Thomas Anderson <thomasander...@chromium.org> -Reviewed-by: Scott Violet <s...@chromium.org> -Cr-Commit-Position: refs/heads/main@{#1025717} - -(cherry picked from commit e61f08f8dbf1ec7cead427f3c497934e9d0db35f) ---- - ui/aura/screen_ozone.cc | 14 ++++++-- - ui/aura/screen_ozone.h | 29 ++++++++++++---- - ui/base/x/x11_util.h | 4 ++- - ui/display/screen.cc | 21 ++---------- - ui/display/screen.h | 34 ++++++------------- - .../platform/wayland/host/wayland_screen.cc | 31 +++++++++++++++++ - .../platform/wayland/host/wayland_screen.h | 30 +++++++++++++++- - ui/ozone/platform/x11/x11_screen_ozone.cc | 27 +++++++++++++-- - ui/ozone/platform/x11/x11_screen_ozone.h | 19 ++++++++++- - ui/ozone/public/platform_screen.cc | 8 +++-- - ui/ozone/public/platform_screen.h | 26 +++++++++++--- - 11 files changed, 182 insertions(+), 61 deletions(-) - -diff --git a/ui/aura/screen_ozone.cc b/ui/aura/screen_ozone.cc -index a78a6a48f1..09f62dc982 100644 ---- a/ui/aura/screen_ozone.cc -+++ b/ui/aura/screen_ozone.cc -@@ -4,6 +4,8 @@ - - #include "ui/aura/screen_ozone.h" - -+#include <memory> -+ - #include "ui/aura/client/screen_position_client.h" - #include "ui/aura/window.h" - #include "ui/aura/window_tree_host.h" -@@ -108,8 +110,16 @@ display::Display ScreenOzone::GetPrimaryDisplay() const { - } - - #if BUILDFLAG(IS_CHROMEOS_LACROS) || BUILDFLAG(IS_LINUX) --bool ScreenOzone::SetScreenSaverSuspended(bool suspend) { -- return platform_screen_->SetScreenSaverSuspended(suspend); -+ScreenOzone::ScreenSaverSuspenderOzone::ScreenSaverSuspenderOzone( -+ std::unique_ptr<ui::PlatformScreen::PlatformScreenSaverSuspender> suspender) -+ : suspender_(std::move(suspender)) {} -+ -+ScreenOzone::ScreenSaverSuspenderOzone::~ScreenSaverSuspenderOzone() = default; -+ -+std::unique_ptr<display::Screen::ScreenSaverSuspender> -+ScreenOzone::SuspendScreenSaver() { -+ return std::make_unique<ScreenSaverSuspenderOzone>( -+ platform_screen_->SuspendScreenSaver()); - } - #endif // BUILDFLAG(IS_CHROMEOS_LACROS) || BUILDFLAG(IS_LINUX) - -diff --git a/ui/aura/screen_ozone.h b/ui/aura/screen_ozone.h -index 2970a0e0e7..d033abf366 100644 ---- a/ui/aura/screen_ozone.h -+++ b/ui/aura/screen_ozone.h -@@ -11,10 +11,7 @@ - #include "build/chromeos_buildflags.h" - #include "ui/aura/aura_export.h" - #include "ui/display/screen.h" -- --namespace ui { --class PlatformScreen; --} -+#include "ui/ozone/public/platform_screen.h" - - namespace aura { - -@@ -48,6 +45,10 @@ class AURA_EXPORT ScreenOzone : public display::Screen { - display::Display GetDisplayMatching( - const gfx::Rect& match_rect) const override; - display::Display GetPrimaryDisplay() const override; -+#if BUILDFLAG(IS_CHROMEOS_LACROS) || BUILDFLAG(IS_LINUX) -+ std::unique_ptr<display::Screen::ScreenSaverSuspender> SuspendScreenSaver() -+ override; -+#endif // BUILDFLAG(IS_CHROMEOS_LACROS) || BUILDFLAG(IS_LINUX) - bool IsScreenSaverActive() const override; - base::TimeDelta CalculateIdleTime() const override; - void AddObserver(display::DisplayObserver* observer) override; -@@ -65,11 +66,27 @@ class AURA_EXPORT ScreenOzone : public display::Screen { - protected: - ui::PlatformScreen* platform_screen() { return platform_screen_.get(); } - -+ private: - #if BUILDFLAG(IS_CHROMEOS_LACROS) || BUILDFLAG(IS_LINUX) -- bool SetScreenSaverSuspended(bool suspend) override; -+ class ScreenSaverSuspenderOzone -+ : public display::Screen::ScreenSaverSuspender { -+ public: -+ explicit ScreenSaverSuspenderOzone( -+ std::unique_ptr<ui::PlatformScreen::PlatformScreenSaverSuspender> -+ suspender); -+ -+ ScreenSaverSuspenderOzone(const ScreenSaverSuspenderOzone&) = delete; -+ ScreenSaverSuspenderOzone& operator=(const ScreenSaverSuspenderOzone&) = -+ delete; -+ -+ ~ScreenSaverSuspenderOzone() override; -+ -+ private: -+ std::unique_ptr<ui::PlatformScreen::PlatformScreenSaverSuspender> -+ suspender_; -+ }; - #endif // BUILDFLAG(IS_CHROMEOS_LACROS) || BUILDFLAG(IS_LINUX) - -- private: - gfx::AcceleratedWidget GetAcceleratedWidgetForWindow( - aura::Window* window) const; - -diff --git a/ui/base/x/x11_util.h b/ui/base/x/x11_util.h -index bf36efe170..0692571582 100644 ---- a/ui/base/x/x11_util.h -+++ b/ui/base/x/x11_util.h -@@ -337,7 +337,9 @@ COMPONENT_EXPORT(UI_BASE_X) bool IsCompositingManagerPresent(); - COMPONENT_EXPORT(UI_BASE_X) bool IsX11WindowFullScreen(x11::Window window); - - // Suspends or resumes the X screen saver, and returns whether the operation was --// successful. Must be called on the UI thread. -+// successful. Must be called on the UI thread. If called multiple times with -+// |suspend| set to true, the screen saver is not un-suspended until this method -+// is called an equal number of times with |suspend| set to false. - COMPONENT_EXPORT(UI_BASE_X) bool SuspendX11ScreenSaver(bool suspend); - - // Returns true if the window manager supports the given hint. -diff --git a/ui/display/screen.cc b/ui/display/screen.cc -index b9723889ce..70dc0a9f5c 100644 ---- a/ui/display/screen.cc -+++ b/ui/display/screen.cc -@@ -85,26 +85,11 @@ void Screen::SetDisplayForNewWindows(int64_t display_id) { - } - - #if BUILDFLAG(IS_CHROMEOS_LACROS) || BUILDFLAG(IS_LINUX) --std::unique_ptr<Screen::ScreenSaverSuspender> Screen::SuspendScreenSaver() { -- SetScreenSaverSuspended(true); -- screen_saver_suspension_count_++; -- return base::WrapUnique(new Screen::ScreenSaverSuspender(this)); --} -- --Screen::ScreenSaverSuspender::~ScreenSaverSuspender() { -- // Check that this suspender still refers to the active screen. Particularly -- // in tests, the screen might be destructed before the suspender. -- if (screen_ == GetScreen()) { -- screen_->screen_saver_suspension_count_--; -- if (screen_->screen_saver_suspension_count_ == 0) { -- screen_->SetScreenSaverSuspended(false); -- } -- } --} -+Screen::ScreenSaverSuspender::~ScreenSaverSuspender() = default; - --bool Screen::SetScreenSaverSuspended(bool suspend) { -+std::unique_ptr<Screen::ScreenSaverSuspender> Screen::SuspendScreenSaver() { - NOTIMPLEMENTED_LOG_ONCE(); -- return false; -+ return nullptr; - } - #endif // BUILDFLAG(IS_CHROMEOS_LACROS) || BUILDFLAG(IS_LINUX) - -diff --git a/ui/display/screen.h b/ui/display/screen.h -index a86c5b63cc..d04534006f 100644 ---- a/ui/display/screen.h -+++ b/ui/display/screen.h -@@ -133,28 +133,22 @@ class DISPLAY_EXPORT Screen { - // its existence. - class ScreenSaverSuspender { - public: -- ScreenSaverSuspender(const Screen&) = delete; -- ScreenSaverSuspender& operator=(const Screen&) = delete; -+ ScreenSaverSuspender() = default; - -- // Notifies |screen_| that this instance is being destructed, and causes its -- // platform-specific screensaver to be un-suspended if this is the last such -- // remaining instance. -- ~ScreenSaverSuspender(); -+ ScreenSaverSuspender(const ScreenSaverSuspender&) = delete; -+ ScreenSaverSuspender& operator=(const ScreenSaverSuspender&) = delete; - -- private: -- friend class Screen; -- -- explicit ScreenSaverSuspender(Screen* screen) : screen_(screen) {} -- -- Screen* screen_; -+ // Causes the platform-specific screensaver to be un-suspended iff this is -+ // the last remaining instance. -+ virtual ~ScreenSaverSuspender() = 0; - }; - - // Suspends the platform-specific screensaver until the returned -- // |ScreenSaverSuspender| is destructed. This method allows stacking multiple -- // overlapping calls, such that the platform-specific screensaver will not be -- // un-suspended until all returned |SreenSaverSuspender| instances have been -- // destructed. -- std::unique_ptr<ScreenSaverSuspender> SuspendScreenSaver(); -+ // |ScreenSaverSuspender| is destructed, or returns nullptr if suspension -+ // failed. This method allows stacking multiple overlapping calls, such that -+ // the platform-specific screensaver will not be un-suspended until all -+ // returned |ScreenSaverSuspender| instances have been destructed. -+ virtual std::unique_ptr<ScreenSaverSuspender> SuspendScreenSaver(); - #endif // BUILDFLAG(IS_CHROMEOS_LACROS) || BUILDFLAG(IS_LINUX) - - // Returns whether the screensaver is currently running. -@@ -200,12 +194,6 @@ class DISPLAY_EXPORT Screen { - const gfx::GpuExtraInfo& gpu_extra_info); - - protected: --#if BUILDFLAG(IS_CHROMEOS_LACROS) || BUILDFLAG(IS_LINUX) -- // Suspends or un-suspends the platform-specific screensaver, and returns -- // whether the operation was successful. -- virtual bool SetScreenSaverSuspended(bool suspend); --#endif // BUILDFLAG(IS_CHROMEOS_LACROS) || BUILDFLAG(IS_LINUX) -- - void set_shutdown(bool shutdown) { shutdown_ = shutdown; } - - private: -diff --git a/ui/ozone/platform/wayland/host/wayland_screen.cc b/ui/ozone/platform/wayland/host/wayland_screen.cc -index 0c7dc5c02b..18cd81b472 100644 ---- a/ui/ozone/platform/wayland/host/wayland_screen.cc -+++ b/ui/ozone/platform/wayland/host/wayland_screen.cc -@@ -327,6 +327,37 @@ display::Display WaylandScreen::GetDisplayMatching( - return display_matching ? *display_matching : GetPrimaryDisplay(); - } - -+std::unique_ptr<WaylandScreen::WaylandScreenSaverSuspender> -+WaylandScreen::WaylandScreenSaverSuspender::Create(WaylandScreen& screen) { -+ auto suspender = base::WrapUnique(new WaylandScreenSaverSuspender(screen)); -+ if (suspender->is_suspending_) { -+ screen.screen_saver_suspension_count_++; -+ return suspender; -+ } -+ -+ return nullptr; -+} -+ -+WaylandScreen::WaylandScreenSaverSuspender::WaylandScreenSaverSuspender( -+ WaylandScreen& screen) -+ : screen_(screen.GetWeakPtr()) { -+ is_suspending_ = screen.SetScreenSaverSuspended(true); -+} -+ -+WaylandScreen::WaylandScreenSaverSuspender::~WaylandScreenSaverSuspender() { -+ if (screen_ && is_suspending_) { -+ screen_->screen_saver_suspension_count_--; -+ if (screen_->screen_saver_suspension_count_ == 0) { -+ screen_->SetScreenSaverSuspended(false); -+ } -+ } -+} -+ -+std::unique_ptr<PlatformScreen::PlatformScreenSaverSuspender> -+WaylandScreen::SuspendScreenSaver() { -+ return WaylandScreenSaverSuspender::Create(*this); -+} -+ - bool WaylandScreen::SetScreenSaverSuspended(bool suspend) { - if (!connection_->zwp_idle_inhibit_manager()) - return false; -diff --git a/ui/ozone/platform/wayland/host/wayland_screen.h b/ui/ozone/platform/wayland/host/wayland_screen.h -index 87358f4f06..8e5515104a 100644 ---- a/ui/ozone/platform/wayland/host/wayland_screen.h -+++ b/ui/ozone/platform/wayland/host/wayland_screen.h -@@ -68,7 +68,8 @@ class WaylandScreen : public PlatformScreen { - const gfx::Point& point) const override; - display::Display GetDisplayMatching( - const gfx::Rect& match_rect) const override; -- bool SetScreenSaverSuspended(bool suspend) override; -+ std::unique_ptr<PlatformScreen::PlatformScreenSaverSuspender> -+ SuspendScreenSaver() override; - bool IsScreenSaverActive() const override; - base::TimeDelta CalculateIdleTime() const override; - void AddObserver(display::DisplayObserver* observer) override; -@@ -76,7 +77,33 @@ class WaylandScreen : public PlatformScreen { - std::vector<base::Value> GetGpuExtraInfo( - const gfx::GpuExtraInfo& gpu_extra_info) override; - -+ protected: -+ // Suspends or un-suspends the platform-specific screensaver, and returns -+ // whether the operation was successful. Can be called more than once with the -+ // same value for |suspend|, but those states should not stack: the first -+ // alternating value should toggle the state of the suspend. -+ bool SetScreenSaverSuspended(bool suspend); -+ - private: -+ class WaylandScreenSaverSuspender -+ : public PlatformScreen::PlatformScreenSaverSuspender { -+ public: -+ WaylandScreenSaverSuspender(const WaylandScreenSaverSuspender&) = delete; -+ WaylandScreenSaverSuspender& operator=(const WaylandScreenSaverSuspender&) = -+ delete; -+ -+ ~WaylandScreenSaverSuspender() override; -+ -+ static std::unique_ptr<WaylandScreenSaverSuspender> Create( -+ WaylandScreen& screen); -+ -+ private: -+ explicit WaylandScreenSaverSuspender(WaylandScreen& screen); -+ -+ base::WeakPtr<WaylandScreen> screen_; -+ bool is_suspending_ = false; -+ }; -+ - // All parameters are in DIP screen coordinates/units except |physical_size|, - // which is in physical pixels. - void AddOrUpdateDisplay(uint32_t output_id, -@@ -103,6 +130,7 @@ class WaylandScreen : public PlatformScreen { - #endif - - wl::Object<zwp_idle_inhibitor_v1> idle_inhibitor_; -+ uint32_t screen_saver_suspension_count_ = 0; - - base::WeakPtrFactory<WaylandScreen> weak_factory_; - }; -diff --git a/ui/ozone/platform/x11/x11_screen_ozone.cc b/ui/ozone/platform/x11/x11_screen_ozone.cc -index 53265ab58a..b450df9c83 100644 ---- a/ui/ozone/platform/x11/x11_screen_ozone.cc -+++ b/ui/ozone/platform/x11/x11_screen_ozone.cc -@@ -4,6 +4,8 @@ - - #include "ui/ozone/platform/x11/x11_screen_ozone.h" - -+#include <memory> -+ - #include "base/containers/flat_set.h" - #include "ui/base/linux/linux_desktop.h" - #include "ui/base/x/x11_idle_query.h" -@@ -131,8 +133,29 @@ display::Display X11ScreenOzone::GetDisplayMatching( - return matching_display ? *matching_display : GetPrimaryDisplay(); - } - --bool X11ScreenOzone::SetScreenSaverSuspended(bool suspend) { -- return SuspendX11ScreenSaver(suspend); -+X11ScreenOzone::X11ScreenSaverSuspender::X11ScreenSaverSuspender() { -+ is_suspending_ = SuspendX11ScreenSaver(true); -+} -+ -+std::unique_ptr<X11ScreenOzone::X11ScreenSaverSuspender> -+X11ScreenOzone::X11ScreenSaverSuspender::Create() { -+ auto suspender = base::WrapUnique(new X11ScreenSaverSuspender()); -+ if (suspender->is_suspending_) { -+ return suspender; -+ } -+ -+ return nullptr; -+} -+ -+X11ScreenOzone::X11ScreenSaverSuspender::~X11ScreenSaverSuspender() { -+ if (is_suspending_) { -+ SuspendX11ScreenSaver(false); -+ } -+} -+ -+std::unique_ptr<PlatformScreen::PlatformScreenSaverSuspender> -+X11ScreenOzone::SuspendScreenSaver() { -+ return X11ScreenSaverSuspender::Create(); - } - - bool X11ScreenOzone::IsScreenSaverActive() const { -diff --git a/ui/ozone/platform/x11/x11_screen_ozone.h b/ui/ozone/platform/x11/x11_screen_ozone.h -index d86acae9aa..81e0fd13d8 100644 ---- a/ui/ozone/platform/x11/x11_screen_ozone.h -+++ b/ui/ozone/platform/x11/x11_screen_ozone.h -@@ -50,7 +50,8 @@ class X11ScreenOzone : public PlatformScreen, - const gfx::Point& point) const override; - display::Display GetDisplayMatching( - const gfx::Rect& match_rect) const override; -- bool SetScreenSaverSuspended(bool suspend) override; -+ std::unique_ptr<PlatformScreen::PlatformScreenSaverSuspender> -+ SuspendScreenSaver() override; - bool IsScreenSaverActive() const override; - base::TimeDelta CalculateIdleTime() const override; - void AddObserver(display::DisplayObserver* observer) override; -@@ -66,6 +67,22 @@ class X11ScreenOzone : public PlatformScreen, - private: - friend class X11ScreenOzoneTest; - -+ class X11ScreenSaverSuspender -+ : public PlatformScreen::PlatformScreenSaverSuspender { -+ public: -+ X11ScreenSaverSuspender(const X11ScreenSaverSuspender&) = delete; -+ X11ScreenSaverSuspender& operator=(const X11ScreenSaverSuspender&) = delete; -+ -+ ~X11ScreenSaverSuspender() override; -+ -+ static std::unique_ptr<X11ScreenSaverSuspender> Create(); -+ -+ private: -+ X11ScreenSaverSuspender(); -+ -+ bool is_suspending_ = false; -+ }; -+ - // Overridden from ui::XDisplayManager::Delegate: - void OnXDisplayListUpdated() override; - float GetXDisplayScaleFactor() const override; -diff --git a/ui/ozone/public/platform_screen.cc b/ui/ozone/public/platform_screen.cc -index 98f599aa41..2353208396 100644 ---- a/ui/ozone/public/platform_screen.cc -+++ b/ui/ozone/public/platform_screen.cc -@@ -30,9 +30,13 @@ std::string PlatformScreen::GetCurrentWorkspace() { - return {}; - } - --bool PlatformScreen::SetScreenSaverSuspended(bool suspend) { -+PlatformScreen::PlatformScreenSaverSuspender::~PlatformScreenSaverSuspender() = -+ default; -+ -+std::unique_ptr<PlatformScreen::PlatformScreenSaverSuspender> -+PlatformScreen::SuspendScreenSaver() { - NOTIMPLEMENTED_LOG_ONCE(); -- return false; -+ return nullptr; - } - - bool PlatformScreen::IsScreenSaverActive() const { -diff --git a/ui/ozone/public/platform_screen.h b/ui/ozone/public/platform_screen.h -index 091220a99f..e4adfafce3 100644 ---- a/ui/ozone/public/platform_screen.h -+++ b/ui/ozone/public/platform_screen.h -@@ -89,11 +89,27 @@ class COMPONENT_EXPORT(OZONE_BASE) PlatformScreen { - virtual display::Display GetDisplayMatching( - const gfx::Rect& match_rect) const = 0; - -- // Suspends or un-suspends the platform-specific screensaver, and returns -- // whether the operation was successful. Can be called more than once with the -- // same value for |suspend|, but those states should not stack: the first -- // alternating value should toggle the state of the suspend. -- virtual bool SetScreenSaverSuspended(bool suspend); -+ // Object which suspends the platform-specific screensaver for the duration of -+ // its existence. -+ class PlatformScreenSaverSuspender { -+ public: -+ PlatformScreenSaverSuspender() = default; -+ -+ PlatformScreenSaverSuspender(const PlatformScreenSaverSuspender&) = delete; -+ PlatformScreenSaverSuspender& operator=( -+ const PlatformScreenSaverSuspender&) = delete; -+ -+ // Causes the platform-specific screensaver to be un-suspended iff this is -+ // the last remaining instance. -+ virtual ~PlatformScreenSaverSuspender() = 0; -+ }; -+ -+ // Suspends the platform-specific screensaver until the returned -+ // |PlatformScreenSaverSuspender| is destructed, or returns nullptr if -+ // suspension failed. This method allows stacking multiple overlapping calls, -+ // such that the platform-specific screensaver will not be un-suspended until -+ // all returned |PlatformScreenSaverSuspender| instances have been destructed. -+ virtual std::unique_ptr<PlatformScreenSaverSuspender> SuspendScreenSaver(); - - // Returns whether the screensaver is currently running. - virtual bool IsScreenSaverActive() const;