diff --git a/AUTHORS b/AUTHORS
index a2016b0..ac46f9f 100644
--- a/AUTHORS
+++ b/AUTHORS
@@ -232,7 +232,6 @@
 Charles Vaughn <cvaughn@gmail.com>
 Cheng Zhao <zcbenz@gmail.com>
 Cheng Yu <yuzichengcode@gmail.com>
-Cheung Ho <uioptt24@gmail.com>
 Choongwoo Han <cwhan.tunz@gmail.com>
 Choudhury M. Shamsujjoha <choudhury.s@samsung.com>
 Chris Greene <cwgreene@amazon.com>
@@ -278,6 +277,7 @@
 Dániel Bátyai <dbatyai@inf.u-szeged.hu>
 Dániel Vince <vinced@inf.u-szeged.hu>
 Daniil Suvorov <severecloud@gmail.com>
+Danny Weiss <danny.weiss.fr@gmail.com>
 Daoming Qiu <daoming.qiu@intel.com>
 Darik Harter <darik.harter@gmail.com>
 Darshan Sen <raisinten@gmail.com>
@@ -377,6 +377,7 @@
 Felipe Erias Morandeira <felipeerias@gmail.com>
 Felix H. Dahlke <fhd@ubercode.de>
 Felix Weilbach <feweilbach@gmail.com>
+Feng Shengyuan <fengshengyuan@agora.io>
 Feng Yu <f3n67u@gmail.com>
 Fengrong Fang <fr.fang@samsung.com>
 Fernando Jiménez Moreno <ferjmoreno@gmail.com>
@@ -449,8 +450,10 @@
 Henrique de Carvalho <decarv.henrique@gmail.com>
 Henrique Limas <henrique.ramos.limas@gmail.com>
 Himanshu Joshi <h.joshi@samsung.com>
+Himanshu Nayak <himanshu.nayak@amd.corp-partner.google.com>
 Hiroki Oshima <hiroki.oshima@gmail.com>
 Hiroyuki Matsuda <gsittyz@gmail.com>
+Ho Cheung <uioptt24@gmail.com>
 Hodol Han <bab6ting@gmail.com>
 Holger Kraus <kraush@amazon.com>
 Hong Zheng <hong.zheng@intel.com>
@@ -604,6 +607,7 @@
 John Yani <vanuan@gmail.com>
 John Yoo <nearbyh13@gmail.com>
 Johnson Lin <johnson.lin@intel.com>
+Jon Jensen <jonj@netflix.com>
 Jonathan Frazer <listedegarde@gmail.com>
 Jonathan Garbee <jonathan@garbee.me>
 Jonathan Hacker <jhacker@arcanefour.com>
@@ -718,6 +722,7 @@
 Kyungsun Lee <kyungsuny.lee@gmail.com>
 Kyungtae Kim <ktf.kim@samsung.com>
 Kyungyoung Heo <bbvch13531@gmail.com>
+Kyutae Lee <gorisanson@gmail.com>
 Lalit Chandivade <lalit.chandivade@einfochips.com>
 Lam Lu <lamlu@amazon.com>
 Laszlo Gombos <l.gombos@samsung.com>
@@ -760,7 +765,7 @@
 Luke Zarko <lukezarko@gmail.com>
 Luoxi Pan <l.panpax@gmail.com>
 Lu Yahan <yahan@iscas.ac.cn>
-Ma Aiguo <maaiguo@uniontech.com>
+Ma Aiguo <imaiguo@gmail.com>
 Maarten Lankhorst <m.b.lankhorst@gmail.com>
 Maciej Pawlowski <m.pawlowski@eyeo.com>
 Magnus Danielsson <fuzzac@gmail.com>
@@ -855,6 +860,7 @@
 Mingeun Park <mindal99546@gmail.com>
 Minggang Wang <minggang.wang@intel.com>
 Mingmin Xie <melvinxie@gmail.com>
+Mingming Xu <mingming1.xu@intel.com>
 Minjeong Kim <deoxyribonucleicacid150@gmail.com>
 Minjeong Lee <apenr1234@gmail.com>
 Minseok Koo <kei98301@gmail.com>
@@ -1196,6 +1202,7 @@
 Suyash Sengar <suyash.s@samsung.com>
 Swarali Raut <swarali.sr@samsung.com>
 Swati Jaiswal <swa.jaiswal@samsung.com>
