diff --git a/AUTHORS b/AUTHORS
index a0f5060..6714ac1 100644
--- a/AUTHORS
+++ b/AUTHORS
@@ -45,6 +45,7 @@
 Aiden Grossman <aidengrossmanpso@gmail.com>
 Ajay Berwal <a.berwal@samsung.com>
 Ajay Berwal <ajay.berwal@samsung.com>
+Ajay Sharma <ajay.sh@samsung.com>
 Ajith Kumar V <ajith.v@samsung.com>
 Akos Kiss <akiss@inf.u-szeged.hu>
 Aku Kotkavuo <a.kotkavuo@partner.samsung.com>
@@ -63,6 +64,7 @@
 Alex Scheele <alexscheele@gmail.com>
 Alexander Douglas <agdoug@amazon.com>
 Alexander Forrence <alex.forrence@gmail.com>
+Alexander Frick <alex313031@gmail.com>
 Alexander Guettler <alexander@guettler.io>
 Alexander Rezepkin <etu@vivaldi.net>
 Alexander Shalamov <alexander.shalamov@intel.com>
@@ -161,6 +163,7 @@
 Ashutosh  <codingtosh@gmail.com>
 Asish Singh <asish.singh@samsung.com>
 Attila Dusnoki <dati91@gmail.com>
+Avi Mathur <avi.mathur009@gmail.com>
 Avinaash Doreswamy <avi.nitk@samsung.com>
 Axel Chong <haxatron1@gmail.com>
 Ayush Dubey <dubeyaayush07@gmail.com>
@@ -246,6 +249,7 @@
 Charles Vaughn <cvaughn@gmail.com>
 Cheng Zhao <zcbenz@gmail.com>
 Cheng Yu <yuzichengcode@gmail.com>
+Chenguang Shao <chenguangshao1@gmail.com>
 Choongwoo Han <cwhan.tunz@gmail.com>
 Choudhury M. Shamsujjoha <choudhury.s@samsung.com>
 Chris Dalton <chris@rive.app>
@@ -329,6 +333,7 @@
 Deomid rojer Ryabkov <rojer9@gmail.com>
 Derek Halman <d.halman@gmail.com>
 Devlin Cronin <rdevlin.cronin@gmail.com>
+Dheeraj Kumar <dh.kumar@samsung.com>
 Dhi Aurrahman <dio@rockybars.com>
 Di Wu <meetwudi@gmail.com>
 Diana Suvorova <diana.suvorova@gmail.com>
@@ -470,6 +475,7 @@
 Heeyoun Lee <heeyoun.lee@samsung.com>
 Henrique de Carvalho <decarv.henrique@gmail.com>
 Henrique Limas <henrique.ramos.limas@gmail.com>
+Henry Lim <henry@limhenry.xyz>
 Hikari Fujimoto <hikari.p.fujimoto@gmail.com>
 Himanshu Joshi <h.joshi@samsung.com>
 Himanshu Nayak <himanshu.nayak@amd.corp-partner.google.com>
@@ -566,6 +572,7 @@
 Jared Wein <weinjared@gmail.com>
 Jari Karppanen <jkarp@amazon.com>
 Jason Gronn <jasontopia03@gmail.com>
+Javayhu <javayhu@gmail.com>
 Jay Oster <jay@kodewerx.org>
 Jay Soffian <jaysoffian@gmail.com>
 Jeado Ko <haibane84@gmail.com>
@@ -680,6 +687,7 @@
 JungJik Lee <jungjik.lee@samsung.com>
 Jungkee Song <jungkee.song@samsung.com>
 Junmin Zhu <junmin.zhu@intel.com>
+Junsang Mo <mojunsang26@gmail.com>
 Junsong Li <ljs.darkfish@gmail.com>
 Jun Wang <wangjuna@uniontech.com>
 Jun Zeng <hjunzeng6@gmail.com>
@@ -844,6 +852,7 @@
 Martin Persson <mnpn03@gmail.com>
 Martin Rogalla <martin@martinrogalla.com>
 Martina Kollarova <martina.kollarova@intel.com>
+Martino Fontana <tinozzo123@gmail.com>
 Masahiro Yado <yado.masa@gmail.com>
 Masaru Nishida <msr.i386@gmail.com>
 Masayuki Wakizaka <mwakizaka0108@gmail.com>
@@ -1419,6 +1428,7 @@
 Yizhou Jiang <yizhou.jiang@intel.com>
 Yoav Weiss <yoav@yoav.ws>
 Yoav Zilberberg <yoav.zilberberg@gmail.com>
+Yogesh <yogesh.dabas@samsung.com>
 Yoichiro Hibara <hibarayoichiro871@gmail.com>
 Yong Ling <yongling@tencent.com>
 Yong Shin <sy3620@gmail.com>
