Add option for building with C++20 and roll DEPS for Abseil.

To make this DEPS roll work, add an option to build with C++20 and turn
it on for Windows component builds.

Roll third_party/abseil-cpp/ 384efd2e8..1016c233b (1 commit)

https://chromium.googlesource.com/chromium/src/third_party/abseil-cpp.git/+log/384efd2e85fa..1016c233b46f

Created with:
  roll-dep third_party/abseil-cpp

Bug: pdfium:1932
Change-Id: I6d77635190d68a40c5eeaf424daf8ae3c97fa219
Reviewed-on: https://pdfium-review.googlesource.com/c/pdfium/+/102040
Reviewed-by: K. Moon <kmoon@chromium.org>
Commit-Queue: Lei Zhang <thestig@chromium.org>
diff --git a/DEPS b/DEPS
index ed29f89..c37a2e7 100644
--- a/DEPS
+++ b/DEPS
@@ -34,7 +34,7 @@
   # Three lines of non-changing comments so that
   # the commit queue can handle CLs rolling abseil
   # and whatever else without interference from each other.
-  'abseil_revision': '384efd2e85fae94657ff13c05fab21f6b44c3098',
+  'abseil_revision': '1016c233b46f43e324184d28281eeb75e3e14f38',
   # Three lines of non-changing comments so that
   # the commit queue can handle CLs rolling android_ndk
   # and whatever else without interference from each other.
diff --git a/build_overrides/BUILDCONFIG.gn b/build_overrides/BUILDCONFIG.gn
index 768fe60..c425b91 100644
--- a/build_overrides/BUILDCONFIG.gn
+++ b/build_overrides/BUILDCONFIG.gn
@@ -402,7 +402,10 @@
 # =============================================================================
 # Begin PDFIUM MODIFICATIONS
 # =============================================================================
-default_compiler_configs += [ "//build_overrides/compiler:force_cxx17" ]
+import("//pdfium.gni")
+if (!pdf_use_cxx20) {
+  default_compiler_configs += [ "//build_overrides/compiler:force_cxx17" ]
+}
 
 # =============================================================================
 # End PDFIUM MODIFICATIONS
diff --git a/build_overrides/pdfium.gni b/build_overrides/pdfium.gni
index b7dc9e0..85f15e6 100644
--- a/build_overrides/pdfium.gni
+++ b/build_overrides/pdfium.gni
@@ -17,6 +17,10 @@
 # Default: Without XFA support.
 pdf_enable_xfa_override = false
 
+# Build PDFium using C++20 if set to true. Otherwise builds with C++17.
+# Default: True for Windows component builds.
+pdf_use_cxx20_override = is_win && is_component_build
+
 # Build PDFium with PartitionAlloc support, directing `fxcrt` to use
 # it as its memory allocator in lieu of `malloc()`.
 # Default: Use PartitionAlloc when building with Clang.
diff --git a/pdfium.gni b/pdfium.gni
index acbc334..72c42fe 100644
--- a/pdfium.gni
+++ b/pdfium.gni
@@ -36,6 +36,9 @@
   # If XFA, also support tiff codec. Ignored if not XFA.
   pdf_enable_xfa_tiff = true
 
+  # Build PDFium with C++20.
+  pdf_use_cxx20 = pdf_use_cxx20_override
+
   # Build PDFium with PartitionAlloc as the memory allocator.
   pdf_use_partition_alloc = pdf_use_partition_alloc_override