+Syed Wajid <syed.wajid@samsung.com>
 Sylvain Zimmer <sylvinus@gmail.com>
 Sylvestre Ledru <sylvestre.ledru@gmail.com>
 Synthia Islam <synthia.is@samsung.com>
@@ -1327,7 +1334,9 @@
 Yang Liu <jd9668954@gmail.com>
 Yannic Bonenberger <yannic.bonenberger@gmail.com>
 Yarin Kaul <yarin.kaul@gmail.com>
+Yash Joshi <yashjoshimail@gmail.com>
 Yash Vempati <vempatiy@amazon.com>
+Yash Vinayak <yash.vinayak@samsung.com>
 Ye Liu <cbakgly@gmail.com>
 Yeol Park <peary2@gmail.com>
 Yeonwoo Jo <yeonwoo.jo.92@gmail.com>
@@ -1378,6 +1387,7 @@
 Zeqin Chen <talonchen@tencent.com>
 Zhang Hao <zhanghao.m@bytedance.com>
 Zhang Hao <15686357310a@gmail.com>
+Zhaoming Jiang <zhaoming.jiang@intel.com>
 Zhaoze Zhou <zhaoze.zhou@partner.samsung.com>
 Zheda Chen <zheda.chen@intel.com>
 Zheng Chuang <zhengchuangscu@gmail.com>
diff --git a/base/compiler_specific.h b/base/compiler_specific.h
index 0174b6d..8085338 100644
--- a/base/compiler_specific.h
+++ b/base/compiler_specific.h
@@ -64,7 +64,7 @@
 // folding of multiple identical caller functions into a single signature. To
 // prevent code folding, see NO_CODE_FOLDING() in base/debug/alias.h.
 // Use like:
-//   void NOT_TAIL_CALLED FooBar();
+//   NOT_TAIL_CALLED void FooBar();
 #if defined(__clang__) && HAS_ATTRIBUTE(not_tail_called)
 #define NOT_TAIL_CALLED __attribute__((not_tail_called))
 #else
diff --git a/base/containers/checked_iterators.h b/base/containers/checked_iterators.h
index dc8d2ba..0cd2832 100644
--- a/base/containers/checked_iterators.h
+++ b/base/containers/checked_iterators.h
@@ -11,6 +11,7 @@
 
 #include "polyfills/base/check_op.h"
 #include "base/containers/util.h"
+#include "polyfills/base/memory/raw_ptr_exclusion.h"
 #include "build/build_config.h"
 
 namespace gurl_base {
@@ -207,9 +208,15 @@
     GURL_CHECK_EQ(end_, other.end_);
   }
 
-  const T* start_ = nullptr;
-  T* current_ = nullptr;
-  const T* end_ = nullptr;
+  // This field is not a raw_ptr<> because it was filtered by the rewriter for:
+  // #union, #constexpr-ctor-field-initializer
+  RAW_PTR_EXCLUSION const T* start_ = nullptr;
+  // This field is not a raw_ptr<> because it was filtered by the rewriter for:
+  // #union, #constexpr-ctor-field-initializer
+  RAW_PTR_EXCLUSION T* current_ = nullptr;
+  // This field is not a raw_ptr<> because it was filtered by the rewriter for:
+  // #union, #constexpr-ctor-field-initializer
+  RAW_PTR_EXCLUSION const T* end_ = nullptr;
 };
 
 template <typename T>
diff --git a/base/containers/span.h b/base/containers/span.h
index 40e325f..1496611 100644
--- a/base/containers/span.h
+++ b/base/containers/span.h
@@ -18,6 +18,7 @@
 #include "base/containers/checked_iterators.h"
 #include "base/containers/contiguous_iterator.h"
 #include "base/cxx20_to_address.h"