@@ -1482,6 +1492,7 @@
 Zsolt Borbely <zsborbely.u-szeged@partner.samsung.com>
 方觉 (Fang Jue) <fangjue23303@gmail.com>
 迷渡 <justjavac@gmail.com>
+郑苏波 (Super Zheng) <superzheng@tencent.com>
 # Please DO NOT APPEND here. See comments at the top of the file.
 # END individuals section.
 
@@ -1559,6 +1570,7 @@
 Torchmobile Inc. Upwork <*@cloud.upwork.com>
 Venture 3 Systems LLC <*@venture3systems.com>
 Vewd Software AS <*@vewd.com>
+Vikas Mundra <vikas.mundra@samsung.com>
 Vivaldi Technologies AS <*@vivaldi.com>
 Wacom <*@wacom.com>
 Whist Technologies <*@whist.com>
diff --git a/base/containers/span.h b/base/containers/span.h
index a218045..83069d6 100644
--- a/base/containers/span.h
+++ b/base/containers/span.h
@@ -248,9 +248,6 @@
   using reference = T&;
   using const_reference = const T&;
   using iterator = CheckedContiguousIterator<T>;
-  // TODO(https://crbug.com/828324): Drop the const_iterator typedef once gMock
-  // supports containers without this nested type.
-  using const_iterator = iterator;
   using reverse_iterator = std::reverse_iterator<iterator>;
   static constexpr size_t extent = Extent;
 
diff --git a/base/strings/string_piece.h b/base/strings/string_piece.h
index 6e4ea0f..31feafc 100644
--- a/base/strings/string_piece.h
+++ b/base/strings/string_piece.h
@@ -10,8 +10,6 @@
 #ifndef BASE_STRINGS_STRING_PIECE_H_
 #define BASE_STRINGS_STRING_PIECE_H_
 
-#include <functional>
-
 // Many files including this header rely on these being included due to IWYU
 // violations. Preserve the includes for now. As code is migrated away from this
 // header, we can incrementally fix the IWYU violations.
@@ -24,13 +22,4 @@
 #include "base/strings/utf_ostream_operators.h"
 #include "build/build_config.h"
 
-namespace gurl_base {
-
-// Historically, `std::hash` did not support `gurl_base::StringPiece`. Now
-// `gurl_base::StringPiece` is `std::string_view`, so this is no longer necessary.
-// Replace uses of this type with the default hasher.
-using StringPieceHash = std::hash<StringPiece>;
-
-}  // namespace base
-
 #endif  // BASE_STRINGS_STRING_PIECE_H_
diff --git a/base/strings/string_piece_unittest.cc b/base/strings/string_piece_unittest.cc
index b77edbd..a6fcbbb 100644
--- a/base/strings/string_piece_unittest.cc
+++ b/base/strings/string_piece_unittest.cc
@@ -684,6 +684,7 @@
   }
 }
 
