diff options
-rw-r--r-- | .SRCINFO | 28 | ||||
-rw-r--r-- | PKGBUILD | 38 | ||||
-rw-r--r-- | angle-wayland-include-protocol.patch | 38 | ||||
-rw-r--r-- | chromium-tflite-system-zlib.patch | 70 | ||||
-rw-r--r-- | fix-TFLite-build-on-linux-with-system-zlib.patch | 291 | ||||
-rw-r--r-- | remove-no-opaque-pointers-flag.patch | 18 | ||||
-rw-r--r-- | x11-ozone-fix-X11-screensaver-suspension.patch | 490 |
7 files changed, 366 insertions, 607 deletions
@@ -1,6 +1,6 @@ pkgbase = chromium-no-extras pkgdesc = Chromium without hangout services, widevine, pipewire, or chromedriver - pkgver = 104.0.5112.101 + pkgver = 105.0.5195.102 pkgrel = 1 url = https://www.chromium.org/Home arch = x86_64 @@ -30,8 +30,12 @@ pkgbase = chromium-no-extras depends = desktop-file-utils depends = hicolor-icon-theme depends = fontconfig + depends = woff2 + depends = aom + depends = brotli depends = libjpeg depends = icu + depends = dav1d depends = flac depends = snappy depends = libxml2 @@ -41,33 +45,33 @@ pkgbase = chromium-no-extras depends = opus depends = harfbuzz depends = re2 + depends = libavif + depends = jsoncpp depends = libxslt depends = libpng depends = freetype2 optdepends = kdialog: support for native dialogs in Plasma optdepends = org.freedesktop.secrets: password storage backend on GNOME / Xfce optdepends = kwallet: support for storing passwords in KWallet on Plasma - provides = chromium=104.0.5112.101 + provides = chromium=105.0.5195.102 conflicts = chromium options = debug options = !lto - source = https://commondatastorage.googleapis.com/chromium-browser-official/chromium-104.0.5112.101.tar.xz + source = https://commondatastorage.googleapis.com/chromium-browser-official/chromium-105.0.5195.102.tar.xz source = https://github.com/foutrelis/chromium-launcher/archive/v8/chromium-launcher-8.tar.gz - source = https://github.com/stha09/chromium-patches/releases/download/chromium-104-patchset-2/chromium-104-patchset-2.tar.xz - source = x11-ozone-fix-X11-screensaver-suspension.patch + source = https://github.com/stha09/chromium-patches/releases/download/chromium-105-patchset-1/chromium-105-patchset-1.tar.xz + source = fix-TFLite-build-on-linux-with-system-zlib.patch source = enable-GlobalMediaControlsCastStartStop.patch source = roll-src-third_party-ffmpeg.patch - source = chromium-tflite-system-zlib.patch - source = remove-no-opaque-pointers-flag.patch + source = angle-wayland-include-protocol.patch source = use-oauth2-client-switches-as-default.patch - sha256sums = 60f015e1559de4044cdfa3bdc1f8fde535927c8ab15b0959ccc9b6feec832f5b + sha256sums = 1cba0527c951e3c506ade96cf6ec2507ee9d43661764731ed896348182369262 sha256sums = 213e50f48b67feb4441078d50b0fd431df34323be15be97c55302d3fdac4483a - sha256sums = ce702099849465927cf47f7bc3a4a27045d0e35e16b17481ebf35e14506bafa7 - sha256sums = 9956a843bc8a765c130080616ccd3ebc46ea95c3a2324c4b403bc293a8705eb2 + sha256sums = f0c437c02cab7a6efc958f82fbb4ea35d5440f73d65731bad7c0dcaecb932121 + sha256sums = 5db1fae8a452774b5b177e493a2d1a435b980137b16ed74616d1fb86fe342ec7 sha256sums = 779fb13f2494209d3a7f1f23a823e59b9dded601866d3ab095937a1a04e19ac6 sha256sums = 30df59a9e2d95dcb720357ec4a83d9be51e59cc5551365da4c0073e68ccdec44 - sha256sums = 588c166bf748793758a7df438cfa665b32e09ca8fbd6380be28bc5984a33523c - sha256sums = ab46b2c26a4dfe86486fd7e31bfc7211c515994a61a8c0cbd742f9c9e3c91873 + sha256sums = cd0d9d2a1d6a522d47c3c0891dabe4ad72eabbebc0fe5642b9e22efa3d5ee572 sha256sums = e393174d7695d0bafed69e868c5fbfecf07aa6969f3b64596d0bae8b067e1711 pkgname = chromium-no-extras @@ -11,10 +11,10 @@ pkgname=chromium-no-extras _pkgname=chromium -pkgver=104.0.5112.101 +pkgver=105.0.5195.102 pkgrel=1 _launcher_ver=8 -_gcc_patchset=2 +_gcc_patchset=1 pkgdesc="Chromium without hangout services, widevine, pipewire, or chromedriver" arch=('x86_64') url="https://www.chromium.org/Home" @@ -34,31 +34,34 @@ 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 + fix-TFLite-build-on-linux-with-system-zlib.patch enable-GlobalMediaControlsCastStartStop.patch roll-src-third_party-ffmpeg.patch - chromium-tflite-system-zlib.patch - remove-no-opaque-pointers-flag.patch + angle-wayland-include-protocol.patch use-oauth2-client-switches-as-default.patch) -sha256sums=('60f015e1559de4044cdfa3bdc1f8fde535927c8ab15b0959ccc9b6feec832f5b' +sha256sums=('1cba0527c951e3c506ade96cf6ec2507ee9d43661764731ed896348182369262' '213e50f48b67feb4441078d50b0fd431df34323be15be97c55302d3fdac4483a' - 'ce702099849465927cf47f7bc3a4a27045d0e35e16b17481ebf35e14506bafa7' - '9956a843bc8a765c130080616ccd3ebc46ea95c3a2324c4b403bc293a8705eb2' + 'f0c437c02cab7a6efc958f82fbb4ea35d5440f73d65731bad7c0dcaecb932121' + '5db1fae8a452774b5b177e493a2d1a435b980137b16ed74616d1fb86fe342ec7' '779fb13f2494209d3a7f1f23a823e59b9dded601866d3ab095937a1a04e19ac6' '30df59a9e2d95dcb720357ec4a83d9be51e59cc5551365da4c0073e68ccdec44' - '588c166bf748793758a7df438cfa665b32e09ca8fbd6380be28bc5984a33523c' - 'ab46b2c26a4dfe86486fd7e31bfc7211c515994a61a8c0cbd742f9c9e3c91873' + '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 @@ -69,6 +72,7 @@ declare -gA _system_libs=( [opus]=opus [re2]=re2 [snappy]=snappy + [woff2]=woff2 [zlib]=minizip ) _unwanted_bundled_libs=( @@ -103,14 +107,8 @@ prepare() { # 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 + patch -Np1 -i ../fix-TFLite-build-on-linux-with-system-zlib.patch # Revert kGlobalMediaControlsCastStartStop enabled by default # https://crbug.com/1314342 @@ -120,8 +118,14 @@ prepare() { # 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 diff --git a/angle-wayland-include-protocol.patch b/angle-wayland-include-protocol.patch new file mode 100644 index 000000000000..1245b172b020 --- /dev/null +++ b/angle-wayland-include-protocol.patch @@ -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", ++ ] + } + } diff --git a/chromium-tflite-system-zlib.patch b/chromium-tflite-system-zlib.patch deleted file mode 100644 index 91ef5726bc8d..000000000000 --- a/chromium-tflite-system-zlib.patch +++ /dev/null @@ -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 { diff --git a/fix-TFLite-build-on-linux-with-system-zlib.patch b/fix-TFLite-build-on-linux-with-system-zlib.patch new file mode 100644 index 000000000000..83b122544718 --- /dev/null +++ b/fix-TFLite-build-on-linux-with-system-zlib.patch @@ -0,0 +1,291 @@ +From ae0f9adb7e14c0d19ca695ef6ad40b321a8cb64c Mon Sep 17 00:00:00 2001 +From: Andres Salomon <dilinger@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=mcrouse@chromium.org, robertogden@chromium.org, sesse@chromium.org, thestig@chromium.org + +Bug: 1348787 +Change-Id: I922d18b3d1c0e459437624fd248c21afc1be6bb8 +Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/3797828 +Commit-Queue: Andres Salomon <dilinger@queued.net> +Auto-Submit: Andres Salomon <dilinger@queued.net> +Reviewed-by: Michael Crouse <mcrouse@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 <dilinger@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 { diff --git a/remove-no-opaque-pointers-flag.patch b/remove-no-opaque-pointers-flag.patch deleted file mode 100644 index 9bd434a9b83a..000000000000 --- a/remove-no-opaque-pointers-flag.patch +++ /dev/null @@ -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" ] diff --git a/x11-ozone-fix-X11-screensaver-suspension.patch b/x11-ozone-fix-X11-screensaver-suspension.patch deleted file mode 100644 index 4336d6a7a0a4..000000000000 --- a/x11-ozone-fix-X11-screensaver-suspension.patch +++ /dev/null @@ -1,490 +0,0 @@ -From 8c1ebea5f601b0b5247535dcdfd01755f3e6e1a6 Mon Sep 17 00:00:00 2001 -From: Andrew Wolfers <aswolfers@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 <aswolfers@chromium.org> -Reviewed-by: Thomas Anderson <thomasanderson@chromium.org> -Reviewed-by: Scott Violet <sky@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; |