+#include "base/numerics/safe_math.h"
 
 namespace gurl_base {
 
@@ -256,16 +257,16 @@
 
   template <typename It,
             typename = internal::EnableIfCompatibleContiguousIterator<It, T>>
-  constexpr span(It first, size_t count) noexcept
+  constexpr span(It first, StrictNumeric<size_t> count) noexcept
       : ExtentStorage(count),
         // The use of to_address() here is to handle the case where the iterator
         // `first` is pointing to the container's `end()`. In that case we can
         // not use the address returned from the iterator, or dereference it
-        // through the iterator's `operator*`, but we can store it. We must assume
-        // in this case that `count` is 0, since the iterator does not point to
-        // valid data. Future hardening of iterators may disallow pulling the
-        // address from `end()`, as demonstrated by asserts() in libstdc++:
-        // https://gcc.gnu.org/bugzilla/show_bug.cgi?id=93960.
+        // through the iterator's `operator*`, but we can store it. We must
+        // assume in this case that `count` is 0, since the iterator does not
+        // point to valid data. Future hardening of iterators may disallow
+        // pulling the address from `end()`, as demonstrated by asserts() in
+        // libstdc++: https://gcc.gnu.org/bugzilla/show_bug.cgi?id=93960.
         //
         // The span API dictates that the `data()` is accessible when size is 0,
         // since the pointer may be valid, so we cannot prevent storing and
@@ -473,7 +474,7 @@
 
 // Type-deducing helpers for constructing a span.
 template <int&... ExplicitArgumentBarrier, typename It>
-constexpr auto make_span(It it, size_t size) noexcept {
+constexpr auto make_span(It it, StrictNumeric<size_t> size) noexcept {
   using T = std::remove_reference_t<iter_reference_t<It>>;
   return span<T>(it, size);
 }
@@ -508,7 +509,7 @@
 //
 // Usage: auto static_span = gurl_base::make_span<N>(...);
 template <size_t N, int&... ExplicitArgumentBarrier, typename It>
-constexpr auto make_span(It it, size_t size) noexcept {
+constexpr auto make_span(It it, StrictNumeric<size_t> size) noexcept {
   using T = std::remove_reference_t<iter_reference_t<It>>;
   return span<T, N>(it, size);
 }
diff --git a/base/cxx17_backports.h b/base/cxx17_backports.h
index ce59af0..a784f84 100644
--- a/base/cxx17_backports.h
+++ b/base/cxx17_backports.h
@@ -5,27 +5,13 @@
 #ifndef BASE_CXX17_BACKPORTS_H_
 #define BASE_CXX17_BACKPORTS_H_
 
-#include <functional>
-
-#include "polyfills/base/check.h"
+#include <algorithm>
 
 namespace gurl_base {
 
-// C++14 implementation of C++17's std::clamp():
-// https://en.cppreference.com/w/cpp/algorithm/clamp
-// Please note that the C++ spec makes it undefined behavior to call std::clamp
-// with a value of `lo` that compares greater than the value of `hi`. This
-// implementation uses a GURL_CHECK to enforce this as a hard restriction.
-template <typename T, typename Compare>
-constexpr const T& clamp(const T& v, const T& lo, const T& hi, Compare comp) {
-  GURL_CHECK(!comp(hi, lo));
-  return comp(v, lo) ? lo : comp(hi, v) ? hi : v;
-}
-
-template <typename T>
-constexpr const T& clamp(const T& v, const T& lo, const T& hi) {
-  return gurl_base::clamp(v, lo, hi, std::less<T>{});
-}
+// TODO(crbug.com/1373621): Rewrite all uses of gurl_base::clamp as std::clamp and
+// remove this file.
+using std::clamp;
 
 }  // namespace base
 
diff --git a/base/memory/raw_ptr_exclusion.h b/base/memory/raw_ptr_exclusion.h
index 2a30e26..3ce1d60 100644
--- a/base/memory/raw_ptr_exclusion.h
+++ b/base/memory/raw_ptr_exclusion.h
@@ -1,27 +1,13 @@
-// Copyright 2022 The Chromium Authors
+// Copyright 2023 The Chromium Authors
 // Use of this source code is governed by a BSD-style license that can be
 // found in the LICENSE file.
 
 #ifndef BASE_MEMORY_RAW_PTR_EXCLUSION_H_
 #define BASE_MEMORY_RAW_PTR_EXCLUSION_H_
 
-#include "polyfills/base/allocator/buildflags.h"
-#include "base/compiler_specific.h"
-#include "build/build_config.h"
-
-#if HAS_ATTRIBUTE(annotate)
-#if defined(OFFICIAL_BUILD) && !BUILDFLAG(FORCE_ENABLE_RAW_PTR_EXCLUSION)
-// The annotation changed compiler output and increased binary size so disable
-// for official builds.
-// TODO(crbug.com/1320670): Remove when issue is resolved.
-#define RAW_PTR_EXCLUSION
-#else
-// Marks a field as excluded from the raw_ptr usage enforcement clang plugin.
-// Example: RAW_PTR_EXCLUSION Foo* foo_;
-#define RAW_PTR_EXCLUSION __attribute__((annotate("raw_ptr_exclusion")))
-#endif
-#else
-#define RAW_PTR_EXCLUSION
-#endif
+// Although `raw_ptr` is part of the standalone PA distribution, it is
+// easier to use the shorter path in `//base/memory`. We retain this
+// facade header for ease of typing.
+#include "base/allocator/partition_allocator/pointers/raw_ptr_exclusion.h"  // IWYU pragma: export
 
 #endif  // BASE_MEMORY_RAW_PTR_EXCLUSION_H_
diff --git a/base/numerics/safe_conversions.h b/base/numerics/safe_conversions.h
index 4a9494e..3e04bf4 100644
--- a/base/numerics/safe_conversions.h
+++ b/base/numerics/safe_conversions.h
@@ -20,10 +20,6 @@
 #define BASE_HAS_OPTIMIZED_SAFE_CONVERSIONS (0)
 #endif
 
-#if !BASE_NUMERICS_DISABLE_OSTREAM_OPERATORS
-#include <ostream>
-#endif
-
 namespace gurl_base {
 namespace internal {
 
diff --git a/base/strings/safe_sprintf.cc b/base/strings/safe_sprintf.cc
index 0b53dff..f30360b 100644
--- a/base/strings/safe_sprintf.cc
+++ b/base/strings/safe_sprintf.cc
@@ -418,18 +418,19 @@
     }
   } while (num || padding || (reverse_prefix > prefix));
 
-  // Conversion to ASCII actually resulted in the digits being in reverse
-  // order. We can't easily generate them in forward order, as we can't tell
-  // the number of characters needed until we are done converting.
-  // So, now, we reverse the string (except for the possible '-' sign).
-  char* front = buffer_ + start;
-  char* back = GetInsertionPoint();
-  while (--back > front) {
-    char ch = *back;
-    *back = *front;
-    *front++ = ch;
+  if (start < size_) {
+    // Conversion to ASCII actually resulted in the digits being in reverse
+    // order. We can't easily generate them in forward order, as we can't tell
+    // the number of characters needed until we are done converting.
+    // So, now, we reverse the string (except for the possible '-' sign).
+    char* front = buffer_ + start;
+    char* back = GetInsertionPoint();
+    while (--back > front) {
+      char ch = *back;
+      *back = *front;
+      *front++ = ch;
+    }
   }
-
   IncrementCount(discarded);
   return !discarded;
 }
diff --git a/base/strings/safe_sprintf.h b/base/strings/safe_sprintf.h
index de4f06a..2948712 100644
--- a/base/strings/safe_sprintf.h
+++ b/base/strings/safe_sprintf.h
@@ -9,6 +9,7 @@
 #include <stdint.h>
 #include <stdlib.h>
 
+#include "polyfills/base/memory/raw_ptr_exclusion.h"
 #include "build/build_config.h"
 
 #if BUILDFLAG(IS_POSIX) || BUILDFLAG(IS_FUCHSIA)
@@ -197,7 +198,9 @@
     const char* str;
 
     // A pointer to an arbitrary object.
-    const void* ptr;
+    // This field is not a raw_ptr<> because it was filtered by the rewriter
+    // for: #union
+    RAW_PTR_EXCLUSION const void* ptr;
   };
   const enum Type type;
 };
diff --git a/base/strings/safe_sprintf_unittest.cc b/base/strings/safe_sprintf_unittest.cc
index 76d72b2..af52d1c 100644
--- a/base/strings/safe_sprintf_unittest.cc
+++ b/base/strings/safe_sprintf_unittest.cc
@@ -483,14 +483,7 @@
 
 }  // anonymous namespace
 