+#if defined(_LIBCPP_ENABLE_ASSERTIONS)
 TEST(StringPieceTest, OutOfBoundsDeath) {
   {
     constexpr StringPiece piece;
@@ -725,6 +726,7 @@
   int length = -1;
   ASSERT_DEATH_IF_SUPPORTED({ StringPiece piece("hello", length); }, "");
 }
+#endif  // defined(_LIBCPP_ENABLE_ASSERTIONS)
 
 TEST(StringPieceTest, ConstexprData) {
   {
diff --git a/base/strings/string_util.cc b/base/strings/string_util.cc
index 4a7638b..1633f7f 100644
--- a/base/strings/string_util.cc
+++ b/base/strings/string_util.cc
@@ -4,7 +4,6 @@
 
 #include "base/strings/string_util.h"
 
-#include <ctype.h>
 #include <errno.h>
 #include <math.h>
 #include <stdarg.h>
@@ -14,7 +13,6 @@
 #include <string.h>
 #include <time.h>
 #include <wchar.h>
-#include <wctype.h>
 
 #include <limits>
 #include <type_traits>
diff --git a/base/strings/string_util.h b/base/strings/string_util.h
index d40c11b..29936fa 100644
--- a/base/strings/string_util.h
+++ b/base/strings/string_util.h
@@ -7,7 +7,6 @@
 #ifndef BASE_STRINGS_STRING_UTIL_H_
 #define BASE_STRINGS_STRING_UTIL_H_
 
-#include <ctype.h>
 #include <stdarg.h>   // va_list
 #include <stddef.h>
 #include <stdint.h>
diff --git a/base/strings/string_util_impl_helpers.h b/base/strings/string_util_impl_helpers.h
index fb15c87..948463b 100644
--- a/base/strings/string_util_impl_helpers.h
+++ b/base/strings/string_util_impl_helpers.h
@@ -519,7 +519,7 @@
     const bool is_strict_mode,
     std::vector<size_t>* offsets) {
   size_t substitutions = subst.size();
-  GURL_DCHECK_LT(substitutions, 11U);
+  GURL_DCHECK_LT(substitutions, 10U);
 
   size_t sub_length = 0;
   for (const auto& cur : subst) {
diff --git a/base/strings/stringprintf.cc b/base/strings/stringprintf.cc
index 9509aff..1913fdc 100644
--- a/base/strings/stringprintf.cc
+++ b/base/strings/stringprintf.cc
@@ -38,13 +38,6 @@
                       va_list argptr) {
   return gurl_base::vswprintf(buffer, buf_size, format, argptr);
 }
-inline int vsnprintfT(char16_t* buffer,
-                      size_t buf_size,
-                      const char16_t* format,
-                      va_list argptr) {
-  return gurl_base::vswprintf(reinterpret_cast<wchar_t*>(buffer), buf_size,
-                         reinterpret_cast<const wchar_t*>(format), argptr);
-}
 #endif
 
 // Templatized backend for StringPrintF/StringAppendF. This does not finalize
@@ -135,15 +128,6 @@
   va_end(ap);
   return result;
 }
-
-std::u16string StringPrintf(const char16_t* format, ...) {
-  va_list ap;
-  va_start(ap, format);
-  std::u16string result;
-  StringAppendV(&result, format, ap);
-  va_end(ap);
-  return result;
-}
 #endif
 
 std::string StringPrintV(const char* format, va_list ap) {
@@ -152,38 +136,6 @@
   return result;
 }
 
-const std::string& SStringPrintf(std::string* dst, const char* format, ...) {
-  va_list ap;
-  va_start(ap, format);
-  dst->clear();
-  StringAppendV(dst, format, ap);
-  va_end(ap);
-  return *dst;
-}
-
-#if BUILDFLAG(IS_WIN)
-const std::wstring& SStringPrintf(std::wstring* dst,
-                                  const wchar_t* format, ...) {
-  va_list ap;
-  va_start(ap, format);
-  dst->clear();
-  StringAppendV(dst, format, ap);
-  va_end(ap);
-  return *dst;
-}
-
-const std::u16string& SStringPrintf(std::u16string* dst,
-                                    const char16_t* format,
-                                    ...) {
-  va_list ap;
-  va_start(ap, format);
-  dst->clear();
-  StringAppendV(dst, format, ap);
-  va_end(ap);
-  return *dst;
-}
-#endif
-
 void StringAppendF(std::string* dst, const char* format, ...) {
   va_list ap;
   va_start(ap, format);
@@ -198,13 +150,6 @@
   StringAppendV(dst, format, ap);
   va_end(ap);
 }
-
-void StringAppendF(std::u16string* dst, const char16_t* format, ...) {
-  va_list ap;
-  va_start(ap, format);
-  StringAppendV(dst, format, ap);
-  va_end(ap);
-}
 #endif
 
 void StringAppendV(std::string* dst, const char* format, va_list ap) {
@@ -215,10 +160,6 @@
 void StringAppendV(std::wstring* dst, const wchar_t* format, va_list ap) {
   StringAppendVT(dst, format, ap);
 }
-
-void StringAppendV(std::u16string* dst, const char16_t* format, va_list ap) {
-  StringAppendVT(dst, format, ap);
-}
 #endif
 
 }  // namespace base
diff --git a/base/strings/stringprintf.h b/base/strings/stringprintf.h
index b393c93..5266a13 100644
--- a/base/strings/stringprintf.h
+++ b/base/strings/stringprintf.h
@@ -21,12 +21,9 @@
 #if BUILDFLAG(IS_WIN)
 // Note: Unfortunately compile time checking of the format string for UTF-16
 // strings is not supported by any compiler, thus these functions should be used
-// carefully and sparingly. Also applies to SStringPrintf and StringAppendV
-// below.
+// carefully and sparingly. Also applies to StringAppendV below.
 [[nodiscard]] BASE_EXPORT std::wstring StringPrintf(const wchar_t* format, ...)
     WPRINTF_FORMAT(1, 2);
-[[nodiscard]] BASE_EXPORT std::u16string StringPrintf(const char16_t* format,
-                                                      ...) WPRINTF_FORMAT(1, 2);
 #endif
 
 // Return a C++ string given vprintf-like input.
@@ -34,27 +31,12 @@
                                                    va_list ap)
     PRINTF_FORMAT(1, 0);
 
-// Store result into a supplied string and return it.
-BASE_EXPORT const std::string& SStringPrintf(std::string* dst,
-                                             const char* format,
-                                             ...) PRINTF_FORMAT(2, 3);
-#if BUILDFLAG(IS_WIN)
-BASE_EXPORT const std::wstring& SStringPrintf(std::wstring* dst,
-                                              const wchar_t* format,
-                                              ...) WPRINTF_FORMAT(2, 3);
-BASE_EXPORT const std::u16string& SStringPrintf(std::u16string* dst,
-                                                const char16_t* format,
-                                                ...) WPRINTF_FORMAT(2, 3);
-#endif
-
 // Append result to a supplied string.
 BASE_EXPORT void StringAppendF(std::string* dst, const char* format, ...)
     PRINTF_FORMAT(2, 3);
 #if BUILDFLAG(IS_WIN)
 BASE_EXPORT void StringAppendF(std::wstring* dst, const wchar_t* format, ...)
     WPRINTF_FORMAT(2, 3);
-BASE_EXPORT void StringAppendF(std::u16string* dst, const char16_t* format, ...)
-    WPRINTF_FORMAT(2, 3);
 #endif
 
 // Lower-level routine that takes a va_list and appends to a specified
@@ -65,9 +47,6 @@
 BASE_EXPORT void StringAppendV(std::wstring* dst,
                                const wchar_t* format,
                                va_list ap) WPRINTF_FORMAT(2, 0);
-BASE_EXPORT void StringAppendV(std::u16string* dst,
-                               const char16_t* format,
-                               va_list ap) WPRINTF_FORMAT(2, 0);
 #endif
 
 }  // namespace base
