[arch-commits] Commit in electron/trunk (7 files)

Bruno Pagani archange at gemini.archlinux.org
Thu Aug 4 10:10:40 UTC 2022


    Date: Thursday, August 4, 2022 @ 10:10:40
  Author: archange
Revision: 1260245

upgpkg: electron 20.0.0-1

Added:
  electron/trunk/chromium-tflite-system-zlib.patch
  electron/trunk/x11-ozone-fix-X11-screensaver-suspension.patch
Modified:
  electron/trunk/PKGBUILD
  electron/trunk/remove-no-opaque-pointers-flag.patch
Deleted:
  electron/trunk/chromium-libxml-unbundle.patch
  electron/trunk/iwyu-add-utility-for-std-exchange.patch
  electron/trunk/sql-make-VirtualCursor-standard-layout-type.patch

---------------------------------------------------+
 PKGBUILD                                          |   37 -
 chromium-libxml-unbundle.patch                    |   10 
 chromium-tflite-system-zlib.patch                 |   70 ++
 iwyu-add-utility-for-std-exchange.patch           |   27 -
 remove-no-opaque-pointers-flag.patch              |   10 
 sql-make-VirtualCursor-standard-layout-type.patch |  238 ---------
 x11-ozone-fix-X11-screensaver-suspension.patch    |  490 ++++++++++++++++++++
 7 files changed, 582 insertions(+), 300 deletions(-)

Modified: PKGBUILD
===================================================================
--- PKGBUILD	2022-08-04 10:02:16 UTC (rev 1260244)
+++ PKGBUILD	2022-08-04 10:10:40 UTC (rev 1260245)
@@ -1,10 +1,10 @@
 # Maintainer: Nicola Squartini <tensor5 at gmail.com>
 
 _use_suffix=0
-pkgver=19.0.10
-_commit=7e1099a8e4b04709e3d5068403c77eb0feb7371f
-_chromiumver=102.0.5005.167
-_gcc_patchset=6
+pkgver=20.0.0
+_commit=f20a51a87fb2a6698cd8a25588496bdbc0fcfbb2
+_chromiumver=104.0.5112.65
+_gcc_patchset=2
 # shellcheck disable=SC2034
 pkgrel=1
 
@@ -54,15 +54,15 @@
         'jinja-python-3.10.patch'
         'use-system-libraries-in-node.patch'
         'std-vector-non-const.patch'
+        'x11-ozone-fix-X11-screensaver-suspension.patch'
         'roll-src-third_party-ffmpeg.patch'