-// TODO(crbug.com/1369007): Fails when OOB protection is turned on.
-#if BUILDFLAG(ENABLE_BACKUP_REF_PTR_SUPPORT) || \
-    BUILDFLAG(ENABLE_MTE_CHECKED_PTR_SUPPORT)
-#define MAYBE_Truncation DISABLED_Truncation
-#else
-#define MAYBE_Truncation Truncation
-#endif
-TEST(SafeSPrintfTest, MAYBE_Truncation) {
+TEST(SafeSPrintfTest, Truncation) {
   // We use PrintLongString() to print a complex long string and then
   // truncate to all possible lengths. This ends up exercising a lot of
   // different code paths in SafeSPrintf() and IToASCII(), as truncation can
diff --git a/base/strings/string_util.cc b/base/strings/string_util.cc
index f92029f..f345244 100644
--- a/base/strings/string_util.cc
+++ b/base/strings/string_util.cc
@@ -29,6 +29,7 @@
 #include "base/strings/utf_string_conversions.h"
 #include "base/third_party/icu/icu_utf.h"
 #include "build/build_config.h"
+#include "absl/types/optional.h"
 
 namespace gurl_base {
 
@@ -391,13 +392,29 @@
     StringPiece16 format_string,
     const std::vector<std::u16string>& subst,
     std::vector<size_t>* offsets) {
-  return internal::DoReplaceStringPlaceholders(format_string, subst, offsets);
+  absl::optional<std::u16string> replacement =
+      internal::DoReplaceStringPlaceholders(
+          format_string, subst,
+          /*placeholder_prefix*/ u'$',
+          /*should_escape_multiple_placeholder_prefixes*/ true,
+          /*is_strict_mode*/ false, offsets);
+
+  GURL_DCHECK(replacement);
+  return replacement.value();
 }
 
 std::string ReplaceStringPlaceholders(StringPiece format_string,
                                       const std::vector<std::string>& subst,
                                       std::vector<size_t>* offsets) {
-  return internal::DoReplaceStringPlaceholders(format_string, subst, offsets);
+  absl::optional<std::string> replacement =
+      internal::DoReplaceStringPlaceholders(
+          format_string, subst,
+          /*placeholder_prefix*/ '$',
+          /*should_escape_multiple_placeholder_prefixes*/ true,
+          /*is_strict_mode*/ false, offsets);
+
+  GURL_DCHECK(replacement);
+  return replacement.value();
 }
 
 std::u16string ReplaceStringPlaceholders(const std::u16string& format_string,
diff --git a/base/strings/string_util_impl_helpers.h b/base/strings/string_util_impl_helpers.h
index 4cd9a3b..9578477 100644
--- a/base/strings/string_util_impl_helpers.h
+++ b/base/strings/string_util_impl_helpers.h
@@ -14,6 +14,7 @@
 #include "base/ranges/algorithm.h"
 #include "base/strings/string_piece.h"
 #include "base/third_party/icu/icu_utf.h"
+#include "absl/types/optional.h"
 
 namespace gurl_base::internal {
 
@@ -494,56 +495,90 @@
   return result;
 }
 
+// Replaces placeholders in `format_string` with values from `subst`.
+// * `placeholder_prefix`: Allows using a specific character as the placeholder
+// prefix. `gurl_base::ReplaceStringPlaceholders` uses '$'.
+// * `should_escape_multiple_placeholder_prefixes`:
+//   * If this parameter is `true`, which is the case with
+//   `gurl_base::ReplaceStringPlaceholders`, `placeholder_prefix` characters are
+//   replaced by that number less one. Eg $$->$, $$$->$$, etc.
+//   * If this parameter is `false`, each literal `placeholder_prefix` character
+//   in `format_string` is escaped with another `placeholder_prefix`. For
+//   instance, with `%` as the `placeholder_prefix`: %%->%, %%%%->%%, etc.
+// * `is_strict_mode`:
+//   * If this parameter is `true`, error handling is stricter. The function
+//   returns `absl::nullopt` if:
+//     * a placeholder %N is encountered where N > substitutions.size().
+//     * a literal `%` is not escaped with a `%`.
 template <typename T, typename CharT = typename T::value_type>
-std::basic_string<CharT> DoReplaceStringPlaceholders(
+absl::optional<std::basic_string<CharT>> DoReplaceStringPlaceholders(
     T format_string,
     const std::vector<std::basic_string<CharT>>& subst,
+    const CharT placeholder_prefix,
+    const bool should_escape_multiple_placeholder_prefixes,
+    const bool is_strict_mode,
     std::vector<size_t>* offsets) {
   size_t substitutions = subst.size();
   GURL_DCHECK_LT(substitutions, 11U);
 
   size_t sub_length = 0;
-  for (const auto& cur : subst)
+  for (const auto& cur : subst) {
     sub_length += cur.length();
+  }
 
   std::basic_string<CharT> formatted;
   formatted.reserve(format_string.length() + sub_length);
 
   std::vector<ReplacementOffset> r_offsets;
   for (auto i = format_string.begin(); i != format_string.end(); ++i) {
-    if ('$' == *i) {
+    if (placeholder_prefix == *i) {
       if (i + 1 != format_string.end()) {
         ++i;
-        if ('$' == *i) {
-          while (i != format_string.end() && '$' == *i) {
-            formatted.push_back('$');
+        if (placeholder_prefix == *i) {
+          do {
+            formatted.push_back(placeholder_prefix);
             ++i;
-          }
+          } while (should_escape_multiple_placeholder_prefixes &&
+                   i != format_string.end() && placeholder_prefix == *i);
           --i;
         } else {
           if (*i < '1' || *i > '9') {
-            GURL_DLOG(ERROR) << "Invalid placeholder: $"
-                        << std::basic_string<CharT>(1, *i);
+            if (is_strict_mode) {
+              GURL_DLOG(ERROR) << "Invalid placeholder after placeholder prefix: "
+                          << std::basic_string<CharT>(1, placeholder_prefix)
+                          << std::basic_string<CharT>(1, *i);
+              return absl::nullopt;
+            }
+
             continue;
           }
-          size_t index = static_cast<size_t>(*i - '1');
+          const size_t index = static_cast<size_t>(*i - '1');
           if (offsets) {
             ReplacementOffset r_offset(index, formatted.size());
             r_offsets.insert(
                 ranges::upper_bound(r_offsets, r_offset, &CompareParameter),
                 r_offset);
           }
-          if (index < substitutions)
+          if (index < substitutions) {
             formatted.append(subst.at(index));
+          } else if (is_strict_mode) {
+            GURL_DLOG(ERROR) << "index out of range: " << index << ": "
+                        << substitutions;
+            return absl::nullopt;
+          }
         }
+      } else if (is_strict_mode) {
+        GURL_DLOG(ERROR) << "unexpected placeholder prefix at end of string";
+        return absl::nullopt;
       }
     } else {
       formatted.push_back(*i);
     }
   }
   if (offsets) {
-    for (const auto& cur : r_offsets)
+    for (const auto& cur : r_offsets) {
       offsets->push_back(cur.offset);
+    }
   }
   return formatted;
 }
diff --git a/base/strings/string_util_win.cc b/base/strings/string_util_win.cc
index c3569b3..ea84d0b 100644
--- a/base/strings/string_util_win.cc
+++ b/base/strings/string_util_win.cc
@@ -6,6 +6,7 @@
 
 #include "base/ranges/algorithm.h"
 #include "base/strings/string_util_impl_helpers.h"
+#include "absl/types/optional.h"
 
 namespace gurl_base {
 
@@ -128,7 +129,15 @@
 std::wstring ReplaceStringPlaceholders(WStringPiece format_string,
                                        const std::vector<std::wstring>& subst,
                                        std::vector<size_t>* offsets) {
-  return internal::DoReplaceStringPlaceholders(format_string, subst, offsets);
+  absl::optional<std::wstring> replacement =
+      internal::DoReplaceStringPlaceholders(
+          format_string, subst,
+          /*placeholder_prefix*/ L'$',
+          /*should_escape_multiple_placeholder_prefixes*/ true,
+          /*is_strict_mode*/ false, offsets);
+
+  GURL_DCHECK(replacement);
+  return replacement.value();
 }
 
 }  // namespace base
diff --git a/build/build_config.h b/build/build_config.h
index 6811872..6db5d9b 100644
--- a/build/build_config.h
+++ b/build/build_config.h
@@ -26,6 +26,9 @@
 
 // This file also adds defines specific to the platform, architecture etc.
 //
+//  Platform:
+//    IS_OZONE
+//
 //  Compiler:
 //    COMPILER_MSVC / COMPILER_GCC
 //
diff --git a/copy.bara.sky b/copy.bara.sky
index a586cea..6c374ad 100644
--- a/copy.bara.sky
+++ b/copy.bara.sky
@@ -21,7 +21,7 @@
         "base/containers/util.h",
         "base/cxx17_backports.h",
         "base/cxx20_to_address.h",
-	"base/cxx20_is_constant_evaluated.h",
+        "base/cxx20_is_constant_evaluated.h",
         "base/debug/crash_logging.cc",
         "base/debug/crash_logging.h",
         "base/debug/leak_annotations.h",
@@ -69,7 +69,7 @@
 # Those headers are pulled from //polyfill instead of copied from Chromium.
 # Should be in sync with //polyfill/BUILD.
 polyfilled_headers = [
-    "base/allocator/buildflags.h",
+    #"base/allocator/buildflags.h",
     "base/base_export.h",
     "base/check.h",
     "base/check_op.h",
@@ -81,6 +81,7 @@
     "base/feature_list.h",
     "base/logging.h",
     "base/memory/raw_ptr.h",
+    "base/memory/raw_ptr_exclusion.h",
     "base/notreached.h",
     "base/trace_event/memory_usage_estimator.h",
     "third_party/perfetto/include/perfetto/tracing/traced_value.h",
@@ -109,7 +110,6 @@
 
     # Fix some Perfetto includes.
     core.replace("perfetto/tracing/traced_value_forward.h", "perfetto/tracing/traced_value.h"),
-
     core.replace("#include \"base/strings/string_number_conversions_win.h\"", ""),
     core.replace("#include \"base/allocator/partition_allocator/partition_alloc_config.h\"", ""),
 
diff --git a/polyfills/BUILD b/polyfills/BUILD
index 7e887e3..6bd0565 100644
--- a/polyfills/BUILD
+++ b/polyfills/BUILD
@@ -18,6 +18,7 @@
         "base/feature_list.h",
         "base/logging.h",
         "base/memory/raw_ptr.h",
+        "base/memory/raw_ptr_exclusion.h",
         "base/metrics/histogram_macros.h",
         "base/notreached.h",
         "base/trace_event/memory_usage_estimator.h",
diff --git a/polyfills/base/memory/raw_ptr_exclusion.h b/polyfills/base/memory/raw_ptr_exclusion.h
new file mode 100644
index 0000000..2ef3a8b
--- /dev/null
+++ b/polyfills/base/memory/raw_ptr_exclusion.h
@@ -0,0 +1,10 @@
+// Copyright 2022 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#ifndef POLYFILLS_BASE_MEMORY_RAW_PTR_EXCLUSION_H_
+#define POLYFILLS_BASE_MEMORY_RAW_PTR_EXCLUSION_H_
+
+#define RAW_PTR_EXCLUSION
+
+#endif  // POLYFILLS_BASE_MEMORY_RAW_PTR_EXCLUSION_H_
diff --git a/url/gurl.cc b/url/gurl.cc
index c5e3f19..87097a9 100644
--- a/url/gurl.cc
+++ b/url/gurl.cc
@@ -362,7 +362,7 @@
 }
 
 bool GURL::SchemeIsHTTPOrHTTPS() const {
-  return SchemeIs(url::kHttpScheme) || SchemeIs(url::kHttpsScheme);
+  return SchemeIs(url::kHttpsScheme) || SchemeIs(url::kHttpScheme);
 }
 
 bool GURL::SchemeIsWSOrWSS() const {
diff --git a/url/origin.cc b/url/origin.cc
index 1b416a9..b16d3df 100644
--- a/url/origin.cc
+++ b/url/origin.cc
@@ -375,11 +375,13 @@
   if (!reader.ReadUInt64(&nonce_low))
     return absl::nullopt;
 
+  absl::optional<gurl_base::UnguessableToken> nonce_token =
+      gurl_base::UnguessableToken::Deserialize(nonce_high, nonce_low);
+
   Origin::Nonce nonce;
-  if (nonce_high != 0 && nonce_low != 0) {
+  if (nonce_token.has_value()) {
     // The serialized nonce wasn't empty, so copy it here.
-    nonce = Origin::Nonce(
-        gurl_base::UnguessableToken::Deserialize(nonce_high, nonce_low));
+    nonce = Origin::Nonce(nonce_token.value());
   }
   Origin origin;
   origin.nonce_ = std::move(nonce);
diff --git a/url/origin.h b/url/origin.h
index 5da5d84..292d8d4 100644
--- a/url/origin.h
+++ b/url/origin.h
@@ -13,6 +13,7 @@
 #include "polyfills/base/component_export.h"
 #include "polyfills/base/debug/alias.h"
 #include "base/debug/crash_logging.h"
+#include "base/gtest_prod_util.h"
 #include "base/strings/string_piece_forward.h"
 #include "base/strings/string_util.h"
 #include "base/unguessable_token.h"
@@ -40,6 +41,8 @@
 namespace blink {
 class SecurityOrigin;
 class SecurityOriginTest;
+class StorageKey;
+class StorageKeyTest;
 }  // namespace blink
 
 namespace IPC {
@@ -329,6 +332,7 @@
  private:
   friend class blink::SecurityOrigin;
   friend class blink::SecurityOriginTest;
+  friend class blink::StorageKey;
   // SchemefulSite needs access to the serialization/deserialization logic which
   // includes the nonce.
   friend class net::SchemefulSite;
@@ -339,6 +343,7 @@
   friend IPC::ParamTraits<url::Origin>;
   friend COMPONENT_EXPORT(URL) std::ostream& operator<<(std::ostream& out,
                                                         const Origin& origin);
+  friend class blink::StorageKeyTest;
 
   // Origin::Nonce is a wrapper around gurl_base::UnguessableToken that generates
   // the random value only when the value is first accessed. The lazy generation
diff --git a/url/run_all_perftests.cc b/url/run_all_perftests.cc
index 47aeae2..7560e83 100644
--- a/url/run_all_perftests.cc
+++ b/url/run_all_perftests.cc
@@ -2,7 +2,7 @@
 // Use of this source code is governed by a BSD-style license that can be
 // found in the LICENSE file.
 
-#include "base/bind.h"
+#include "base/functional/bind.h"
 #include "base/test/launcher/unit_test_launcher.h"
 #include "base/test/perf_test_suite.h"
 
diff --git a/url/run_all_unittests.cc b/url/run_all_unittests.cc
index 0e339bd..159e236 100644
--- a/url/run_all_unittests.cc
+++ b/url/run_all_unittests.cc
@@ -4,7 +4,7 @@
 
 #include <memory>
 
-#include "base/bind.h"
+#include "base/functional/bind.h"
 #include "base/test/launcher/unit_test_launcher.h"
 #include "base/test/test_io_thread.h"
 #include "base/test/test_suite.h"
diff --git a/url/url_canon.h b/url/url_canon.h
index 1eed379..bb90c4a 100644
--- a/url/url_canon.h
+++ b/url/url_canon.h
@@ -10,7 +10,7 @@
 
 #include "polyfills/base/component_export.h"
 #include "polyfills/base/export_template.h"
-#include "base/memory/raw_ptr_exclusion.h"
+#include "polyfills/base/memory/raw_ptr_exclusion.h"
 #include "base/numerics/clamped_math.h"
 #include "url/third_party/mozilla/url_parse.h"
 
diff --git a/url/url_canon_icu_unittest.cc b/url/url_canon_icu_unittest.cc
index fc3fb67..46b7ae0 100644
--- a/url/url_canon_icu_unittest.cc
+++ b/url/url_canon_icu_unittest.cc
@@ -32,7 +32,7 @@
 
   ~UConvScoper() {
     if (converter_)
-      ucnv_close(converter_);
+      ucnv_close(converter_.ExtractAsDangling());
   }
 
   // Returns the converter object, may be NULL.
diff --git a/url/url_canon_stdstring.h b/url/url_canon_stdstring.h
index c9e2a1b..c8f9500 100644
--- a/url/url_canon_stdstring.h
+++ b/url/url_canon_stdstring.h
@@ -13,7 +13,7 @@
 
 #include "base/compiler_specific.h"
 #include "polyfills/base/component_export.h"
-#include "base/memory/raw_ptr_exclusion.h"
+#include "polyfills/base/memory/raw_ptr_exclusion.h"
 #include "base/strings/string_piece.h"
 #include "url/url_canon.h"
 