diff --git a/base/strings/stringprintf_unittest.cc b/base/strings/stringprintf_unittest.cc
index c137095..45fa9c6 100644
--- a/base/strings/stringprintf_unittest.cc
+++ b/base/strings/stringprintf_unittest.cc
@@ -37,7 +37,6 @@
   EXPECT_EQ("123hello w", StringPrintf("%3d%2s %1c", 123, "hello", 'w'));
 #if BUILDFLAG(IS_WIN)
   EXPECT_EQ(L"123hello w", StringPrintf(L"%3d%2ls %1lc", 123, L"hello", 'w'));
-  EXPECT_EQ(u"123hello w", StringPrintf(u"%3d%2ls %1lc", 123, u"hello", 'w'));
 #endif
 }
 
@@ -50,10 +49,6 @@
   std::wstring valuew(L"Hello");
   StringAppendF(&valuew, L"%ls", L"");
   EXPECT_EQ(L"Hello", valuew);
-
-  std::u16string value16(u"Hello");
-  StringAppendF(&value16, u"%ls", u"");
-  EXPECT_EQ(u"Hello", value16);
 #endif
 }
 
@@ -66,10 +61,6 @@
   std::wstring valuew(L"Hello");
   StringAppendF(&valuew, L" %ls", L"World");
   EXPECT_EQ(L"Hello World", valuew);
-
-  std::u16string value16(u"Hello");
-  StringAppendF(&value16, u" %ls", u"World");
-  EXPECT_EQ(u"Hello World", value16);
 #endif
 }
 
@@ -82,10 +73,6 @@
   std::wstring valuew(L"Hello");
   StringAppendF(&valuew, L" %d", 123);
   EXPECT_EQ(L"Hello 123", valuew);
-
-  std::u16string value16(u"Hello");
-  StringAppendF(&value16, u" %d", 123);
-  EXPECT_EQ(u"Hello 123", value16);
 #endif
 }
 
@@ -105,22 +92,11 @@
   for (int i = 1; i < 3; i++) {
     src[kSrcLen - i] = 0;
     std::string out;
-    SStringPrintf(&out, "%s", src);
-    EXPECT_STREQ(src, out.c_str());
+    EXPECT_EQ(src, StringPrintf("%s", src));
 
 #if BUILDFLAG(IS_WIN)
     srcw[kSrcLen - i] = 0;
-    std::wstring outw;
-    SStringPrintf(&outw, L"%ls", srcw);
-    EXPECT_STREQ(srcw, outw.c_str());
-
-    src16[kSrcLen - i] = 0;
-    std::u16string out16;
-    SStringPrintf(&out16, u"%ls", src16);
-    // EXPECT_STREQ does not support const char16_t* strings yet.
-    // Dispatch to the const wchar_t* overload instead.
-    EXPECT_STREQ(reinterpret_cast<const wchar_t*>(src16),
-                 reinterpret_cast<const wchar_t*>(out16.c_str()));
+    EXPECT_EQ(srcw, StringPrintf(L"%ls", srcw));
 #endif
   }
 }
@@ -134,9 +110,6 @@
 
   const char fmt[] = "%sB%sB%sB%sB%sB%sB%s";
 
-  std::string out;
-  SStringPrintf(&out, fmt, src, src, src, src, src, src, src);
-
   const int kRefSize = 320000;
   char* ref = new char[kRefSize];
 #if BUILDFLAG(IS_WIN)
@@ -145,7 +118,7 @@
   snprintf(ref, kRefSize, fmt, src, src, src, src, src, src, src);
 #endif
 
-  EXPECT_STREQ(ref, out.c_str());
+  EXPECT_EQ(ref, StringPrintf(fmt, src, src, src, src, src, src, src));
   delete[] ref;
 }
 
@@ -158,10 +131,6 @@
   std::wstring outw;
   StringAppendVTestHelper(&outw, L"%d foo %ls", 1, L"bar");
   EXPECT_EQ(L"1 foo bar", outw);