-        'chromium-libxml-unbundle.patch'
-        'sql-make-VirtualCursor-standard-layout-type.patch'
+        'chromium-tflite-system-zlib.patch'
         'remove-no-opaque-pointers-flag.patch'
        )
 # shellcheck disable=SC2034
 sha256sums=('SKIP'
             'SKIP'
-            '23f2a772c4a6e31394d6ee7b8dbb5967d3b92bd859093444913377934bede594'
+            'ce702099849465927cf47f7bc3a4a27045d0e35e16b17481ebf35e14506bafa7'
             '3953f532a3ea5fce19ee33600c6ead89dcd066df6a01d3c3ab4c24f96e46fca2'
             '4484200d90b76830b69eea3a471c103999a3ce86bb2c29e6c14c945bf4102bae'
             'dd2d248831dd4944d385ebf008426e66efe61d6fdf66f8932c963a12167947b4'
@@ -69,10 +69,10 @@
             '55dbe71dbc1f3ab60bf1fa79f7aea7ef1fe76436b1d7df48728a1f8227d2134e'
             'c70652a8b24c237bcfd27469de32797a2cb46d9f0d63d897bb6418314a25644c'
             '76b969e1534e8c355b8b524a686cbf3b24136eaa6bd40b0c09fdd9866049f159'
+            '9956a843bc8a765c130080616ccd3ebc46ea95c3a2324c4b403bc293a8705eb2'
             '30df59a9e2d95dcb720357ec4a83d9be51e59cc5551365da4c0073e68ccdec44'
-            'fd3bf124aacc45f2d0a4f1dd86303fa7f2a3d4f4eeaf33854631d6cb39e12485'
-            'b94b2e88f63cfb7087486508b8139599c89f96d7a4181c61fec4b4e250ca327a'
-            'e8ea8528ecb119de3380555c60ac8495ebdef502359fa2114c6c5c98f84698cd')
+            '588c166bf748793758a7df438cfa665b32e09ca8fbd6380be28bc5984a33523c'
+            'ab46b2c26a4dfe86486fd7e31bfc7211c515994a61a8c0cbd742f9c9e3c91873')
 
 _system_libs=('ffmpeg'
               'flac'
@@ -168,21 +168,18 @@
   # 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 ffmpeg roll requiring new channel layout API support
   # https://crbug.com/1325301
   patch -Rp1 -i ../roll-src-third_party-ffmpeg.patch
 
-  # https://chromium-review.googlesource.com/c/chromium/src/+/3488058
-  patch -Np1 -i ../chromium-libxml-unbundle.patch
-
-  # https://chromium-review.googlesource.com/c/chromium/src/+/2862724
-  patch -Np1 -i ../sql-make-VirtualCursor-standard-layout-type.patch
-
   # Fixes for building with libstdc++ instead of libc++
-  patch -Np1 -i ../patches/chromium-102-fenced_frame_utils-include.patch
-  patch -Np1 -i ../patches/chromium-102-regex_pattern-array.patch
-  patch -Np1 -i ../patches/chromium-102-swiftshader-template-instantiation.patch
-  patch -Np1 -i ../patches/chromium-102-symbolize-include.patch
+  patch -Np1 -i ../patches/chromium-103-VirtualCursor-std-layout.patch
 
   # Electron specific fixes
   patch -d third_party/electron_node/tools/inspector_protocol/jinja2 \

Deleted: chromium-libxml-unbundle.patch
===================================================================
--- chromium-libxml-unbundle.patch	2022-08-04 10:02:16 UTC (rev 1260244)
+++ chromium-libxml-unbundle.patch	2022-08-04 10:10:40 UTC (rev 1260245)
@@ -1,10 +0,0 @@
---- a/build/linux/unbundle/libxml.gn
-+++ b/build/linux/unbundle/libxml.gn
-@@ -19,6 +19,7 @@ static_library("libxml_utils") {
-     ":xml_reader",
-     ":xml_writer",
-     "//base/test:test_support",
-+    "//services/data_decoder:lib",
-     "//services/data_decoder:xml_parser_fuzzer_deps",
-   ]
-   sources = [

Added: chromium-tflite-system-zlib.patch
===================================================================
--- chromium-tflite-system-zlib.patch	                        (rev 0)
+++ chromium-tflite-system-zlib.patch	2022-08-04 10:10:40 UTC (rev 1260245)
@@ -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 {

Deleted: iwyu-add-utility-for-std-exchange.patch
===================================================================
--- iwyu-add-utility-for-std-exchange.patch	2022-08-04 10:02:16 UTC (rev 1260244)
+++ iwyu-add-utility-for-std-exchange.patch	2022-08-04 10:10:40 UTC (rev 1260245)
@@ -1,27 +0,0 @@
-From 9dd0503835dc875807ab63efb1f477bffed2a852 Mon Sep 17 00:00:00 2001
-From: Stephan Hartmann <stha09 at googlemail.com>
-Date: Mon, 25 Apr 2022 23:18:30 +0000
-Subject: [PATCH] IWYU: add utility for std::exchange
-
-Bug: 957519
-Change-Id: I307d520fdc34d2452018ed32a505e7e519739410
-Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/3604643
-Reviewed-by: Wez <wez at chromium.org>
-Commit-Queue: Stephan Hartmann <stha09 at googlemail.com>
-Cr-Commit-Position: refs/heads/main@{#995855}
----
- base/third_party/symbolize/symbolize.h | 1 +
- 1 file changed, 1 insertion(+)
-
-diff --git a/base/third_party/symbolize/symbolize.h b/base/third_party/symbolize/symbolize.h
-index 99029a968d5..278078f6071 100644
---- a/base/third_party/symbolize/symbolize.h
-+++ b/base/third_party/symbolize/symbolize.h
-@@ -61,6 +61,7 @@
- #ifdef HAVE_SYMBOLIZE
- 
- #include <algorithm>
-+#include <utility>
- 
- #if defined(__ELF__)  // defined by gcc
- #if defined(__OpenBSD__)

Modified: remove-no-opaque-pointers-flag.patch
===================================================================
--- remove-no-opaque-pointers-flag.patch	2022-08-04 10:02:16 UTC (rev 1260244)
+++ remove-no-opaque-pointers-flag.patch	2022-08-04 10:10:40 UTC (rev 1260245)
@@ -1,12 +1,12 @@
---- a/build/config/compiler/BUILD.gn	2022-05-19 10:35:52.991415777 +0000
-+++ b/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",

Deleted: sql-make-VirtualCursor-standard-layout-type.patch
===================================================================
--- sql-make-VirtualCursor-standard-layout-type.patch	2022-08-04 10:02:16 UTC (rev 1260244)
+++ sql-make-VirtualCursor-standard-layout-type.patch	2022-08-04 10:10:40 UTC (rev 1260245)
@@ -1,238 +0,0 @@
-From 144479ad7b4287bee4067f95e4218f614798a865 Mon Sep 17 00:00:00 2001
-From: Stephan Hartmann <stha09 at 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_;

Added: x11-ozone-fix-X11-screensaver-suspension.patch
===================================================================
--- x11-ozone-fix-X11-screensaver-suspension.patch	                        (rev 0)
+++ x11-ozone-fix-X11-screensaver-suspension.patch	2022-08-04 10:10:40 UTC (rev 1260245)
@@ -0,0 +1,490 @@
+From 8c1ebea5f601b0b5247535dcdfd01755f3e6e1a6 Mon Sep 17 00:00:00 2001
+From: Andrew Wolfers <aswolfers at 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 at chromium.org>
+Reviewed-by: Thomas Anderson <thomasanderson at chromium.org>
+Reviewed-by: Scott Violet <sky at 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;



More information about the arch-commits mailing list