PA: Temporary option for new PartitionAlloc location.

To make the partition_alloc directory a standalone library, I am going to:

1. Move from files from:
   /base/allocator/partition_allocator/*
   toward
   /base/allocator/partition_allocator/src/partition_alloc/*

2. Make PartitionAlloc to declare its include_dirs.

3. PartitionAlloc dependants will be able put PartitionAlloc wherever
   they want (e.g. probably in their third_party/partition_alloc) and
   to use:
   #include "partition_alloc/..."
   instead of:
   #include "base/allocator/partition_allocator/src/partition_alloc/..."

Unfortunately, the partition_alloc library is already used by PDFium.
Step (1) would break it. To achieve step 1 without breaking pdfium, this
patch adds an option for chromium to set the location of PartitionAlloc.

This is temporary and will be removed after step 1 is completed in
Chrome.
It a kind of 3-step change.

Bug:chromuium:1467773
Change-Id: I9f312f6a47976659a1e792c663006f3a75ec7fca
Reviewed-on: https://pdfium-review.googlesource.com/c/pdfium/+/111490
Reviewed-by: Tom Sepez <tsepez@chromium.org>
Commit-Queue: Arthur Sonzogni <arthursonzogni@chromium.org>
diff --git a/BUILD.gn b/BUILD.gn
index 07a5b93..3ab1ec6 100644
--- a/BUILD.gn
+++ b/BUILD.gn
@@ -46,6 +46,9 @@
   if (pdf_use_partition_alloc) {
     defines += [ "PDF_USE_PARTITION_ALLOC" ]
   }
+  if (pdf_use_partition_alloc_new_location) {
+    defines += [ "PDF_USE_PARTITION_ALLOC_NEW_LOCATION" ]
+  }
 
   if (is_win) {
     # Assume UTF-8 by default to avoid code page dependencies.
diff --git a/build_overrides/partition_alloc.gni b/build_overrides/partition_alloc.gni
index 56f913c..4a1cd1f 100644
--- a/build_overrides/partition_alloc.gni
+++ b/build_overrides/partition_alloc.gni
@@ -11,7 +11,7 @@
 # TODO(https://crbug.com/pdfium/2068) - make work with windows.
 _use_shim = !_is_using_sanitizers && !is_win
 
-# See base/allocator/partition_allocator/external_builds.md
+# See base/allocator/partition_allocator/src/partition_alloc/external_builds.md
 use_allocator_shim_default = _use_shim
 use_partition_alloc_as_malloc_default = _use_shim
 enable_backup_ref_ptr_support_default = _use_shim
diff --git a/core/fxcrt/BUILD.gn b/core/fxcrt/BUILD.gn
index c9bdfa0..ea428af 100644
--- a/core/fxcrt/BUILD.gn
+++ b/core/fxcrt/BUILD.gn
@@ -11,10 +11,17 @@
   deps = [ "../../third_party:pdfium_compiler_specific" ]
   configs += [ "../../:pdfium_strict_config" ]
   if (pdf_use_partition_alloc) {
-    public_deps = [
-      "//base/allocator/partition_allocator:partition_alloc_buildflags",
-      "//base/allocator/partition_allocator:raw_ptr",
-    ]
+    if (pdf_use_partition_alloc_new_location) {
+      public_deps = [
+        "//base/allocator/partition_allocator/src/partition_alloc:partition_alloc_buildflags",
+        "//base/allocator/partition_allocator/src/partition_alloc:raw_ptr",
+      ]
+    } else {
+      public_deps = [
+        "//base/allocator/partition_allocator:partition_alloc_buildflags",
+        "//base/allocator/partition_allocator:raw_ptr",
+      ]
+    }
   }
 }
 
@@ -142,11 +149,19 @@
   ]
   if (pdf_use_partition_alloc) {
     sources += [ "fx_memory_pa.cpp" ]
-    deps += [
-      "//base/allocator/partition_allocator:partition_alloc",
-      "//base/allocator/partition_allocator:partition_alloc_buildflags",
-      "//base/allocator/partition_allocator:raw_ptr",
-    ]
+    if (pdf_use_partition_alloc_new_location) {
+      deps += [
+        "//base/allocator/partition_allocator/src/partition_alloc",
+        "//base/allocator/partition_allocator/src/partition_alloc:partition_alloc_buildflags",
+        "//base/allocator/partition_allocator/src/partition_alloc:raw_ptr",
+      ]
+    } else {
+      deps += [
+        "//base/allocator/partition_allocator:partition_alloc",
+        "//base/allocator/partition_allocator:partition_alloc_buildflags",
+        "//base/allocator/partition_allocator:raw_ptr",
+      ]
+    }
   } else {
     sources += [ "fx_memory_malloc.cpp" ]
   }
@@ -247,7 +262,11 @@
   deps = [ ":unit_test_support" ]
   pdfium_root_dir = "../../"
   if (pdf_use_partition_alloc) {
-    deps += [ "//base/allocator/partition_allocator:partition_alloc" ]
+    if (pdf_use_partition_alloc_new_location) {
+      deps += [ "//base/allocator/partition_allocator/src/partition_alloc" ]
+    } else {
+      deps += [ "//base/allocator/partition_allocator:partition_alloc" ]
+    }
   }
   if (pdf_enable_xfa) {
     sources += [ "cfx_memorystream_unittest.cpp" ]
diff --git a/core/fxcrt/fx_memory_pa.cpp b/core/fxcrt/fx_memory_pa.cpp
index 2473fbc..e75d082 100644
--- a/core/fxcrt/fx_memory_pa.cpp
+++ b/core/fxcrt/fx_memory_pa.cpp
@@ -6,7 +6,11 @@
 
 #include "core/fxcrt/fx_memory.h"
 
+#if defined(PDF_USE_PARTITION_ALLOC_NEW_LOCATION)
+#include "base/allocator/partition_allocator/src/partition_alloc/partition_alloc.h"
+#else
 #include "base/allocator/partition_allocator/partition_alloc.h"
+#endif
 #include "core/fxcrt/fx_safe_types.h"
 #include "third_party/base/no_destructor.h"
 
diff --git a/core/fxcrt/fx_memory_unittest.cpp b/core/fxcrt/fx_memory_unittest.cpp
index 7d3fe4d..7f6a7ac 100644
--- a/core/fxcrt/fx_memory_unittest.cpp
+++ b/core/fxcrt/fx_memory_unittest.cpp
@@ -11,8 +11,12 @@
 #include "testing/gtest/include/gtest/gtest.h"
 
 #if defined(PDF_USE_PARTITION_ALLOC)
+#if defined(PDF_USE_PARTITION_ALLOC_NEW_LOCATION)
+#include "base/allocator/partition_allocator/src/partition_alloc/partition_address_space.h"
+#else
 #include "base/allocator/partition_allocator/partition_address_space.h"
 #endif
+#endif
 
 namespace {
 
diff --git a/core/fxcrt/unowned_ptr.h b/core/fxcrt/unowned_ptr.h
index fa78beb..d642483 100644
--- a/core/fxcrt/unowned_ptr.h
+++ b/core/fxcrt/unowned_ptr.h
@@ -39,7 +39,11 @@
 #include "build/build_config.h"
 
 #if defined(PDF_USE_PARTITION_ALLOC)
+#if defined(PDF_USE_PARTITION_ALLOC_NEW_LOCATION)
+#include "base/allocator/partition_allocator/src/partition_alloc/partition_alloc_buildflags.h"
+#else
 #include "base/allocator/partition_allocator/partition_alloc_buildflags.h"
+#endif
 
 // Can only use base::raw_ptr<> impls that force nullptr initialization.
 #if BUILDFLAG(ENABLE_BACKUP_REF_PTR_SUPPORT) || BUILDFLAG(USE_ASAN_UNOWNED_PTR)
@@ -52,7 +56,11 @@
 #endif  // PDF_USE_PARTITION_ALLOC
 
 #if defined(UNOWNED_PTR_IS_BASE_RAW_PTR)
+#if defined(PDF_USE_PARTITION_ALLOC_NEW_LOCATION)
+#include "base/allocator/partition_allocator/src/partition_alloc/pointers/raw_ptr.h"
+#else
 #include "base/allocator/partition_allocator/pointers/raw_ptr.h"
+#endif
 
 template <typename T>
 using UnownedPtr = raw_ptr<T>;
diff --git a/core/fxcrt/unowned_ptr_unittest.cpp b/core/fxcrt/unowned_ptr_unittest.cpp
index 8c55108..99b2892 100644
--- a/core/fxcrt/unowned_ptr_unittest.cpp
+++ b/core/fxcrt/unowned_ptr_unittest.cpp
@@ -14,8 +14,12 @@
 #include "third_party/base/containers/contains.h"
 
 #if defined(PDF_USE_PARTITION_ALLOC)
+#if defined(PDF_USE_PARTITION_ALLOC_NEW_LOCATION)
+#include "base/allocator/partition_allocator/src/partition_alloc/shim/allocator_shim_default_dispatch_to_partition_alloc.h"
+#else
 #include "base/allocator/partition_allocator/shim/allocator_shim_default_dispatch_to_partition_alloc.h"
 #endif
+#endif
 
 namespace fxcrt {
 namespace {
diff --git a/pdfium.gni b/pdfium.gni
index ffa740a..f349a26 100644
--- a/pdfium.gni
+++ b/pdfium.gni
@@ -48,6 +48,10 @@
   # malloc is controlled by args in build_overrides/partition_alloc.gni.
   pdf_use_partition_alloc = pdf_use_partition_alloc_override
 
+  # Temporary config allowing chromium to switch its location of the
+  # partition_alloc library. https://crbug.com/1467773
+  pdf_use_partition_alloc_new_location = false
+
   # Build PDFium to use Skia (experimental) for all PDFium graphics.
   # If enabled, coexists in build with AGG graphics and the default
   # renderer is selectable at runtime.
diff --git a/samples/BUILD.gn b/samples/BUILD.gn
index 981750b..000cfb6 100644
--- a/samples/BUILD.gn
+++ b/samples/BUILD.gn
@@ -24,6 +24,9 @@
   if (pdf_use_partition_alloc) {
     defines += [ "PDF_USE_PARTITION_ALLOC" ]
   }
+  if (pdf_use_partition_alloc_new_location) {
+    defines += [ "PDF_USE_PARTITION_ALLOC_NEW_LOCATION" ]
+  }
   if (enable_callgrind) {
     defines += [ "ENABLE_CALLGRIND" ]
   }
diff --git a/testing/BUILD.gn b/testing/BUILD.gn
index 331c2af..4044dec 100644
--- a/testing/BUILD.gn
+++ b/testing/BUILD.gn
@@ -56,7 +56,11 @@
       "allocator_shim_config.cpp",
       "allocator_shim_config.h",
     ]
-    deps += [ "//base/allocator/partition_allocator:partition_alloc" ]
+    if (pdf_use_partition_alloc_new_location) {
+      deps += [ "//base/allocator/partition_allocator/src/partition_alloc" ]
+    } else {
+      deps += [ "//base/allocator/partition_allocator:partition_alloc" ]
+    }
   }
   if (pdf_enable_v8) {
     sources += [
diff --git a/testing/allocator_shim_config.cpp b/testing/allocator_shim_config.cpp
index 8f0380d..232e735 100644
--- a/testing/allocator_shim_config.cpp
+++ b/testing/allocator_shim_config.cpp
@@ -4,8 +4,13 @@
 
 #include "testing/allocator_shim_config.h"
 
+#if defined(PDF_USE_PARTITION_ALLOC_NEW_LOCATION)
+#include "base/allocator/partition_allocator/src/partition_alloc/partition_alloc_buildflags.h"
+#include "base/allocator/partition_allocator/src/partition_alloc/shim/allocator_shim.h"
+#else
 #include "base/allocator/partition_allocator/partition_alloc_buildflags.h"
 #include "base/allocator/partition_allocator/shim/allocator_shim.h"
+#endif
 
 namespace pdfium {