-
-  std::u16string out16;
-  StringAppendVTestHelper(&out16, u"%d foo %ls", 1, u"bar");
-  EXPECT_EQ(u"1 foo bar", out16);
 #endif
 }
 
@@ -178,10 +147,7 @@
     src[i] = 'a';
   src[kBufLen - 1] = 0;
 
-  std::string out;
-  SStringPrintf(&out, "%s", src);
-
-  EXPECT_STREQ(src, out.c_str());
+  EXPECT_EQ(src, StringPrintf("%s", src));
 }
 
 #if BUILDFLAG(IS_WIN)
@@ -190,9 +156,7 @@
   invalid[0] = 0xffff;
   invalid[1] = 0;
 
-  std::wstring out;
-  SStringPrintf(&out, L"%ls", invalid);
-  EXPECT_STREQ(invalid, out.c_str());
+  EXPECT_EQ(invalid, StringPrintf(L"%ls", invalid));
 }
 #endif
 
diff --git a/base/strings/sys_string_conversions.h b/base/strings/sys_string_conversions.h
index 37f5455..38f89f8 100644
--- a/base/strings/sys_string_conversions.h
+++ b/base/strings/sys_string_conversions.h
@@ -20,7 +20,7 @@
 #if BUILDFLAG(IS_APPLE)
 #include <CoreFoundation/CoreFoundation.h>
 
-#include "base/mac/scoped_cftyperef.h"
+#include "base/apple/scoped_cftyperef.h"
 
 #ifdef __OBJC__
 @class NSString;
@@ -63,10 +63,10 @@
 // Converts between strings and CFStringRefs/NSStrings.
 
 // Converts a string to a CFStringRef. Returns null on failure.
-[[nodiscard]] BASE_EXPORT ScopedCFTypeRef<CFStringRef> SysUTF8ToCFStringRef(
-    StringPiece utf8);
-[[nodiscard]] BASE_EXPORT ScopedCFTypeRef<CFStringRef> SysUTF16ToCFStringRef(
-    StringPiece16 utf16);
+[[nodiscard]] BASE_EXPORT apple::ScopedCFTypeRef<CFStringRef>
+SysUTF8ToCFStringRef(StringPiece utf8);
+[[nodiscard]] BASE_EXPORT apple::ScopedCFTypeRef<CFStringRef>
+SysUTF16ToCFStringRef(StringPiece16 utf16);
 
 // Converts a CFStringRef to a string. Returns an empty string on failure. It is
 // not valid to call these with a null `ref`.
diff --git a/base/strings/to_string.h b/base/strings/to_string.h
index 79c6b7d..26ff960 100644
--- a/base/strings/to_string.h
+++ b/base/strings/to_string.h
@@ -9,13 +9,18 @@
 #include <memory>
 #include <sstream>
 #include <string>
+#include <tuple>
 #include <type_traits>
+#include <utility>
 
 #include "base/template_util.h"
 #include "base/types/supports_ostream_operator.h"
 
 namespace gurl_base {
 
+template <typename... Ts>
+std::string ToString(const Ts&... values);
+
 namespace internal {
 
 template <typename T>
@@ -91,6 +96,23 @@
   }
 };
 
+// Tuples. Will recursively apply `ToString()` to each value in the tuple.
+template <typename... T>
+struct ToStringHelper<std::tuple<T...>> {
+  template <size_t... I>
+  static void StringifyHelper(const std::tuple<T...>& values,
+                              std::index_sequence<I...>,
+                              std::ostringstream& ss) {
+    ss << "<";
+    (..., (ss << (I == 0 ? "" : ", "), ss << ToString(std::get<I>(values))));
+    ss << ">";
+  }
+
+  static void Stringify(const std::tuple<T...>& v, std::ostringstream& ss) {
+    StringifyHelper(v, std::make_index_sequence<sizeof...(T)>(), ss);
+  }
+};
+
 }  // namespace internal
 
 // Converts any type to a string, preferring defined operator<<() or ToString()
@@ -98,9 +120,8 @@
 template <typename... Ts>
 std::string ToString(const Ts&... values) {
   std::ostringstream ss;
-  (internal::ToStringHelper<remove_cvref_t<decltype(values)>>::Stringify(values,
-                                                                         ss),
-   ...);
+  (..., internal::ToStringHelper<remove_cvref_t<decltype(values)>>::Stringify(
+            values, ss));
   return ss.str();
 }
 
diff --git a/base/strings/to_string_test.cc b/base/strings/to_string_unittest.cc
similarity index 93%
rename from base/strings/to_string_test.cc
rename to base/strings/to_string_unittest.cc
index f0c32b2..840b301 100644
--- a/base/strings/to_string_test.cc
+++ b/base/strings/to_string_unittest.cc
@@ -91,6 +91,13 @@
   EXPECT_EQ(ToString("42 in hex is ", std::hex, 42), "42 in hex is 2a");
 }
 
