diff options
author | Noah Vogt | 2022-08-08 22:29:52 +0200 |
---|---|---|
committer | Noah Vogt | 2022-08-08 22:29:52 +0200 |
commit | 70208ec6386c66f50388abf2b0d7e432dbaa8c4a (patch) | |
tree | f60908988ce57ba6f46239989ba6c065e1f3fb15 | |
parent | ea86e9b21a2861c50357adc05a54803a8fde3304 (diff) | |
download | aur-70208ec6386c66f50388abf2b0d7e432dbaa8c4a.tar.gz |
uppkg -> 104.0.5112.79-1
-rw-r--r-- | .SRCINFO | 26 | ||||
-rw-r--r-- | PKGBUILD | 47 | ||||
-rw-r--r-- | chromium-tflite-system-zlib.patch | 70 | ||||
-rw-r--r-- | ozone-add-va-api-support-to-wayland.patch | 58 | ||||
-rw-r--r-- | remove-no-opaque-pointers-flag.patch | 10 | ||||
-rw-r--r-- | sql-make-VirtualCursor-standard-layout-type.patch | 238 | ||||
-rw-r--r-- | x11-ozone-fix-X11-screensaver-suspension.patch | 490 |
7 files changed, 620 insertions, 319 deletions
@@ -1,8 +1,8 @@ pkgbase = ungoogled-chromium-xdg pkgdesc = A lightweight approach to removing Google web service dependency - without creating a useless ~/.pki directory - pkgver = 103.0.5060.53 + pkgver = 104.0.5112.79 pkgrel = 1 - url = https://github.com/Eloston/ungoogled-chromium + url = https://github.com/ungoogled-software/ungoogled-chromium arch = x86_64 license = BSD makedepends = python @@ -53,33 +53,35 @@ pkgbase = ungoogled-chromium-xdg conflicts = chromium options = debug options = !lto - source = https://commondatastorage.googleapis.com/chromium-browser-official/chromium-103.0.5060.53.tar.xz + source = https://commondatastorage.googleapis.com/chromium-browser-official/chromium-104.0.5112.79.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-103-patchset-4/chromium-103-patchset-4.tar.xz + 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 = enable-GlobalMediaControlsCastStartStop.patch source = roll-src-third_party-ffmpeg.patch - source = sql-make-VirtualCursor-standard-layout-type.patch + source = chromium-tflite-system-zlib.patch source = remove-no-opaque-pointers-flag.patch source = use-oauth2-client-switches-as-default.patch source = xdg-basedir.patch source = no-omnibox-suggestion-autocomplete.patch source = index.html - source = ungoogled-chromium-103.0.5060.53-1.tar.gz::https://github.com/Eloston/ungoogled-chromium/archive/103.0.5060.53-1.tar.gz + source = ungoogled-chromium-104.0.5112.81-1.tar.gz::https://github.com/ungoogled-software/ungoogled-chromium/archive/104.0.5112.81-1.tar.gz source = chromium-drirc-disable-10bpc-color-configs.conf source = ozone-add-va-api-support-to-wayland.patch - sha256sums = 0ecbae14670506da90c8bf744f83f52a64a5fff0765c2e2e066b0e68b805b101 + sha256sums = 9cc662f1a84c796521ee17ed2808795ca937fe7f77bc605e788f0304a81dabf3 sha256sums = 213e50f48b67feb4441078d50b0fd431df34323be15be97c55302d3fdac4483a - sha256sums = fed11a8987d9f9baa04457fb114f8f7fdb800300a3780927020865bcc43e4f52 + sha256sums = ce702099849465927cf47f7bc3a4a27045d0e35e16b17481ebf35e14506bafa7 + sha256sums = 9956a843bc8a765c130080616ccd3ebc46ea95c3a2324c4b403bc293a8705eb2 sha256sums = 779fb13f2494209d3a7f1f23a823e59b9dded601866d3ab095937a1a04e19ac6 sha256sums = 30df59a9e2d95dcb720357ec4a83d9be51e59cc5551365da4c0073e68ccdec44 - sha256sums = b94b2e88f63cfb7087486508b8139599c89f96d7a4181c61fec4b4e250ca327a - sha256sums = 00c16ce83ea4ca924a50fa0cfc2b2a4d744c722f363b065323e6ba0fcbac45a5 + sha256sums = 588c166bf748793758a7df438cfa665b32e09ca8fbd6380be28bc5984a33523c + sha256sums = ab46b2c26a4dfe86486fd7e31bfc7211c515994a61a8c0cbd742f9c9e3c91873 sha256sums = e393174d7695d0bafed69e868c5fbfecf07aa6969f3b64596d0bae8b067e1711 sha256sums = cd844867b5b2197ad097662fee32579a7091dfba1d46cb438c4c7e696690440a sha256sums = ff1591fa38e0ede7e883dc7494b813641b7a1a7cb1ded00d9baaee987c1dbea8 sha256sums = a4cdd2b86f32d5302c2792be841ff40d982b19bb58a4e63df9d77f4c706b8665 - sha256sums = 96c7adbe1d9ec6fe77bb3d299a4bbcc63bcdbec04f736a73f218949a0ea5a83e + sha256sums = 75fbb5a8679522cd81520a5623e18d8aa4783d5403d2bc26aacab90d899a7a15 sha256sums = babda4f5c1179825797496898d77334ac067149cac03d797ab27ac69671a7feb - sha256sums = 07bdc1b3fc8f0d0a4804d111c46ce3343cd7824de562f2848d429b917ce4bcfd + sha256sums = af20fc58aef22dd0b1fb560a1fab68d0d27187ff18fad7eb1670feab9bc4a8d8 pkgname = ungoogled-chromium-xdg @@ -2,7 +2,7 @@ # Maintainer: Seppia <seppia@seppio.fish> # Maintainer: JustKidding <jk@vin.ovh> -# Based on aur/chromium-vaapi, with ungoogled-chromium patches +# Based on extra/chromium, with ungoogled-chromium patches # Maintainer: Evangelos Foutras <evangelos@foutrelis.com> # Contributor: Pierre Schmitz <pierre@archlinux.de> @@ -10,13 +10,13 @@ # Contributor: Daniel J Griffiths <ghost1227@archlinux.us> pkgname=ungoogled-chromium-xdg -pkgver=103.0.5060.53 +pkgver=104.0.5112.79 pkgrel=1 _launcher_ver=8 -_gcc_patchset=4 +_gcc_patchset=2 pkgdesc="A lightweight approach to removing Google web service dependency - without creating a useless ~/.pki directory" arch=('x86_64') -url="https://github.com/Eloston/ungoogled-chromium" +url="https://github.com/ungoogled-software/ungoogled-chromium" license=('BSD') depends=('gtk3' 'nss' 'alsa-lib' 'xdg-utils' 'libxss' 'libcups' 'libgcrypt' 'ttf-liberation' 'systemd' 'dbus' 'libpulse' 'pciutils' 'libva' @@ -31,37 +31,39 @@ 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 - sql-make-VirtualCursor-standard-layout-type.patch + chromium-tflite-system-zlib.patch remove-no-opaque-pointers-flag.patch use-oauth2-client-switches-as-default.patch xdg-basedir.patch no-omnibox-suggestion-autocomplete.patch index.html) -sha256sums=('0ecbae14670506da90c8bf744f83f52a64a5fff0765c2e2e066b0e68b805b101' +sha256sums=('9cc662f1a84c796521ee17ed2808795ca937fe7f77bc605e788f0304a81dabf3' '213e50f48b67feb4441078d50b0fd431df34323be15be97c55302d3fdac4483a' - 'fed11a8987d9f9baa04457fb114f8f7fdb800300a3780927020865bcc43e4f52' + 'ce702099849465927cf47f7bc3a4a27045d0e35e16b17481ebf35e14506bafa7' + '9956a843bc8a765c130080616ccd3ebc46ea95c3a2324c4b403bc293a8705eb2' '779fb13f2494209d3a7f1f23a823e59b9dded601866d3ab095937a1a04e19ac6' '30df59a9e2d95dcb720357ec4a83d9be51e59cc5551365da4c0073e68ccdec44' - 'b94b2e88f63cfb7087486508b8139599c89f96d7a4181c61fec4b4e250ca327a' - '00c16ce83ea4ca924a50fa0cfc2b2a4d744c722f363b065323e6ba0fcbac45a5' + '588c166bf748793758a7df438cfa665b32e09ca8fbd6380be28bc5984a33523c' + 'ab46b2c26a4dfe86486fd7e31bfc7211c515994a61a8c0cbd742f9c9e3c91873' 'e393174d7695d0bafed69e868c5fbfecf07aa6969f3b64596d0bae8b067e1711' 'cd844867b5b2197ad097662fee32579a7091dfba1d46cb438c4c7e696690440a' 'ff1591fa38e0ede7e883dc7494b813641b7a1a7cb1ded00d9baaee987c1dbea8' 'a4cdd2b86f32d5302c2792be841ff40d982b19bb58a4e63df9d77f4c706b8665') provides=('chromium') conflicts=('chromium') -_uc_usr=Eloston -_uc_ver=$pkgver-1 +_uc_usr=ungoogled-software +_uc_ver=104.0.5112.81-1 source=(${source[@]} ${pkgname%-*}-$_uc_ver.tar.gz::https://github.com/$_uc_usr/ungoogled-chromium/archive/$_uc_ver.tar.gz chromium-drirc-disable-10bpc-color-configs.conf ozone-add-va-api-support-to-wayland.patch) sha256sums=(${sha256sums[@]} - '96c7adbe1d9ec6fe77bb3d299a4bbcc63bcdbec04f736a73f218949a0ea5a83e' + '75fbb5a8679522cd81520a5623e18d8aa4783d5403d2bc26aacab90d899a7a15' 'babda4f5c1179825797496898d77334ac067149cac03d797ab27ac69671a7feb' - '07bdc1b3fc8f0d0a4804d111c46ce3343cd7824de562f2848d429b917ce4bcfd') + 'af20fc58aef22dd0b1fb560a1fab68d0d27187ff18fad7eb1670feab9bc4a8d8') # 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 @@ -111,6 +113,12 @@ prepare() { # 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 @@ -119,8 +127,8 @@ prepare() { # https://crbug.com/1325301 patch -Rp1 -i ../roll-src-third_party-ffmpeg.patch - # https://chromium-review.googlesource.com/c/chromium/src/+/2862724 - patch -Np1 -i ../sql-make-VirtualCursor-standard-layout-type.patch + # Fixes for building with libstdc++ instead of libc++ + patch -Np1 -i ../patches/chromium-103-VirtualCursor-std-layout.patch # move ~/.pki directory to ${XDG_DATA_HOME:-$HOME/.local}/share/pki patch -p1 -i ../xdg-basedir.patch @@ -130,11 +138,8 @@ prepare() { # called 'shoulder surfing'). patch -p1 -i ../no-omnibox-suggestion-autocomplete.patch - # Fixes for building with libstdc++ instead of libc++ - #patch -Np1 -i ../patches/ - # Enable vaapi on wayland - # patch -Np1 -i ../ozone-add-va-api-support-to-wayland.patch + patch -Np1 -i ../ozone-add-va-api-support-to-wayland.patch # Ungoogled Chromium changes _ungoogled_repo="$srcdir/${pkgname%xdg*}$pkgver-1" @@ -220,12 +225,12 @@ build() { 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} diff --git a/chromium-tflite-system-zlib.patch b/chromium-tflite-system-zlib.patch new file mode 100644 index 000000000000..91ef5726bc8d --- /dev/null +++ b/chromium-tflite-system-zlib.patch @@ -0,0 +1,70 @@ +--- 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/ozone-add-va-api-support-to-wayland.patch b/ozone-add-va-api-support-to-wayland.patch index e2e055cc1e1e..abde3d5a4273 100644 --- a/ozone-add-va-api-support-to-wayland.patch +++ b/ozone-add-va-api-support-to-wayland.patch @@ -1,4 +1,3 @@ -From ddb186d8904d6ec80d1084a1cc495b824381a565 Mon Sep 17 00:00:00 2001 From: Maksim Sisov <msisov@igalia.com> Date: Wed, 20 Jan 2021 09:50:22 +0200 Subject: [PATCH] ozone/wayland: add VA-API support. @@ -16,18 +15,9 @@ The patch is based on the old va-api path. ChromeOS team is working on the new path, which will be also employed by Wayland later. -Signed-off-by: Maksim Sisov <msisov@igalia.com> --- - media/gpu/vaapi/vaapi_picture_factory.cc | 2 +- - media/gpu/vaapi/vaapi_picture_native_pixmap.cc | 17 ++++++++++++++++- - .../gpu/vaapi/vaapi_video_decode_accelerator.cc | 4 ++-- - .../platform/wayland/gpu/gbm_pixmap_wayland.cc | 14 ++++++++++++-- - .../platform/wayland/gpu/gbm_pixmap_wayland.h | 3 +++ - .../platform/wayland/ozone_platform_wayland.cc | 3 +++ - 6 files changed, 37 insertions(+), 6 deletions(-) - diff --git a/media/gpu/vaapi/vaapi_picture_factory.cc b/media/gpu/vaapi/vaapi_picture_factory.cc -index 62e3a429239eb..df4905a10f68b 100644 +index 62e3a42..bde9c2d 100644 --- a/media/gpu/vaapi/vaapi_picture_factory.cc +++ b/media/gpu/vaapi/vaapi_picture_factory.cc @@ -105,7 +105,7 @@ uint32_t VaapiPictureFactory::GetGLTextureTarget() { @@ -35,12 +25,12 @@ index 62e3a429239eb..df4905a10f68b 100644 gfx::BufferFormat VaapiPictureFactory::GetBufferFormat() { -#if BUILDFLAG(USE_VAAPI_X11) -+#if defined(OS_LINUX) ++#if BUILDFLAG(IS_LINUX) return gfx::BufferFormat::RGBX_8888; #else return gfx::BufferFormat::YUV_420_BIPLANAR; diff --git a/media/gpu/vaapi/vaapi_picture_native_pixmap.cc b/media/gpu/vaapi/vaapi_picture_native_pixmap.cc -index 941f24cc59590..a9c80356e7109 100644 +index 941f24c..a9c8035 100644 --- a/media/gpu/vaapi/vaapi_picture_native_pixmap.cc +++ b/media/gpu/vaapi/vaapi_picture_native_pixmap.cc @@ -4,6 +4,7 @@ @@ -75,10 +65,10 @@ index 941f24cc59590..a9c80356e7109 100644 bool VaapiPictureNativePixmap::AllowOverlay() const { diff --git a/media/gpu/vaapi/vaapi_video_decode_accelerator.cc b/media/gpu/vaapi/vaapi_video_decode_accelerator.cc -index baaf2ae468d36..4d6933d869933 100644 +index 3a07fa2..306313d 100644 --- a/media/gpu/vaapi/vaapi_video_decode_accelerator.cc +++ b/media/gpu/vaapi/vaapi_video_decode_accelerator.cc -@@ -562,12 +562,12 @@ void VaapiVideoDecodeAccelerator::InitiateSurfaceSetChange( +@@ -561,12 +561,12 @@ void VaapiVideoDecodeAccelerator::InitiateSurfaceSetChange( requested_visible_rect_ = visible_rect; if (buffer_allocation_mode_ == BufferAllocationMode::kSuperReduced) { // Add one to the reference frames for the one being currently egressed. @@ -94,47 +84,28 @@ index baaf2ae468d36..4d6933d869933 100644 } else { requested_num_reference_frames_ = 0; diff --git a/ui/ozone/platform/wayland/gpu/gbm_pixmap_wayland.cc b/ui/ozone/platform/wayland/gpu/gbm_pixmap_wayland.cc -index 2ec4e4e01729e..e73af1fe781c6 100644 +index 35378d1..68969d2 100644 --- a/ui/ozone/platform/wayland/gpu/gbm_pixmap_wayland.cc +++ b/ui/ozone/platform/wayland/gpu/gbm_pixmap_wayland.cc -@@ -33,8 +33,12 @@ GbmPixmapWayland::GbmPixmapWayland(WaylandBufferManagerGpu* buffer_manager) +@@ -32,7 +32,9 @@ GbmPixmapWayland::GbmPixmapWayland(WaylandBufferManagerGpu* buffer_manager) buffer_id_(buffer_manager->AllocateBufferID()) {} GbmPixmapWayland::~GbmPixmapWayland() { -- if (gbm_bo_ && widget_ != gfx::kNullAcceleratedWidget) +- if (created_wl_buffer_) + // gfx::BufferUsage::SCANOUT_VDA_WRITE doesn't result in creation of + // wl_buffers. -+ if (gbm_bo_ && usage_ != gfx::BufferUsage::SCANOUT_VDA_WRITE && -+ widget_ != gfx::kNullAcceleratedWidget) { ++ if (created_wl_buffer_ && usage_ != gfx::BufferUsage::SCANOUT_VDA_WRITE) buffer_manager_->DestroyBuffer(buffer_id_); -+ } - } - - bool GbmPixmapWayland::InitializeBuffer( -@@ -83,8 +87,14 @@ bool GbmPixmapWayland::InitializeBuffer( - << " usage=" << gfx::BufferUsageToString(usage); - - visible_area_size_ = visible_area_size ? visible_area_size.value() : size; -- if (widget_ != gfx::kNullAcceleratedWidget) -+ usage_ = usage; -+ // Do not create wl_buffers for SCANOUT_VDA_WRITE usages. These buffers are -+ // only used by video decoders and are not going to be requested to be -+ // attached to Wayland surfaces. -+ if (usage_ != gfx::BufferUsage::SCANOUT_VDA_WRITE && -+ widget_ != gfx::kNullAcceleratedWidget) { - CreateDmabufBasedBuffer(); -+ } - return true; } diff --git a/ui/ozone/platform/wayland/gpu/gbm_pixmap_wayland.h b/ui/ozone/platform/wayland/gpu/gbm_pixmap_wayland.h -index e9b25a7452882..3eb91765eba30 100644 +index 06d0290..c217e91 100644 --- a/ui/ozone/platform/wayland/gpu/gbm_pixmap_wayland.h +++ b/ui/ozone/platform/wayland/gpu/gbm_pixmap_wayland.h -@@ -87,6 +87,9 @@ class GbmPixmapWayland : public gfx::NativePixmap { +@@ -91,6 +91,9 @@ class GbmPixmapWayland : public gfx::NativePixmap { - // Size of the visible area of the buffer. - gfx::Size visible_area_size_; + // Says a wl_buffer has been created and must removed. + bool created_wl_buffer_ = false; + + // Tells the usage of this pixmap. + gfx::BufferUsage usage_ = gfx::BufferUsage::SCANOUT; @@ -142,7 +113,7 @@ index e9b25a7452882..3eb91765eba30 100644 } // namespace ui diff --git a/ui/ozone/platform/wayland/ozone_platform_wayland.cc b/ui/ozone/platform/wayland/ozone_platform_wayland.cc -index 661859754cd80..665e6de2616bb 100644 +index 8d8621b..a1ca29c 100644 --- a/ui/ozone/platform/wayland/ozone_platform_wayland.cc +++ b/ui/ozone/platform/wayland/ozone_platform_wayland.cc @@ -289,6 +289,9 @@ class OzonePlatformWayland : public OzonePlatform, @@ -154,3 +125,4 @@ index 661859754cd80..665e6de2616bb 100644 + initialised = true; } + diff --git a/remove-no-opaque-pointers-flag.patch b/remove-no-opaque-pointers-flag.patch index a8eba730836e..9bd434a9b83a 100644 --- a/remove-no-opaque-pointers-flag.patch +++ b/remove-no-opaque-pointers-flag.patch @@ -1,12 +1,12 @@ ---- chromium-102.0.5005.61/build/config/compiler/BUILD.gn.orig 2022-05-19 10:35:52.991415777 +0000 -+++ chromium-102.0.5005.61/build/config/compiler/BUILD.gn 2022-05-19 10:36:11.102017131 +0000 -@@ -1538,15 +1538,6 @@ config("default_warnings") { - cflags += [ "-Wno-deprecated-non-prototype" ] +--- 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/1316298): Re-enable once test failure is figured out +- # TODO(https://crbug.com/1322823): Remove flags once potential miscompile is investigated. - cflags += [ - "-Xclang", - "-no-opaque-pointers", diff --git a/sql-make-VirtualCursor-standard-layout-type.patch b/sql-make-VirtualCursor-standard-layout-type.patch deleted file mode 100644 index 3364d41ee07a..000000000000 --- a/sql-make-VirtualCursor-standard-layout-type.patch +++ /dev/null @@ -1,238 +0,0 @@ -From 144479ad7b4287bee4067f95e4218f614798a865 Mon Sep 17 00:00:00 2001 -From: Stephan Hartmann <stha09@googlemail.com> -Date: Sun, 16 Jan 2022 19:15:26 +0000 -Subject: [PATCH] sql: make VirtualCursor standard layout type - -sql::recover::VirtualCursor needs to be a standard layout type, but -has members of type std::unique_ptr. However, std::unique_ptr is not -guaranteed to be standard layout. Compiling with clang combined with -gcc-11 libstdc++ fails because of this. - -Bug: 1189788 -Change-Id: Ia6dc388cc5ef1c0f2afc75f8ca45b9f12687ca9c ---- - sql/recover_module/btree.cc | 18 ++++++++++++------ - sql/recover_module/btree.h | 21 +++++++++++++++------ - sql/recover_module/cursor.cc | 24 ++++++++++++------------ - sql/recover_module/cursor.h | 2 +- - sql/recover_module/pager.cc | 5 ++--- - sql/recover_module/pager.h | 6 +++--- - 6 files changed, 45 insertions(+), 31 deletions(-) - -diff --git a/sql/recover_module/btree.cc b/sql/recover_module/btree.cc -index cc9420e5c05..f12d8fa32a2 100644 ---- a/sql/recover_module/btree.cc -+++ b/sql/recover_module/btree.cc -@@ -136,16 +136,22 @@ static_assert(std::is_trivially_destructible<LeafPageDecoder>::value, - "Move the destructor to the .cc file if it's non-trival"); - #endif // !DCHECK_IS_ON() - --LeafPageDecoder::LeafPageDecoder(DatabasePageReader* db_reader) noexcept -- : page_id_(db_reader->page_id()), -- db_reader_(db_reader), -- cell_count_(ComputeCellCount(db_reader)), -- next_read_index_(0), -- last_record_size_(0) { -+LeafPageDecoder::LeafPageDecoder() noexcept = default; -+ -+void LeafPageDecoder::Initialize(DatabasePageReader* db_reader) { -+ page_id_ = db_reader->page_id(); -+ db_reader_ = db_reader; -+ cell_count_ = ComputeCellCount(db_reader); -+ next_read_index_ = 0; -+ last_record_size_ = 0; - DCHECK(IsOnValidPage(db_reader)); - DCHECK(DatabasePageReader::IsValidPageId(page_id_)); - } - -+void LeafPageDecoder::Reset() { -+ db_reader_ = nullptr; -+} -+ - bool LeafPageDecoder::TryAdvance() { - DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_); - DCHECK(CanAdvance()); -diff --git a/sql/recover_module/btree.h b/sql/recover_module/btree.h -index eaa087a5c52..df0e0c937c0 100644 ---- a/sql/recover_module/btree.h -+++ b/sql/recover_module/btree.h -@@ -101,9 +101,7 @@ class LeafPageDecoder { - public: - // Creates a decoder for a DatabasePageReader's last read page. - // -- // |db_reader| must have been used to read an inner page of a table B-tree. -- // |db_reader| must outlive this instance. -- explicit LeafPageDecoder(DatabasePageReader* db_reader) noexcept; -+ LeafPageDecoder() noexcept; - ~LeafPageDecoder() noexcept = default; - - LeafPageDecoder(const LeafPageDecoder&) = delete; -@@ -151,6 +149,17 @@ class LeafPageDecoder { - // read as long as CanAdvance() returns true. - bool TryAdvance(); - -+ // Initialize with DatabasePageReader -+ // |db_reader| must have been used to read an inner page of a table B-tree. -+ // |db_reader| must outlive this instance. -+ void Initialize(DatabasePageReader* db_reader); -+ -+ // Reset internal DatabasePageReader -+ void Reset(); -+ -+ // True if DatabasePageReader is valid -+ bool IsValid() { return (db_reader_ != nullptr); } -+ - // True if the given reader may point to an inner page in a table B-tree. - // - // The last ReadPage() call on |db_reader| must have succeeded. -@@ -164,14 +173,14 @@ class LeafPageDecoder { - static int ComputeCellCount(DatabasePageReader* db_reader); - - // The number of the B-tree page this reader is reading. -- const int64_t page_id_; -+ int64_t page_id_; - // Used to read the tree page. - // - // Raw pointer usage is acceptable because this instance's owner is expected - // to ensure that the DatabasePageReader outlives this. -- DatabasePageReader* const db_reader_; -+ DatabasePageReader* db_reader_; - // Caches the ComputeCellCount() value for this reader's page. -- const int cell_count_ = ComputeCellCount(db_reader_); -+ int cell_count_; - - // The reader's cursor state. - // -diff --git a/sql/recover_module/cursor.cc b/sql/recover_module/cursor.cc -index 4f827edf1b4..240de4999fe 100644 ---- a/sql/recover_module/cursor.cc -+++ b/sql/recover_module/cursor.cc -@@ -28,7 +28,7 @@ VirtualCursor::~VirtualCursor() { - int VirtualCursor::First() { - DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_); - inner_decoders_.clear(); -- leaf_decoder_ = nullptr; -+ leaf_decoder_.Reset(); - - AppendPageDecoder(table_->root_page_id()); - return Next(); -@@ -38,18 +38,18 @@ int VirtualCursor::Next() { - DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_); - record_reader_.Reset(); - -- while (!inner_decoders_.empty() || leaf_decoder_.get()) { -- if (leaf_decoder_.get()) { -- if (!leaf_decoder_->CanAdvance()) { -+ while (!inner_decoders_.empty() || leaf_decoder_.IsValid()) { -+ if (leaf_decoder_.IsValid()) { -+ if (!leaf_decoder_.CanAdvance()) { - // The leaf has been exhausted. Remove it from the DFS stack. -- leaf_decoder_ = nullptr; -+ leaf_decoder_.Reset(); - continue; - } -- if (!leaf_decoder_->TryAdvance()) -+ if (!leaf_decoder_.TryAdvance()) - continue; - -- if (!payload_reader_.Initialize(leaf_decoder_->last_record_size(), -- leaf_decoder_->last_record_offset())) { -+ if (!payload_reader_.Initialize(leaf_decoder_.last_record_size(), -+ leaf_decoder_.last_record_offset())) { - continue; - } - if (!record_reader_.Initialize()) -@@ -101,13 +101,13 @@ int VirtualCursor::ReadColumn(int column_index, - int64_t VirtualCursor::RowId() { - DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_); - DCHECK(record_reader_.IsInitialized()); -- DCHECK(leaf_decoder_.get()); -- return leaf_decoder_->last_record_rowid(); -+ DCHECK(leaf_decoder_.IsValid()); -+ return leaf_decoder_.last_record_rowid(); - } - - void VirtualCursor::AppendPageDecoder(int page_id) { - DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_); -- DCHECK(leaf_decoder_.get() == nullptr) -+ DCHECK(!leaf_decoder_.IsValid()) - << __func__ - << " must only be called when the current path has no leaf decoder"; - -@@ -115,7 +115,7 @@ void VirtualCursor::AppendPageDecoder(int page_id) { - return; - - if (LeafPageDecoder::IsOnValidPage(&db_reader_)) { -- leaf_decoder_ = std::make_unique<LeafPageDecoder>(&db_reader_); -+ leaf_decoder_.Initialize(&db_reader_); - return; - } - -diff --git a/sql/recover_module/cursor.h b/sql/recover_module/cursor.h -index 845b7852648..cc4e85f83f9 100644 ---- a/sql/recover_module/cursor.h -+++ b/sql/recover_module/cursor.h -@@ -130,7 +130,7 @@ class VirtualCursor { - std::vector<std::unique_ptr<InnerPageDecoder>> inner_decoders_; - - // Decodes the leaf page containing records. -- std::unique_ptr<LeafPageDecoder> leaf_decoder_; -+ LeafPageDecoder leaf_decoder_; - - SEQUENCE_CHECKER(sequence_checker_); - }; -diff --git a/sql/recover_module/pager.cc b/sql/recover_module/pager.cc -index 58e75de2704..69d98cef98d 100644 ---- a/sql/recover_module/pager.cc -+++ b/sql/recover_module/pager.cc -@@ -23,8 +23,7 @@ static_assert(DatabasePageReader::kMaxPageId <= std::numeric_limits<int>::max(), - "ints are not appropriate for representing page IDs"); - - DatabasePageReader::DatabasePageReader(VirtualTable* table) -- : page_data_(std::make_unique<uint8_t[]>(table->page_size())), -- table_(table) { -+ : page_data_(table->page_size()), table_(table) { - DCHECK(table != nullptr); - DCHECK(IsValidPageSize(table->page_size())); - } -@@ -58,7 +57,7 @@ int DatabasePageReader::ReadPage(int page_id) { - "The |read_offset| computation above may overflow"); - - int sqlite_status = -- RawRead(sqlite_file, read_size, read_offset, page_data_.get()); -+ RawRead(sqlite_file, read_size, read_offset, page_data_.data()); - - // |page_id_| needs to be set to kInvalidPageId if the read failed. - // Otherwise, future ReadPage() calls with the previous |page_id_| value -diff --git a/sql/recover_module/pager.h b/sql/recover_module/pager.h -index 07cac3cb989..d08f0932fab 100644 ---- a/sql/recover_module/pager.h -+++ b/sql/recover_module/pager.h -@@ -6,8 +6,8 @@ - #define SQL_RECOVER_MODULE_PAGER_H_ - - #include <cstdint> --#include <memory> - #include <ostream> -+#include <vector> - - #include "base/check_op.h" - #include "base/memory/raw_ptr.h" -@@ -72,7 +72,7 @@ class DatabasePageReader { - DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_); - DCHECK_NE(page_id_, kInvalidPageId) - << "Successful ReadPage() required before accessing pager state"; -- return page_data_.get(); -+ return page_data_.data(); - } - - // The number of bytes in the page read by the last ReadPage() call. -@@ -139,7 +139,7 @@ class DatabasePageReader { - int page_id_ = kInvalidPageId; - // Stores the bytes of the last page successfully read by ReadPage(). - // The content is undefined if the last call to ReadPage() did not succeed. -- const std::unique_ptr<uint8_t[]> page_data_; -+ std::vector<uint8_t> page_data_; - // Raw pointer usage is acceptable because this instance's owner is expected - // to ensure that the VirtualTable outlives this. - const raw_ptr<VirtualTable> table_; diff --git a/x11-ozone-fix-X11-screensaver-suspension.patch b/x11-ozone-fix-X11-screensaver-suspension.patch new file mode 100644 index 000000000000..4336d6a7a0a4 --- /dev/null +++ b/x11-ozone-fix-X11-screensaver-suspension.patch @@ -0,0 +1,490 @@ +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; |