+TEST(ToStringTest, Tuple) {
+  // Tuples should correctly format the contained types.
+  EXPECT_EQ(ToString(std::make_tuple(StreamableTestEnum::kGreeting,
+                                     HasToString(), "a string")),
+            "<hello, yay!, a string>");
+}
+
 void Func() {}
 
 TEST(ToStringTest, FunctionPointer) {
diff --git a/base/third_party/icu/README.chromium b/base/third_party/icu/README.chromium
index b738af6..c514fc5 100644
--- a/base/third_party/icu/README.chromium
+++ b/base/third_party/icu/README.chromium
@@ -14,5 +14,5 @@
 ICU macros should ICU be in use on the system. For the same reason, the
 functions and types have been put in the "base_icu" namespace.
 
-Note that this license file is marked as NOT_SHIPPED, since a more complete
+Note that this license file is marked as not shipped, since a more complete
 ICU license is included from //third_party/icu/README.chromium
diff --git a/copy.bara.sky b/copy.bara.sky
index fd4034f..72fde7e 100644
--- a/copy.bara.sky
+++ b/copy.bara.sky
@@ -108,7 +108,6 @@
     # iOS version of url_idna is ASCII-only, but it uses .mm extension; rename
     # it to a .cc file.
     core.move("url/url_idna_icu_alternatives_ios.mm", "url/url_idna_ascii_only.cc"),
-    core.replace("!defined(__has_feature) || !__has_feature(objc_arc)", "false"),
 
     # Fix some Perfetto includes.
     core.replace("base/trace_event/base_tracing.h", "polyfills/third_party/perfetto/include/perfetto/tracing/traced_value.h"),
diff --git a/url/origin.cc b/url/origin.cc
index 06119ba..0274f34 100644
--- a/url/origin.cc
+++ b/url/origin.cc
@@ -22,6 +22,7 @@
 #include "base/strings/strcat.h"
 #include "base/strings/string_piece.h"
 #include "polyfills/third_party/perfetto/include/perfetto/tracing/traced_value.h"
+#include "polyfills/base/trace_event/memory_usage_estimator.h"
 #include "base/unguessable_token.h"
 #include "url/gurl.h"
 #include "url/scheme_host_port.h"
@@ -393,6 +394,10 @@
   std::move(context).WriteString(GetDebugString());
 }
 
+size_t Origin::EstimateMemoryUsage() const {
+  return gurl_base::trace_event::EstimateMemoryUsage(tuple_);
+}
+
 std::ostream& operator<<(std::ostream& out, const url::Origin& origin) {
   out << origin.GetDebugString();
   return out;
diff --git a/url/origin.h b/url/origin.h
index d08229d..a49cbca 100644
--- a/url/origin.h
+++ b/url/origin.h
@@ -329,6 +329,10 @@
 
   void WriteIntoTrace(perfetto::TracedValue context) const;
 
+  // Estimates dynamic memory usage.
+  // See base/trace_event/memory_usage_estimator.h for more info.
+  size_t EstimateMemoryUsage() const;
+
  private:
   friend class blink::SecurityOrigin;
   friend class blink::SecurityOriginTest;
diff --git a/url/scheme_host_port.cc b/url/scheme_host_port.cc
index db23d39..2db80a8 100644
--- a/url/scheme_host_port.cc
+++ b/url/scheme_host_port.cc
@@ -16,6 +16,7 @@
 #include "base/numerics/safe_conversions.h"
 #include "base/strings/string_number_conversions.h"
 #include "base/strings/string_piece.h"
+#include "polyfills/base/trace_event/memory_usage_estimator.h"
 #include "url/gurl.h"
 #include "url/third_party/mozilla/url_parse.h"
 #include "url/url_canon.h"
@@ -229,6 +230,11 @@
   return GURL(std::move(serialized), parsed, true);
 }
 
+size_t SchemeHostPort::EstimateMemoryUsage() const {
+  return gurl_base::trace_event::EstimateMemoryUsage(scheme_) +
+         gurl_base::trace_event::EstimateMemoryUsage(host_);
+}
+
 bool SchemeHostPort::operator<(const SchemeHostPort& other) const {
   return std::tie(port_, scheme_, host_) <
          std::tie(other.port_, other.scheme_, other.host_);
diff --git a/url/scheme_host_port.h b/url/scheme_host_port.h
index 88013dd..0798fec 100644
--- a/url/scheme_host_port.h
+++ b/url/scheme_host_port.h
@@ -139,6 +139,10 @@
   // For example, see crrev.com/c/3637099/comments/782360d0_e14757be.
   GURL GetURL() const;
 
+  // Estimates dynamic memory usage.
+  // See base/trace_event/memory_usage_estimator.h for more info.
+  size_t EstimateMemoryUsage() const;
+
   // Two SchemeHostPort objects are "equal" iff their schemes, hosts, and ports
   // are exact matches.
   //
diff --git a/url/url_canon_path.cc b/url/url_canon_path.cc
index ce28682..7f917db 100644
--- a/url/url_canon_path.cc
+++ b/url/url_canon_path.cc
@@ -6,10 +6,12 @@
 
 #include "polyfills/base/check.h"
 #include "polyfills/base/check_op.h"
+#include "polyfills/base/feature_list.h"
 #include "polyfills/base/metrics/histogram_functions.h"
 #include "absl/types/optional.h"
 #include "url/url_canon.h"
 #include "url/url_canon_internal.h"
+#include "url/url_features.h"
 #include "url/url_parse_internal.h"
 
 namespace url {
@@ -37,6 +39,7 @@
   // This character must be unescaped in canonical output. Not valid with
   // ESCAPE or PASS. We DON'T set the SPECIAL flag since if we encounter these
   // characters unescaped, they should just be copied.
+  // TODO(https://crbug.com/1252531): This is guarded by a feature flag.
   UNESCAPE = 4,
 };
 
@@ -333,7 +336,9 @@
             // the last character of the escape sequence.
             char unescaped_flags = kPathCharLookup[unescaped_value];
 
-            if (unescaped_flags & UNESCAPE) {
+            if (!gurl_base::FeatureList::IsEnabled(
+                    url::kDontDecodeAsciiPercentEncodedURLPath) &&
+                (unescaped_flags & UNESCAPE)) {
               // This escaped value shouldn't be escaped.  Try to copy it.
               unescape_escaped_char = true;
 
diff --git a/url/url_canon_unittest.cc b/url/url_canon_unittest.cc
index d4bfbdb..c1b19d2 100644
--- a/url/url_canon_unittest.cc
+++ b/url/url_canon_unittest.cc
@@ -1275,13 +1275,13 @@
     {"/foo%2\xc2\xa9zbar", nullptr, "/foo%2%C2%A9zbar", Component(0, 16), true},
     {nullptr, L"/foo%2\xc2\xa9zbar", "/foo%2%C3%82%C2%A9zbar", Component(0, 22),
      true},
-    // Regular characters that are escaped should be unescaped
-    {"/foo%41%7a", L"/foo%41%7a", "/fooAz", Component(0, 6), true},
+    // Regular characters that are escaped should remain escaped
+    {"/foo%41%7a", L"/foo%41%7a", "/foo%41%7a", Component(0, 10), true},
     // Funny characters that are unescaped should be escaped
     {"/foo\x09\x91%91", nullptr, "/foo%09%91%91", Component(0, 13), true},
     {nullptr, L"/foo\x09\x91%91", "/foo%09%C2%91%91", Component(0, 16), true},
     // %00 should not cause failures.
-    {"/foo%00%51", L"/foo%00%51", "/foo%00Q", Component(0, 8), true},
+    {"/foo%00%51", L"/foo%00%51", "/foo%00%51", Component(0, 10), true},
     // Some characters should be passed through unchanged regardless of esc.
     {"/(%28:%3A%29)", L"/(%28:%3A%29)", "/(%28:%3A%29)", Component(0, 13),
      true},
@@ -1302,21 +1302,20 @@
      "/%7Ffp3%3Eju%3Dduvgw%3Dd", Component(0, 24), true},
     // @ should be passed through unchanged (escaped or unescaped).
     {"/@asdf%40", L"/@asdf%40", "/@asdf%40", Component(0, 9), true},
-    // Nested escape sequences should result in escaping the leading '%' if
-    // unescaping would result in a new escape sequence.
-    {"/%A%42", L"/%A%42", "/%25AB", Component(0, 6), true},
-    {"/%%41B", L"/%%41B", "/%25AB", Component(0, 6), true},
-    {"/%%41%42", L"/%%41%42", "/%25AB", Component(0, 6), true},
+    // Nested escape sequences no longer happen. See https://crbug.com/1252531.
+    {"/%A%42", L"/%A%42", "/%A%42", Component(0, 6), true},
+    {"/%%41B", L"/%%41B", "/%%41B", Component(0, 6), true},
+    {"/%%41%42", L"/%%41%42", "/%%41%42", Component(0, 8), true},
     // Make sure truncated "nested" escapes don't result in reading off the
     // string end.
-    {"/%%41", L"/%%41", "/%A", Component(0, 3), true},
+    {"/%%41", L"/%%41", "/%%41", Component(0, 5), true},
     // Don't unescape the leading '%' if unescaping doesn't result in a valid
     // new escape sequence.
-    {"/%%470", L"/%%470", "/%G0", Component(0, 4), true},
-    {"/%%2D%41", L"/%%2D%41", "/%-A", Component(0, 4), true},
+    {"/%%470", L"/%%470", "/%%470", Component(0, 6), true},
+    {"/%%2D%41", L"/%%2D%41", "/%%2D%41", Component(0, 8), true},
     // Don't erroneously downcast a UTF-16 character in a way that makes it
     // look like part of an escape sequence.
-    {nullptr, L"/%%41\x0130", "/%A%C4%B0", Component(0, 9), true},
+    {nullptr, L"/%%41\x0130", "/%%41%C4%B0", Component(0, 11), true},
 
     // ----- encoding tests -----
     // Basic conversions
@@ -1622,7 +1621,7 @@
        "ws://%29w%1ew%81/", false},
       // Regression test for the last_invalid_percent_index bug described in
       // https://crbug.com/1080890#c10.
-      {R"(HTTP:S/5%\../>%41)", "http://s/%3EA", true},
+      {R"(HTTP:S/5%\../>%41)", "http://s/%3E%41", true},
   };
 
   for (size_t i = 0; i < std::size(cases); i++) {
@@ -2742,7 +2741,29 @@
   output.set_length(0);
 }
 
-TEST(URLCanonTest, UnescapePathCharHistogram) {
+class URLCanonAsciiPercentEncodePathTest
+    : public ::testing::Test,
+      public ::testing::WithParamInterface<bool> {
+ public:
+  URLCanonAsciiPercentEncodePathTest() {
+    if (GetParam()) {
+      scoped_feature_list_.InitAndEnableFeature(
+          url::kDontDecodeAsciiPercentEncodedURLPath);
+    } else {
+      scoped_feature_list_.InitAndDisableFeature(
+          url::kDontDecodeAsciiPercentEncodedURLPath);
+    }
+  }
+
+ private:
+  gurl_base::test::ScopedFeatureList scoped_feature_list_;
+};
+
+INSTANTIATE_TEST_SUITE_P(All,
+                         URLCanonAsciiPercentEncodePathTest,
+                         ::testing::Bool());
+
+TEST_P(URLCanonAsciiPercentEncodePathTest, UnescapePathCharHistogram) {
   struct TestCase {
     gurl_base::StringPiece path;
     gurl_base::HistogramBase::Count cnt;
@@ -2760,8 +2781,13 @@
     StdStringCanonOutput output(&out_str);
     bool success = CanonicalizePath(c.path.data(), in_comp, &output, &out_comp);
     ASSERT_TRUE(success);
-    histogram_tester.ExpectBucketCount("URL.Path.UnescapeEscapedChar", 1,
-                                       c.cnt);
+    if (gurl_base::FeatureList::IsEnabled(
+            url::kDontDecodeAsciiPercentEncodedURLPath)) {
+      histogram_tester.ExpectBucketCount("URL.Path.UnescapeEscapedChar", 1, 0);
+    } else {
+      histogram_tester.ExpectBucketCount("URL.Path.UnescapeEscapedChar", 1,
+                                         c.cnt);
+    }
   }
 }
 
diff --git a/url/url_features.cc b/url/url_features.cc
index d033755..e046f60 100644
--- a/url/url_features.cc
+++ b/url/url_features.cc
@@ -25,6 +25,11 @@
              "ResolveBareFragmentWithColonOnNonHierarchical",
              gurl_base::FEATURE_ENABLED_BY_DEFAULT);
 
+// Kill switch for crbug.com/1252531.
+BASE_FEATURE(kDontDecodeAsciiPercentEncodedURLPath,
+             "DontDecodeAsciiPercentEncodedURLPath",
+             gurl_base::FEATURE_ENABLED_BY_DEFAULT);
+
 bool IsUsingIDNA2008NonTransitional() {
   // If the FeatureList isn't available yet, fall back to the feature's default
   // state. This may happen during early startup, see crbug.com/1441956.
diff --git a/url/url_features.h b/url/url_features.h
index 41f689b..3dfb383 100644
--- a/url/url_features.h
+++ b/url/url_features.h
@@ -28,6 +28,11 @@
 COMPONENT_EXPORT(URL)
 BASE_DECLARE_FEATURE(kResolveBareFragmentWithColonOnNonHierarchical);
 
+// When enabled, percent-encoded ASCII characters in URL path are not decoded
+// automatically. See https://crbug.com/125231.
+COMPONENT_EXPORT(URL)
+BASE_DECLARE_FEATURE(kDontDecodeAsciiPercentEncodedURLPath);
+
 }  // namespace url
 
 #endif  // URL_URL_FEATURES_H_
diff --git a/url/url_idna_ascii_only.cc b/url/url_idna_ascii_only.cc
index 921858a..2a4f0d3 100644
--- a/url/url_idna_ascii_only.cc
+++ b/url/url_idna_ascii_only.cc
@@ -12,10 +12,6 @@
 #include "base/strings/utf_string_conversions.h"
 #include "url/url_canon_internal.h"
 
-#if false
-#error "This file requires ARC support."
-#endif
-
 namespace url {
 
 // Only allow ASCII to avoid ICU dependency. Use NSString+IDN
