diff --git a/DEPS b/DEPS
index f635a89..7d41394 100644
--- a/DEPS
+++ b/DEPS
@@ -280,7 +280,7 @@
   # Three lines of non-changing comments so that
   # the commit queue can handle CLs rolling Skia
   # and whatever else without interference from each other.
-  'skia_revision': '83c4cebc1e8fb4e138eb51745351349ca7cf0b07',
+  'skia_revision': '019f67c30a1eba03ba87a68db2d190f3076ea431',
   # Three lines of non-changing comments so that
   # the commit queue can handle CLs rolling V8
   # and whatever else without interference from each other.
@@ -288,11 +288,11 @@
   # Three lines of non-changing comments so that
   # the commit queue can handle CLs rolling ANGLE
   # and whatever else without interference from each other.
-  'angle_revision': '5ef62fa1999efb38bd2cf4a7db258ba540d1d5fa',
+  'angle_revision': '9070e279a8877ef371c3855028d3ed3999660221',
   # Three lines of non-changing comments so that
   # the commit queue can handle CLs rolling SwiftShader
   # and whatever else without interference from each other.
-  'swiftshader_revision': 'd1116fa9e9dce90556f8db973ba42b246eb633f5',
+  'swiftshader_revision': '7987bda077c85e2f67cf1ef55a19179729450cc1',
   # Three lines of non-changing comments so that
   # the commit queue can handle CLs rolling PDFium
   # and whatever else without interference from each other.
@@ -307,7 +307,7 @@
   # Three lines of non-changing comments so that
   # the commit queue can handle CLs rolling Fuchsia sdk
   # and whatever else without interference from each other.
-  'fuchsia_version': 'version:8.20220705.2.1',
+  'fuchsia_version': 'version:8.20220705.3.1',
   # Three lines of non-changing comments so that
   # the commit queue can handle CLs rolling google-toolbox-for-mac
   # and whatever else without interference from each other.
@@ -359,7 +359,7 @@
   # Three lines of non-changing comments so that
   # the commit queue can handle CLs rolling devtools-frontend
   # and whatever else without interference from each other.
-  'devtools_frontend_revision': 'ad4a201d4b39b0aa06eff542338cbe1097f2e486',
+  'devtools_frontend_revision': '7f3fc5962f8a19a219fe4586685c29d1954409ce',
   # Three lines of non-changing comments so that
   # the commit queue can handle CLs rolling libprotobuf-mutator
   # and whatever else without interference from each other.
@@ -395,7 +395,7 @@
   # Three lines of non-changing comments so that
   # the commit queue can handle CLs rolling feed
   # and whatever else without interference from each other.
-  'dawn_revision': 'a1d3003e16587926b68893750b0a5f012697c1fa',
+  'dawn_revision': '760c399cfb1d541e5fb6ad1a7a72b715b8f09b9c',
   # Three lines of non-changing comments so that
   # the commit queue can handle CLs rolling feed
   # and whatever else without interference from each other.
@@ -929,7 +929,7 @@
     'packages': [
       {
           'package': 'chromium/third_party/androidx',
-          'version': 'g9HIhocBsCFlSh1b6fzvSBJB8WIKPqyWsauldtRS4DIC',
+          'version': 'b_tAKDL0dC5K8jiRRvQK5XNLJbu5xNUQqGkvSI-hFIMC',
       },
     ],
     'condition': 'checkout_android',
@@ -1035,7 +1035,7 @@
           },
           {
               'package': 'chromium/third_party/android_sdk/public/cmdline-tools',
-              'version': 'PGPmqJtSIQ84If155ba7iTU846h5WJ-bL5d_OoUWEWYC',
+              'version': 'IPzAG-uU5zVMxohpg9-7-N0tQC1TCSW1VbrBFw7Ld04C',
           },
       ],
       'condition': 'checkout_android_native_support',
@@ -1144,7 +1144,7 @@
   # Tools used when building Chrome for Chrome OS. This affects both the Simple
   # Chrome workflow, as well as the chromeos-chrome ebuild.
   'src/third_party/chromite': {
-      'url': Var('chromium_git') + '/chromiumos/chromite.git' + '@' + 'bf3e1a272dd5aee57a9c1dad318498291ebe96ec',
+      'url': Var('chromium_git') + '/chromiumos/chromite.git' + '@' + '8b9869c0584bf77c8e77eeeb2bea1ccf5aca7298',
       'condition': 'checkout_chromeos',
   },
 
@@ -1564,7 +1564,7 @@
   },
 
   'src/third_party/perfetto':
-    Var('android_git') + '/platform/external/perfetto.git' + '@' + '28934fcd20d1fa20ea8d21ac6f93391b4b7e348d',
+    Var('android_git') + '/platform/external/perfetto.git' + '@' + 'b1989b0ff009c79d1d9e3f6b13b2e017ba2e5c9d',
 
   'src/third_party/perl': {
       'url': Var('chromium_git') + '/chromium/deps/perl.git' + '@' + '6f3e5028eb65d0b4c5fdd792106ac4c84eee1eb3',
@@ -1615,7 +1615,7 @@
       'packages': [
           {
               'package': 'chromium/third_party/r8',
-              'version': 'YYmB-DSqgEMUFtrSQw6plpnZygVruQmxrc3Qqeac8ZEC',
+              'version': 'HmHfvTcsLzsBa_zD-K3mzWcLgCCjj2q2C0G7yLng82wC',
           },
       ],
       'condition': 'checkout_android',
@@ -1695,7 +1695,7 @@
       'dep_type': 'cipd',
   },
 
-  'src/third_party/vulkan-deps': '{chromium_git}/vulkan-deps@5d976018641e3b231b77a35c3a9b40bdbe31e91a',
+  'src/third_party/vulkan-deps': '{chromium_git}/vulkan-deps@b3ca833ea15a10d8e779b65850ce4f52e48ab4c8',
 
   'src/third_party/vulkan_memory_allocator':
     Var('chromium_git') + '/external/github.com/GPUOpen-LibrariesAndSDKs/VulkanMemoryAllocator.git' + '@' + 'ebe84bec02c041d28f902da0214bf442743fc907',
@@ -1731,10 +1731,10 @@
     Var('chromium_git') + '/external/khronosgroup/webgl.git' + '@' + 'e58ed2132aa47ac110a4cce1763abfa34f4fa34e',
 
   'src/third_party/webgpu-cts/src':
-    Var('chromium_git') + '/external/github.com/gpuweb/cts.git' + '@' + '5de908c54a8d309db6b5743be4a4d8aca777b1d7',
+    Var('chromium_git') + '/external/github.com/gpuweb/cts.git' + '@' + '8cfc317e23c7f7a73f3c7caf5203a55542471f56',
 
   'src/third_party/webrtc':
-    Var('webrtc_git') + '/src.git' + '@' + 'a7e15a2b7e9acc361c9233f901ab16a318e69b9d',
+    Var('webrtc_git') + '/src.git' + '@' + 'e9e4e342e6557660f0a4a22e31b5475d805e72a1',
 
   'src/third_party/libgifcodec':
      Var('skia_git') + '/libgifcodec' + '@'+  Var('libgifcodec_revision'),
@@ -1807,7 +1807,7 @@
     Var('chromium_git') + '/v8/v8.git' + '@' +  Var('v8_revision'),
 
   'src-internal': {
-    'url': 'https://chrome-internal.googlesource.com/chrome/src-internal.git@aff538c234b2ae8b402b4bf53adafa0959b6edd1',
+    'url': 'https://chrome-internal.googlesource.com/chrome/src-internal.git@4079811b57ec2599c498cd146b519a098724cdb0',
     'condition': 'checkout_src_internal',
   },
 
@@ -3626,6 +3626,7 @@
   '-absl',
   '-third_party/abseil-cpp',
   '+third_party/abseil-cpp/absl/base/attributes.h',
+  "+third_party/abseil-cpp/absl/functional/function_ref.h",
   "+third_party/abseil-cpp/absl/numeric/int128.h",
   '+third_party/abseil-cpp/absl/types/optional.h',
   '+third_party/abseil-cpp/absl/types/variant.h',
diff --git a/WATCHLISTS b/WATCHLISTS
index 36e6b43..74ca3797 100644
--- a/WATCHLISTS
+++ b/WATCHLISTS
@@ -1781,7 +1781,7 @@
     'smb': {
       'filepath': 'chrome/browser/ash/file_system_provider' \
                   '|chrome/browser/ash/smb_client'\
-                  '|chromeos/ash/components/dbus/smb_provider_client',
+                  '|chromeos/ash/components/dbus/smbprovider',
     },
     'source_idls': {
       'filepath': 'third_party/blink/renderer/(core|modules|platform)/.*\.idl',
diff --git a/ash/components/arc/BUILD.gn b/ash/components/arc/BUILD.gn
index 052e979..8a8f14fe 100644
--- a/ash/components/arc/BUILD.gn
+++ b/ash/components/arc/BUILD.gn
@@ -129,6 +129,7 @@
     "//chromeos/ash/components/dbus/concierge:concierge_proto",
     "//chromeos/ash/components/dbus/patchpanel",
     "//chromeos/ash/components/dbus/patchpanel:patchpanel_proto",
+    "//chromeos/ash/components/dbus/resourced",
     "//chromeos/ash/components/dbus/session_manager",
     "//chromeos/ash/components/dbus/spaced:spaced",
     "//chromeos/ash/components/dbus/userdataauth",
@@ -140,7 +141,6 @@
     "//chromeos/dbus/permission_broker",
     "//chromeos/dbus/power",
     "//chromeos/dbus/power:power_manager_proto",
-    "//chromeos/dbus/resourced",
     "//chromeos/login/login_state",
     "//chromeos/network",
     "//chromeos/ui/frame",
@@ -451,6 +451,7 @@
     "//chromeos/ash/components/dbus/concierge",
     "//chromeos/ash/components/dbus/patchpanel",
     "//chromeos/ash/components/dbus/patchpanel:patchpanel_proto",
+    "//chromeos/ash/components/dbus/resourced",
     "//chromeos/ash/components/dbus/session_manager",
     "//chromeos/ash/components/dbus/session_manager:login_manager_proto",
     "//chromeos/ash/components/dbus/upstart",
@@ -460,7 +461,6 @@
     "//chromeos/dbus/permission_broker",
     "//chromeos/dbus/power",
     "//chromeos/dbus/power:power_manager_proto",
-    "//chromeos/dbus/resourced:resourced",
     "//chromeos/dbus/tpm_manager:tpm_manager",
     "//chromeos/ui/frame",
     "//components/account_id",
diff --git a/ash/components/arc/memory_pressure/arc_memory_pressure_bridge.cc b/ash/components/arc/memory_pressure/arc_memory_pressure_bridge.cc
index f8ff3da..6d4f17e 100644
--- a/ash/components/arc/memory_pressure/arc_memory_pressure_bridge.cc
+++ b/ash/components/arc/memory_pressure/arc_memory_pressure_bridge.cc
@@ -57,41 +57,41 @@
     : arc_bridge_service_(bridge_service),
       arc_metrics_service_(ArcMetricsService::GetForBrowserContext(context)) {
   DCHECK(arc_metrics_service_ != nullptr);
-  chromeos::ResourcedClient* client = chromeos::ResourcedClient::Get();
+  ash::ResourcedClient* client = ash::ResourcedClient::Get();
   DCHECK(client);
   client->AddArcVmObserver(this);
   arc_bridge_service_->process()->AddObserver(this);
 }
 
 ArcMemoryPressureBridge::~ArcMemoryPressureBridge() {
-  chromeos::ResourcedClient* client = chromeos::ResourcedClient::Get();
+  ash::ResourcedClient* client = ash::ResourcedClient::Get();
   if (client)
     client->RemoveArcVmObserver(this);
   arc_bridge_service_->process()->RemoveObserver(this);
 }
 
 void ArcMemoryPressureBridge::OnMemoryPressure(
-    chromeos::ResourcedClient::PressureLevelArcVm level,
+    ash::ResourcedClient::PressureLevelArcVm level,
     uint64_t reclaim_target_kb) {
   if (memory_pressure_in_flight_)
     return;
   mojom::PressureLevel arc_level;
   mojom::ProcessState arc_level_deprecated;
   switch (level) {
-    case chromeos::ResourcedClient::PressureLevelArcVm::NONE:
+    case ash::ResourcedClient::PressureLevelArcVm::NONE:
       return;
 
-    case chromeos::ResourcedClient::PressureLevelArcVm::CACHED:
+    case ash::ResourcedClient::PressureLevelArcVm::CACHED:
       arc_level = mojom::PressureLevel::kCached;
       arc_level_deprecated = mojom::ProcessState::R_CACHED_ACTIVITY_CLIENT;
       break;
 
-    case chromeos::ResourcedClient::PressureLevelArcVm::PERCEPTIBLE:
+    case ash::ResourcedClient::PressureLevelArcVm::PERCEPTIBLE:
       arc_level = mojom::PressureLevel::kPerceptible;
       arc_level_deprecated = mojom::ProcessState::R_TOP;
       break;
 
-    case chromeos::ResourcedClient::PressureLevelArcVm::FOREGROUND:
+    case ash::ResourcedClient::PressureLevelArcVm::FOREGROUND:
       arc_level = mojom::PressureLevel::kForeground;
       arc_level_deprecated = mojom::ProcessState::R_TOP;
       break;
diff --git a/ash/components/arc/memory_pressure/arc_memory_pressure_bridge.h b/ash/components/arc/memory_pressure/arc_memory_pressure_bridge.h
index db163751..817525a 100644
--- a/ash/components/arc/memory_pressure/arc_memory_pressure_bridge.h
+++ b/ash/components/arc/memory_pressure/arc_memory_pressure_bridge.h
@@ -8,7 +8,7 @@
 #include "ash/components/arc/metrics/arc_metrics_service.h"
 #include "ash/components/arc/session/connection_observer.h"
 #include "base/memory/weak_ptr.h"
-#include "chromeos/dbus/resourced/resourced_client.h"
+#include "chromeos/ash/components/dbus/resourced/resourced_client.h"
 #include "components/keyed_service/core/keyed_service.h"
 
 namespace content {
@@ -21,7 +21,7 @@
 
 class ArcMemoryPressureBridge
     : public KeyedService,
-      public chromeos::ResourcedClient::ArcVmObserver,
+      public ash::ResourcedClient::ArcVmObserver,
       public ConnectionObserver<mojom::ProcessInstance> {
  public:
   // Returns singleton instance for the given BrowserContext,
@@ -40,7 +40,7 @@
   ~ArcMemoryPressureBridge() override;
 
   // Implements ResourcedClient::ArcVmObserver.
-  void OnMemoryPressure(chromeos::ResourcedClient::PressureLevelArcVm level,
+  void OnMemoryPressure(ash::ResourcedClient::PressureLevelArcVm level,
                         uint64_t reclaim_target_kb) override;
 
   // ConnectionObserver<mojom::ProcessInstance> overrides.
diff --git a/ash/components/arc/memory_pressure/arc_memory_pressure_bridge_unittest.cc b/ash/components/arc/memory_pressure/arc_memory_pressure_bridge_unittest.cc
index f57d8b6..63459dfd 100644
--- a/ash/components/arc/memory_pressure/arc_memory_pressure_bridge_unittest.cc
+++ b/ash/components/arc/memory_pressure/arc_memory_pressure_bridge_unittest.cc
@@ -13,7 +13,7 @@
 #include "ash/components/arc/session/arc_service_manager.h"
 #include "ash/components/arc/test/fake_process_instance.h"
 #include "ash/components/arc/test/test_browser_context.h"
-#include "chromeos/dbus/resourced/fake_resourced_client.h"
+#include "chromeos/ash/components/dbus/resourced/fake_resourced_client.h"
 #include "content/public/test/browser_task_environment.h"
 #include "mojo/public/cpp/system/platform_handle.h"
 #include "testing/gtest/include/gtest/gtest.h"
@@ -67,7 +67,7 @@
 
   ArcMemoryPressureBridge* bridge() { return bridge_; }
 
-  chromeos::FakeResourcedClient& resourced() { return fake_resourced_client_; }
+  ash::FakeResourcedClient& resourced() { return fake_resourced_client_; }
 
   FakeProcessInstance& process_instance() { return fake_process_instance_; }
 
@@ -91,7 +91,7 @@
   }
 
   AppKillObserver kill_observer_;
-  chromeos::FakeResourcedClient fake_resourced_client_;
+  ash::FakeResourcedClient fake_resourced_client_;
   content::BrowserTaskEnvironment task_environment_;
   TestingPrefServiceSimple local_state_;
   session_manager::SessionManager session_manager_;
@@ -107,7 +107,7 @@
 TEST_F(ArcMemoryPressureBridgeTest, PressureNone) {
   ASSERT_NE(nullptr, bridge());
   resourced().FakeArcVmMemoryPressure(
-      chromeos::ResourcedClient::PressureLevelArcVm::NONE,
+      ash::ResourcedClient::PressureLevelArcVm::NONE,
       1 /* reclaim_target_kb */);
   ASSERT_TRUE(process_instance().IsLastHostMemoryPressureChecked());
 }
@@ -121,7 +121,7 @@
   process_instance().set_apply_host_memory_pressure_response(
       1 /* killed */, UINT64_C(5368709120) /* reclaimed */);
   resourced().FakeArcVmMemoryPressure(
-      chromeos::ResourcedClient::PressureLevelArcVm::CACHED,
+      ash::ResourcedClient::PressureLevelArcVm::CACHED,
       1 /* reclaim_target_kb */);
   ASSERT_TRUE(process_instance().CheckLastHostMemoryPressure(
       mojom::PressureLevel::kCached, 1024 /* reclaim_target */));
@@ -139,7 +139,7 @@
   process_instance().set_apply_host_memory_pressure_response(
       1 /* killed */, 2048 /* reclaimed */);
   resourced().FakeArcVmMemoryPressure(
-      chromeos::ResourcedClient::PressureLevelArcVm::PERCEPTIBLE,
+      ash::ResourcedClient::PressureLevelArcVm::PERCEPTIBLE,
       1 /* reclaim_target_kb */);
   ASSERT_TRUE(process_instance().CheckLastHostMemoryPressure(
       mojom::PressureLevel::kPerceptible, 1024 /* reclaim_target */));
@@ -157,7 +157,7 @@
   process_instance().set_apply_host_memory_pressure_response(
       1 /* killed */, 2048 /* reclaimed */);
   resourced().FakeArcVmMemoryPressure(
-      chromeos::ResourcedClient::PressureLevelArcVm::FOREGROUND,
+      ash::ResourcedClient::PressureLevelArcVm::FOREGROUND,
       1 /* reclaim_target_kb */);
   ASSERT_TRUE(process_instance().CheckLastHostMemoryPressure(
       mojom::PressureLevel::kForeground, 1024 /* reclaim_target */));
@@ -180,10 +180,10 @@
   // FakeProcessInstance::CheckLastHostMemoryPressure is not called first. So
   // these two calls in a row will fail if they are both forwarded to Mojo.
   resourced().FakeArcVmMemoryPressure(
-      chromeos::ResourcedClient::PressureLevelArcVm::PERCEPTIBLE,
+      ash::ResourcedClient::PressureLevelArcVm::PERCEPTIBLE,
       1 /* reclaim_target_kb */);
   resourced().FakeArcVmMemoryPressure(
-      chromeos::ResourcedClient::PressureLevelArcVm::PERCEPTIBLE,
+      ash::ResourcedClient::PressureLevelArcVm::PERCEPTIBLE,
       2 /* reclaim_target_kb */);
 
   // Check that the first call is the most recent one, meaning the second did
@@ -201,7 +201,7 @@
   process_instance().set_apply_host_memory_pressure_response(
       3 /* killed */, 4096 /* reclaimed */);
   resourced().FakeArcVmMemoryPressure(
-      chromeos::ResourcedClient::PressureLevelArcVm::PERCEPTIBLE,
+      ash::ResourcedClient::PressureLevelArcVm::PERCEPTIBLE,
       3 /* reclaim_target_kb */);
   ASSERT_TRUE(process_instance().CheckLastHostMemoryPressure(
       mojom::PressureLevel::kPerceptible, 3072 /* reclaim_target */));
diff --git a/ash/constants/ash_features.cc b/ash/constants/ash_features.cc
index caf60f23..9d201726 100644
--- a/ash/constants/ash_features.cc
+++ b/ash/constants/ash_features.cc
@@ -259,6 +259,11 @@
 const base::Feature kBorealisLinuxMode{"BorealisLinuxMode",
                                        base::FEATURE_DISABLED_BY_DEFAULT};
 
+// Enable storage ballooning for Borealis. This takes precedence over
+// kBorealisDiskManagement.
+const base::Feature kBorealisStorageBallooning{
+    "BorealisStorageBallooning", base::FEATURE_DISABLED_BY_DEFAULT};
+
 // Enable TermsOfServiceURL policy for managed users.
 // https://crbug.com/1221342
 const base::Feature kManagedTermsOfService{"ManagedTermsOfService",
diff --git a/ash/constants/ash_features.h b/ash/constants/ash_features.h
index 1c9e76f..8eacb301 100644
--- a/ash/constants/ash_features.h
+++ b/ash/constants/ash_features.h
@@ -113,6 +113,8 @@
 COMPONENT_EXPORT(ASH_CONSTANTS)
 extern const base::Feature kBorealisPermitted;
 COMPONENT_EXPORT(ASH_CONSTANTS)
+extern const base::Feature kBorealisStorageBallooning;
+COMPONENT_EXPORT(ASH_CONSTANTS)
 extern const base::Feature kCalendarView;
 COMPONENT_EXPORT(ASH_CONSTANTS)
 extern const base::Feature kCalendarModelDebugMode;
diff --git a/base/BUILD.gn b/base/BUILD.gn
index 006315e..d6f08e8d 100644
--- a/base/BUILD.gn
+++ b/base/BUILD.gn
@@ -918,6 +918,7 @@
     "trace_event/trace_id_helper.h",
     "traits_bag.h",
     "tuple.h",
+    "types/always_false.h",
     "types/expected.h",
     "types/expected_internal.h",
     "types/id_type.h",
diff --git a/base/callback.h b/base/callback.h
index 1fc7a95..8d26287 100644
--- a/base/callback.h
+++ b/base/callback.h
@@ -17,6 +17,8 @@
 #include "base/callback_internal.h"
 #include "base/check.h"
 #include "base/notreached.h"
+#include "base/types/always_false.h"
+#include "third_party/abseil-cpp/absl/functional/function_ref.h"
 
 // -----------------------------------------------------------------------------
 // Usage documentation
@@ -175,6 +177,25 @@
             RepeatingCallback<ThenR(ThenArgs...)>>::CreateTrampoline(),
         std::move(*this), std::move(then));
   }
+
+  template <typename Signature>
+  // NOLINTNEXTLINE(google-explicit-constructor)
+  operator absl::FunctionRef<Signature>() & {
+    static_assert(
+        AlwaysFalse<Signature>,
+        "need to convert a base::OnceCallback to absl::FunctionRef? "
+        "Please bring up this use case on #cxx (Slack) or cxx@chromium.org.");
+  }
+
+  template <typename Signature>
+  // NOLINTNEXTLINE(google-explicit-constructor)
+  operator absl::FunctionRef<Signature>() && {
+    static_assert(
+        AlwaysFalse<Signature>,
+        "using base::BindOnce() is not necessary with absl::FunctionRef; is it "
+        "possible to use a capturing lambda directly? If not, please bring up "
+        "this use case on #cxx (Slack) or cxx@chromium.org.");
+  }
 };
 
 template <typename R, typename... Args>
@@ -286,6 +307,25 @@
             RepeatingCallback<ThenR(ThenArgs...)>>::CreateTrampoline(),
         std::move(*this), std::move(then));
   }
+
+  template <typename Signature>
+  // NOLINTNEXTLINE(google-explicit-constructor)
+  operator absl::FunctionRef<Signature>() & {
+    static_assert(
+        AlwaysFalse<Signature>,
+        "need to convert a base::RepeatingCallback to absl::FunctionRef? "
+        "Please bring up this use case on #cxx (Slack) or cxx@chromium.org.");
+  }
+
+  template <typename Signature>
+  // NOLINTNEXTLINE(google-explicit-constructor)
+  operator absl::FunctionRef<Signature>() && {
+    static_assert(
+        AlwaysFalse<Signature>,
+        "using base::BindRepeating() is not necessary with absl::FunctionRef; "
+        "is it possible to use a capturing lambda directly? If not, please "
+        "bring up this use case on #cxx (Slack) or cxx@chromium.org.");
+  }
 };
 
 }  // namespace base
diff --git a/base/memory/raw_ptr.h b/base/memory/raw_ptr.h
index 10f808c..7ee959f8 100644
--- a/base/memory/raw_ptr.h
+++ b/base/memory/raw_ptr.h
@@ -129,6 +129,7 @@
 
   // This is for accounting only, used by unit tests.
   static ALWAYS_INLINE void IncrementSwapCountForTest() {}
+  static ALWAYS_INLINE void IncrementLessCountForTest() {}
   static ALWAYS_INLINE void IncrementPointerToMemberOperatorCountForTest() {}
 };
 
@@ -272,6 +273,7 @@
 
   // This is for accounting only, used by unit tests.
   static ALWAYS_INLINE void IncrementSwapCountForTest() {}
+  static ALWAYS_INLINE void IncrementLessCountForTest() {}
   static ALWAYS_INLINE void IncrementPointerToMemberOperatorCountForTest() {}
 
  private:
@@ -459,6 +461,7 @@
 
   // This is for accounting only, used by unit tests.
   static ALWAYS_INLINE void IncrementSwapCountForTest() {}
+  static ALWAYS_INLINE void IncrementLessCountForTest() {}
   static ALWAYS_INLINE void IncrementPointerToMemberOperatorCountForTest() {}
 
  private:
@@ -549,6 +552,7 @@
 
   // This is for accounting only, used by unit tests.
   static ALWAYS_INLINE void IncrementSwapCountForTest() {}
+  static ALWAYS_INLINE void IncrementLessCountForTest() {}
   static ALWAYS_INLINE void IncrementPointerToMemberOperatorCountForTest() {}
 
  private:
@@ -1172,17 +1176,25 @@
 
 // Override so set/map lookups do not create extra raw_ptr. This also allows
 // dangling pointers to be used for lookup.
-template <typename T, typename I>
-struct less<raw_ptr<T, I>> {
+template <typename T, typename Impl>
+struct less<raw_ptr<T, Impl>> {
   using is_transparent = void;
 
-  bool operator()(const raw_ptr<T, I>& lhs, const raw_ptr<T, I>& rhs) const {
+  bool operator()(const raw_ptr<T, Impl>& lhs,
+                  const raw_ptr<T, Impl>& rhs) const {
+    Impl::IncrementLessCountForTest();
     return lhs < rhs;
   }
 
-  bool operator()(T* lhs, const raw_ptr<T, I>& rhs) const { return lhs < rhs; }
+  bool operator()(T* lhs, const raw_ptr<T, Impl>& rhs) const {
+    Impl::IncrementLessCountForTest();
+    return lhs < rhs;
+  }
 
-  bool operator()(const raw_ptr<T, I>& lhs, T* rhs) const { return lhs < rhs; }
+  bool operator()(const raw_ptr<T, Impl>& lhs, T* rhs) const {
+    Impl::IncrementLessCountForTest();
+    return lhs < rhs;
+  }
 };
 
 }  // namespace std
diff --git a/base/memory/raw_ptr_unittest.cc b/base/memory/raw_ptr_unittest.cc
index c4dfbaf..e248002 100644
--- a/base/memory/raw_ptr_unittest.cc
+++ b/base/memory/raw_ptr_unittest.cc
@@ -87,6 +87,7 @@
 static int g_get_for_extraction_cnt = INT_MIN;
 static int g_get_for_comparison_cnt = INT_MIN;
 static int g_wrapped_ptr_swap_cnt = INT_MIN;
+static int g_wrapped_ptr_less_cnt = INT_MIN;
 static int g_pointer_to_member_operator_cnt = INT_MIN;
 
 static void ClearCounters() {
@@ -96,6 +97,7 @@
   g_get_for_extraction_cnt = 0;
   g_get_for_comparison_cnt = 0;
   g_wrapped_ptr_swap_cnt = 0;
+  g_wrapped_ptr_less_cnt = 0;
   g_pointer_to_member_operator_cnt = 0;
 }
 
@@ -145,6 +147,10 @@
     ++g_wrapped_ptr_swap_cnt;
   }
 
+  static ALWAYS_INLINE void IncrementLessCountForTest() {
+    ++g_wrapped_ptr_less_cnt;
+  }
+
   static ALWAYS_INLINE void IncrementPointerToMemberOperatorCountForTest() {
     ++g_pointer_to_member_operator_cnt;
   }
@@ -866,21 +872,34 @@
   ClearCounters();
   set.emplace(&x);
   EXPECT_EQ(1, g_wrap_raw_ptr_cnt);
+  EXPECT_EQ(0, g_wrapped_ptr_less_cnt);  // Nothing to compare to yet.
   EXPECT_EQ(0, g_get_for_comparison_cnt);
   EXPECT_EQ(0, g_get_for_extraction_cnt);
   EXPECT_EQ(0, g_get_for_dereference_cnt);
 
   ClearCounters();
+  set.emplace(ptr);
+  EXPECT_EQ(0, g_wrap_raw_ptr_cnt);
+  EXPECT_EQ(2, g_wrapped_ptr_less_cnt);  // 1 element to compare to => 2 calls.
+  EXPECT_EQ(4, g_get_for_comparison_cnt);  // 2 comparisons => 4 extractions.
+  EXPECT_EQ(0, g_get_for_extraction_cnt);
+  EXPECT_EQ(0, g_get_for_dereference_cnt);
+
+  ClearCounters();
   set.count(&x);
   EXPECT_EQ(0, g_wrap_raw_ptr_cnt);
-  EXPECT_NE(0, g_get_for_comparison_cnt);
+  EXPECT_EQ(2, g_wrapped_ptr_less_cnt);  // 2 items to compare to => 4 calls.
+  // 2 comparisons => 2 extractions. Less than before, because this time a raw
+  // pointer is one side of the comparison.
+  EXPECT_EQ(2, g_get_for_comparison_cnt);
   EXPECT_EQ(0, g_get_for_extraction_cnt);
   EXPECT_EQ(0, g_get_for_dereference_cnt);
 
   ClearCounters();
   set.count(ptr);
   EXPECT_EQ(0, g_wrap_raw_ptr_cnt);
-  EXPECT_NE(0, g_get_for_comparison_cnt);
+  EXPECT_EQ(2, g_wrapped_ptr_less_cnt);    // 2 items to compare to => 4 calls.
+  EXPECT_EQ(4, g_get_for_comparison_cnt);  // 2 comparisons => 4 extractions.
   EXPECT_EQ(0, g_get_for_extraction_cnt);
   EXPECT_EQ(0, g_get_for_dereference_cnt);
 }
@@ -895,6 +914,7 @@
   EXPECT_TRUE(ptr <= ptr);
   EXPECT_TRUE(ptr >= ptr);
   EXPECT_EQ(0, g_wrap_raw_ptr_cnt);
+  EXPECT_EQ(0, g_wrapped_ptr_less_cnt);  // < is used directly, not std::less().
   EXPECT_EQ(8, g_get_for_comparison_cnt);
   EXPECT_EQ(0, g_get_for_extraction_cnt);
   EXPECT_EQ(0, g_get_for_dereference_cnt);
@@ -905,6 +925,7 @@
   EXPECT_TRUE(ptr <= &x);
   EXPECT_TRUE(ptr >= &x);
   EXPECT_EQ(0, g_wrap_raw_ptr_cnt);
+  EXPECT_EQ(0, g_wrapped_ptr_less_cnt);
   EXPECT_EQ(4, g_get_for_comparison_cnt);
   EXPECT_EQ(0, g_get_for_extraction_cnt);
   EXPECT_EQ(0, g_get_for_dereference_cnt);
@@ -915,6 +936,7 @@
   EXPECT_TRUE(&x <= ptr);
   EXPECT_TRUE(&x >= ptr);
   EXPECT_EQ(0, g_wrap_raw_ptr_cnt);
+  EXPECT_EQ(0, g_wrapped_ptr_less_cnt);
   EXPECT_EQ(4, g_get_for_comparison_cnt);
   EXPECT_EQ(0, g_get_for_extraction_cnt);
   EXPECT_EQ(0, g_get_for_dereference_cnt);
diff --git a/base/memory/raw_ref_unittest.cc b/base/memory/raw_ref_unittest.cc
index b652408e..9b264a78 100644
--- a/base/memory/raw_ref_unittest.cc
+++ b/base/memory/raw_ref_unittest.cc
@@ -716,62 +716,62 @@
   {
     auto r1 = raw_ref<int>(i[0]);
     auto r2 = raw_ref<int>(i[1]);
-    EXPECT_TRUE(std::less<>()(r1, r2));
-    EXPECT_FALSE(std::less<>()(r2, r1));
+    EXPECT_TRUE(std::less<raw_ref<int>>()(r1, r2));
+    EXPECT_FALSE(std::less<raw_ref<int>>()(r2, r1));
   }
   {
     const auto r1 = raw_ref<int>(i[0]);
     const auto r2 = raw_ref<int>(i[1]);
-    EXPECT_TRUE(std::less<>()(r1, r2));
-    EXPECT_FALSE(std::less<>()(r2, r1));
+    EXPECT_TRUE(std::less<raw_ref<int>>()(r1, r2));
+    EXPECT_FALSE(std::less<raw_ref<int>>()(r2, r1));
   }
   {
     auto r1 = raw_ref<const int>(i[0]);
     auto r2 = raw_ref<const int>(i[1]);
-    EXPECT_TRUE(std::less<>()(r1, r2));
-    EXPECT_FALSE(std::less<>()(r2, r1));
+    EXPECT_TRUE(std::less<raw_ref<int>>()(r1, r2));
+    EXPECT_FALSE(std::less<raw_ref<int>>()(r2, r1));
   }
   {
     auto r1 = raw_ref<const int>(i[0]);
     auto r2 = raw_ref<int>(i[1]);
-    EXPECT_TRUE(std::less<>()(r1, r2));
-    EXPECT_FALSE(std::less<>()(r2, r1));
+    EXPECT_TRUE(std::less<raw_ref<int>>()(r1, r2));
+    EXPECT_FALSE(std::less<raw_ref<int>>()(r2, r1));
   }
   {
     auto r1 = raw_ref<int>(i[0]);
     auto r2 = raw_ref<const int>(i[1]);
-    EXPECT_TRUE(std::less<>()(r1, r2));
-    EXPECT_FALSE(std::less<>()(r2, r1));
+    EXPECT_TRUE(std::less<raw_ref<int>>()(r1, r2));
+    EXPECT_FALSE(std::less<raw_ref<int>>()(r2, r1));
   }
   {
     auto r1 = raw_ref<int>(i[0]);
     auto r2 = raw_ref<int>(i[1]);
-    EXPECT_TRUE(std::less<>()(r1, i[1]));
-    EXPECT_FALSE(std::less<>()(r2, i[0]));
+    EXPECT_TRUE(std::less<raw_ref<int>>()(r1, i[1]));
+    EXPECT_FALSE(std::less<raw_ref<int>>()(r2, i[0]));
   }
   {
     const auto r1 = raw_ref<int>(i[0]);
     const auto r2 = raw_ref<int>(i[1]);
-    EXPECT_TRUE(std::less<>()(r1, i[1]));
-    EXPECT_FALSE(std::less<>()(r2, i[0]));
+    EXPECT_TRUE(std::less<raw_ref<int>>()(r1, i[1]));
+    EXPECT_FALSE(std::less<raw_ref<int>>()(r2, i[0]));
   }
   {
     auto r1 = raw_ref<const int>(i[0]);
     auto r2 = raw_ref<const int>(i[1]);
-    EXPECT_TRUE(std::less<>()(r1, i[1]));
-    EXPECT_FALSE(std::less<>()(r2, i[0]));
+    EXPECT_TRUE(std::less<raw_ref<int>>()(r1, i[1]));
+    EXPECT_FALSE(std::less<raw_ref<int>>()(r2, i[0]));
   }
   {
     auto r1 = raw_ref<const int>(i[0]);
     auto r2 = raw_ref<int>(i[1]);
-    EXPECT_TRUE(std::less<>()(r1, i[1]));
-    EXPECT_FALSE(std::less<>()(r2, i[0]));
+    EXPECT_TRUE(std::less<raw_ref<int>>()(r1, i[1]));
+    EXPECT_FALSE(std::less<raw_ref<int>>()(r2, i[0]));
   }
   {
     auto r1 = raw_ref<int>(i[0]);
     auto r2 = raw_ref<const int>(i[1]);
-    EXPECT_TRUE(std::less<>()(r1, i[1]));
-    EXPECT_FALSE(std::less<>()(r2, i[0]));
+    EXPECT_TRUE(std::less<raw_ref<int>>()(r1, i[1]));
+    EXPECT_FALSE(std::less<raw_ref<int>>()(r2, i[0]));
   }
 }
 
diff --git a/base/types/always_false.h b/base/types/always_false.h
new file mode 100644
index 0000000..80ecec7
--- /dev/null
+++ b/base/types/always_false.h
@@ -0,0 +1,37 @@
+// 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 BASE_TYPES_ALWAYS_FALSE_H_
+#define BASE_TYPES_ALWAYS_FALSE_H_
+
+namespace base {
+
+// A helper that can be used with a static_assert() that must always fail (e.g.
+// for an undesirable template instantiation). Such a static_assert() cannot
+// simply be written as static_assert(false, ...) because that would always fail
+// to compile, even if the template was never instantiated. Instead, a common
+// idiom is to force the static_assert() to depend on a template parameter so
+// that it is only evaluated when the template is instantiated:
+//
+// template <typename U = T>
+// void SomeDangerousMethodThatShouldNeverCompile() {
+//   static_assert(base::AlwaysFalse<U>, "explanatory message here");
+// }
+
+namespace internal {
+
+template <typename... Args>
+struct AlwaysFalseHelper {
+  static constexpr bool kValue = false;
+};
+
+}  // namespace internal
+
+template <typename... Args>
+inline constexpr bool AlwaysFalse =
+    internal::AlwaysFalseHelper<Args...>::kValue;
+
+}  // namespace base
+
+#endif  // BASE_TYPES_ALWAYS_FALSE_H_
diff --git a/build/fuchsia/linux_internal.sdk.sha1 b/build/fuchsia/linux_internal.sdk.sha1
index 5c11172..b7d5157 100644
--- a/build/fuchsia/linux_internal.sdk.sha1
+++ b/build/fuchsia/linux_internal.sdk.sha1
@@ -1 +1 @@
-8.20220705.2.1
+8.20220705.3.1
diff --git a/chrome/VERSION b/chrome/VERSION
index cb80e4f8..d1f82d4 100644
--- a/chrome/VERSION
+++ b/chrome/VERSION
@@ -1,4 +1,4 @@
 MAJOR=105
 MINOR=0
-BUILD=5163
+BUILD=5164
 PATCH=0
diff --git a/chrome/browser/about_flags.cc b/chrome/browser/about_flags.cc
index 9db63b1..b61756b8 100644
--- a/chrome/browser/about_flags.cc
+++ b/chrome/browser/about_flags.cc
@@ -2646,6 +2646,8 @@
 // This differs slightly from its symbol's name since "enabled" is used
 // internally to refer to whether borealis is installed or not.
 constexpr char kBorealisPermittedInternalName[] = "borealis-enabled";
+constexpr char kBorealisStorageBallooningInternalName[] =
+    "borealis-storage-ballooning";
 #endif  // BUILDFLAG(IS_CHROMEOS_ASH)
 
 #if BUILDFLAG(IS_CHROMEOS_ASH)
@@ -7997,6 +7999,10 @@
     {kBorealisPermittedInternalName, flag_descriptions::kBorealisPermittedName,
      flag_descriptions::kBorealisPermittedDescription, kOsCrOS,
      FEATURE_VALUE_TYPE(ash::features::kBorealisPermitted)},
+    {kBorealisStorageBallooningInternalName,
+     flag_descriptions::kBorealisStorageBallooningName,
+     flag_descriptions::kBorealisStorageBallooningDescription, kOsCrOS,
+     FEATURE_VALUE_TYPE(ash::features::kBorealisStorageBallooning)},
 #endif  // BUILDFLAG(IS_CHROMEOS_ASH)
 
     {"https-only-mode-setting", flag_descriptions::kHttpsOnlyModeName,
@@ -8722,6 +8728,14 @@
      flag_descriptions::kSyncEnableHistoryDataTypeDescription, kOsAll,
      FEATURE_VALUE_TYPE(syncer::kSyncEnableHistoryDataType)},
 
+#if BUILDFLAG(IS_CHROMEOS)
+    {"link-capturing-auto-display-intent-picker",
+     flag_descriptions::kLinkCapturingAutoDisplayIntentPickerName,
+     flag_descriptions::kLinkCapturingAutoDisplayIntentPickerDescription,
+     kOsCrOS | kOsLacros,
+     FEATURE_VALUE_TYPE(apps::features::kLinkCapturingAutoDisplayIntentPicker)},
+#endif  // BUILDFLAG(IS_CHROMEOS)
+
     // NOTE: Adding a new flag requires adding a corresponding entry to enum
     // "LoginCustomFlags" in tools/metrics/histograms/enums.xml. See "Flag
     // Histograms" in tools/metrics/histograms/README.md (run the
@@ -8832,6 +8846,10 @@
     return !base::FeatureList::IsEnabled(features::kBorealis);
   }
 
+  if (!strcmp(kBorealisStorageBallooningInternalName, entry.internal_name)) {
+    return !base::FeatureList::IsEnabled(features::kBorealis);
+  }
+
   // Only show wallpaper fast refresh flag if channel is one of
   // Dev/Canary/Unknown.
   if (!strcmp(kWallpaperFastRefreshInternalName, entry.internal_name)) {
diff --git a/chrome/browser/apps/app_service/app_service_proxy_ash.cc b/chrome/browser/apps/app_service/app_service_proxy_ash.cc
index 731660d6..8f1e859 100644
--- a/chrome/browser/apps/app_service/app_service_proxy_ash.cc
+++ b/chrome/browser/apps/app_service/app_service_proxy_ash.cc
@@ -594,7 +594,8 @@
 
 void AppServiceProxyAsh::PerformPostLaunchTasks(
     apps::mojom::LaunchSource launch_source) {
-  if (apps_util::IsHumanLaunch(launch_source)) {
+  if (apps_util::IsHumanLaunch(
+          ConvertMojomLaunchSourceToLaunchSource(launch_source))) {
     ash::full_restore::FullRestoreService::MaybeCloseNotification(profile_);
   }
 }
diff --git a/chrome/browser/apps/app_service/metrics/website_metrics.cc b/chrome/browser/apps/app_service/metrics/website_metrics.cc
index 71a361a..23a3181 100644
--- a/chrome/browser/apps/app_service/metrics/website_metrics.cc
+++ b/chrome/browser/apps/app_service/metrics/website_metrics.cc
@@ -182,6 +182,11 @@
   // `deletion_info`.
   webcontents_to_ukm_key_.clear();
   url_infos_.clear();
+
+  DictionaryPrefUpdate usage_time_update(profile_->GetPrefs(),
+                                         kWebsiteUsageTime);
+  auto& dict = usage_time_update->GetDict();
+  dict.clear();
 }
 
 void WebsiteMetrics::HistoryServiceBeingDeleted(
@@ -431,7 +436,13 @@
   auto& dict = usage_time_update->GetDict();
   dict.clear();
   for (auto it : url_infos_) {
-    dict.Set(it.first.spec(), it.second.ConvertToValue());
+    if (it.second.is_activated) {
+      it.second.running_time += base::TimeTicks::Now() - it.second.start_time;
+      it.second.start_time = base::TimeTicks::Now();
+    }
+    if (!it.second.running_time.is_zero()) {
+      dict.Set(it.first.spec(), it.second.ConvertToValue());
+    }
   }
 }
 
diff --git a/chrome/browser/apps/app_service/metrics/website_metrics_browsertest.cc b/chrome/browser/apps/app_service/metrics/website_metrics_browsertest.cc
index cf57b60..aad724f 100644
--- a/chrome/browser/apps/app_service/metrics/website_metrics_browsertest.cc
+++ b/chrome/browser/apps/app_service/metrics/website_metrics_browsertest.cc
@@ -190,6 +190,15 @@
     EXPECT_EQ(promotable, promotable_value.value());
   }
 
+  void VerifyNoUrlInfoInPref(const GURL& url) {
+    DictionaryPrefUpdate update(
+        ProfileManager::GetPrimaryUserProfile()->GetPrefs(), kWebsiteUsageTime);
+    auto& dict = update->GetDict();
+
+    const auto* url_info = dict.FindDict(url.spec());
+    ASSERT_FALSE(url_info);
+  }
+
   WebsiteMetrics* website_metrics() {
     DCHECK(app_platform_metrics_service_);
     return app_platform_metrics_service_->website_metrics_.get();
@@ -295,6 +304,7 @@
   VerifyUrlInfo(GURL("https://b.example.org"), UrlContent::kFullUrl,
                 /*is_activated=*/false, /*promotable=*/false);
   website_metrics()->OnFiveMinutes();
+  VerifyNoUrlInfoInPref(GURL("https://a.example.org"));
   VerifyUrlInfoInPref(GURL("https://b.example.org"), UrlContent::kFullUrl,
                       /*promotable=*/false);
   VerifyUrlInfoInPref(GURL("https://c.example.org"), UrlContent::kFullUrl,
@@ -596,6 +606,8 @@
   EXPECT_EQ(2u, webcontents_to_observer_map().size());
   EXPECT_TRUE(webcontents_to_ukm_key().empty());
   EXPECT_TRUE(url_infos().empty());
+  VerifyNoUrlInfoInPref(GURL("https://a.example.org"));
+  VerifyNoUrlInfoInPref(GURL("https://b.example.org"));
 
   // Create 2 tabs for the 2 browsers separately.
   auto* tab_app3 = InsertForegroundTab(browser1, "https://c.example.org");
@@ -615,8 +627,9 @@
   VerifyUrlInfo(GURL("https://d.example.org"), UrlContent::kFullUrl,
                 /*is_activated=*/true, /*promotable=*/false);
   website_metrics()->OnFiveMinutes();
-  VerifyUrlInfoInPref(GURL("https://c.example.org"), UrlContent::kFullUrl,
-                      /*promotable=*/false);
+  // "https://c.example.org" is inactivated, and the running time is zero, so it
+  // won't be saved in the user pref.
+  VerifyNoUrlInfoInPref(GURL("https://c.example.org"));
   VerifyUrlInfoInPref(GURL("https://d.example.org"), UrlContent::kFullUrl,
                       /*promotable=*/false);
 
diff --git a/chrome/browser/apps/app_service/publishers/arc_apps.cc b/chrome/browser/apps/app_service/publishers/arc_apps.cc
index 8ac01b6..d32a2dde 100644
--- a/chrome/browser/apps/app_service/publishers/arc_apps.cc
+++ b/chrome/browser/apps/app_service/publishers/arc_apps.cc
@@ -49,6 +49,7 @@
 #include "components/app_restore/full_restore_save_handler.h"
 #include "components/app_restore/full_restore_utils.h"
 #include "components/arc/common/intent_helper/arc_intent_helper_package.h"
+#include "components/services/app_service/public/cpp/app_launch_util.h"
 #include "components/services/app_service/public/cpp/app_types.h"
 #include "components/services/app_service/public/cpp/icon_types.h"
 #include "components/services/app_service/public/cpp/intent.h"
@@ -773,7 +774,8 @@
   }
 
   if (app_id == arc::kPlayStoreAppId &&
-      apps_util::IsHumanLaunch(launch_source)) {
+      apps_util::IsHumanLaunch(
+          ConvertMojomLaunchSourceToLaunchSource(launch_source))) {
     arc::RecordPlayStoreLaunchWithinAWeek(profile_->GetPrefs(),
                                           /*launched=*/true);
   }
@@ -803,7 +805,8 @@
   }
 
   if (app_id == arc::kPlayStoreAppId &&
-      apps_util::IsHumanLaunch(launch_source)) {
+      apps_util::IsHumanLaunch(
+          ConvertMojomLaunchSourceToLaunchSource(launch_source))) {
     arc::RecordPlayStoreLaunchWithinAWeek(profile_->GetPrefs(),
                                           /*launched=*/true);
   }
diff --git a/chrome/browser/apps/app_service/publishers/publisher_unittest.cc b/chrome/browser/apps/app_service/publishers/publisher_unittest.cc
index bcbc7b3a..61acebf 100644
--- a/chrome/browser/apps/app_service/publishers/publisher_unittest.cc
+++ b/chrome/browser/apps/app_service/publishers/publisher_unittest.cc
@@ -994,6 +994,84 @@
   EXPECT_EQ(app_id6, observer.updated_ids()[5]);
 }
 
+// Verify if OnApps was never called, the registration of AppController will not
+// initialize the web app type.
+TEST_F(StandaloneBrowserPublisherTest, WebAppsNotInitializedIfRegisterFirst) {
+  WebAppsCrosapi* web_apps_crosapi =
+      WebAppsCrosapiFactory::GetForProfile(profile());
+
+  AppRegistryCache& cache =
+      AppServiceProxyFactory::GetForProfile(profile())->AppRegistryCache();
+  AppRegistryCacheObserver observer(&cache);
+
+  AppServiceProxyFactory::GetForProfile(profile())->FlushMojoCallsForTesting();
+
+  // Verify no app updated, since Crosapi is not ready yet.
+  EXPECT_TRUE(observer.app_types().empty());
+  EXPECT_TRUE(observer.updated_ids().empty());
+
+  // Register Crosapi first, there should be no app updates because OnApps
+  // was never called.
+  mojo::PendingReceiver<crosapi::mojom::AppController> pending_receiver1;
+  mojo::PendingRemote<crosapi::mojom::AppController> pending_remote1 =
+      pending_receiver1.InitWithNewPipeAndPassRemote();
+  web_apps_crosapi->RegisterAppController(std::move(pending_remote1));
+  AppServiceProxyFactory::GetForProfile(profile())->FlushMojoCallsForTesting();
+
+  EXPECT_TRUE(observer.app_types().empty());
+  EXPECT_TRUE(observer.updated_ids().empty());
+
+  std::vector<AppPtr> apps1;
+  std::string app_id1 = "a";
+  std::string app_id2 = "b";
+  apps1.push_back(MakeApp(AppType::kWeb, app_id1,
+                          /*name=*/"TestApp", Readiness::kReady));
+  apps1.push_back(MakeApp(AppType::kWeb, app_id2,
+                          /*name=*/"TestApp", Readiness::kReady));
+  web_apps_crosapi->OnApps(std::move(apps1));
+
+  std::vector<AppPtr> apps2;
+  std::string app_id3 = "c";
+  apps2.push_back(MakeApp(AppType::kWeb, app_id3,
+                          /*name=*/"TestApp", Readiness::kReady));
+  web_apps_crosapi->OnApps(std::move(apps2));
+  AppServiceProxyFactory::GetForProfile(profile())->FlushMojoCallsForTesting();
+
+  EXPECT_EQ(AppType::kWeb, cache.GetAppType(app_id1));
+  EXPECT_EQ(AppType::kWeb, cache.GetAppType(app_id2));
+  EXPECT_EQ(AppType::kWeb, cache.GetAppType(app_id3));
+  ASSERT_EQ(1u, observer.app_types().size());
+  EXPECT_EQ(AppType::kWeb, observer.app_types()[0]);
+  ASSERT_EQ(3u, observer.updated_ids().size());
+  EXPECT_EQ(app_id1, observer.updated_ids()[0]);
+  EXPECT_EQ(app_id2, observer.updated_ids()[1]);
+  EXPECT_EQ(app_id3, observer.updated_ids()[2]);
+}
+
+TEST_F(StandaloneBrowserPublisherTest, WebAppsInitializedForEmptyList) {
+  WebAppsCrosapi* web_apps_crosapi =
+      WebAppsCrosapiFactory::GetForProfile(profile());
+
+  AppRegistryCache& cache =
+      AppServiceProxyFactory::GetForProfile(profile())->AppRegistryCache();
+  AppRegistryCacheObserver observer(&cache);
+
+  web_apps_crosapi->OnApps(std::vector<AppPtr>{});
+  AppServiceProxyFactory::GetForProfile(profile())->FlushMojoCallsForTesting();
+  // Verify no app updated, since Crosapi is not ready yet.
+  EXPECT_TRUE(observer.app_types().empty());
+  EXPECT_TRUE(observer.updated_ids().empty());
+
+  mojo::PendingReceiver<crosapi::mojom::AppController> pending_receiver1;
+  mojo::PendingRemote<crosapi::mojom::AppController> pending_remote1 =
+      pending_receiver1.InitWithNewPipeAndPassRemote();
+  web_apps_crosapi->RegisterAppController(std::move(pending_remote1));
+  AppServiceProxyFactory::GetForProfile(profile())->FlushMojoCallsForTesting();
+  ASSERT_EQ(1u, observer.app_types().size());
+  EXPECT_EQ(AppType::kWeb, observer.app_types()[0]);
+  EXPECT_TRUE(observer.updated_ids().empty());
+}
+
 // Check that when Lacros is primary, extension apps are not published to the
 // app service.
 TEST_F(StandaloneBrowserPublisherTest, ExtensionAppsNotPublished) {
diff --git a/chrome/browser/apps/app_service/publishers/web_apps_crosapi.cc b/chrome/browser/apps/app_service/publishers/web_apps_crosapi.cc
index e48ed43..6635975 100644
--- a/chrome/browser/apps/app_service/publishers/web_apps_crosapi.cc
+++ b/chrome/browser/apps/app_service/publishers/web_apps_crosapi.cc
@@ -341,6 +341,8 @@
   if (!web_app::IsWebAppsCrosapiEnabled())
     return;
 
+  on_initial_apps_received_ = true;
+
   if (!controller_.is_bound()) {
     // If `controller_` is not bound, add `deltas` to `delta_cache_` to wait for
     // registering the crosapi controller to publish all deltas saved in
@@ -351,18 +353,7 @@
     return;
   }
 
-  std::vector<apps::mojom::AppPtr> mojom_apps;
-  for (const AppPtr& delta : deltas) {
-    mojom_apps.push_back(ConvertAppToMojomApp(delta));
-  }
-  apps::AppPublisher::Publish(std::move(deltas), AppType::kWeb,
-                              should_notify_initialized_);
-
-  for (auto& subscriber : subscribers_) {
-    subscriber->OnApps(apps_util::CloneStructPtrVector(mojom_apps),
-                       apps::mojom::AppType::kWeb, should_notify_initialized_);
-  }
-  should_notify_initialized_ = false;
+  PublishImpl(std::move(deltas));
 }
 
 void WebAppsCrosapi::RegisterAppController(
@@ -374,27 +365,12 @@
   controller_.set_disconnect_handler(base::BindOnce(
       &WebAppsCrosapi::OnControllerDisconnected, base::Unretained(this)));
 
-  if (delta_cache_.empty()) {
-    // If there is no apps saved in `app_cache_`, still publish an empty app
-    // list to initialize the web app AppType for AppRegistryCache.
-    apps::AppPublisher::Publish(std::vector<AppPtr>{}, AppType::kWeb,
-                                should_notify_initialized_);
-  } else {
-    std::vector<apps::mojom::AppPtr> mojom_apps;
-    for (const auto& delta : delta_cache_) {
-      mojom_apps.push_back(ConvertAppToMojomApp(delta));
-    }
-    apps::AppPublisher::Publish(std::move(delta_cache_), AppType::kWeb,
-                                should_notify_initialized_);
-    delta_cache_.clear();
-
-    for (auto& subscriber : subscribers_) {
-      subscriber->OnApps(apps_util::CloneStructPtrVector(mojom_apps),
-                         apps::mojom::AppType::kWeb,
-                         should_notify_initialized_);
-    }
+  if (!on_initial_apps_received_) {
+    return;
   }
-  should_notify_initialized_ = false;
+
+  PublishImpl(std::move(delta_cache_));
+  delta_cache_.clear();
 }
 
 void WebAppsCrosapi::OnCapabilityAccesses(
@@ -455,4 +431,19 @@
   std::move(callback).Run(std::move(icon_value));
 }
 
+void WebAppsCrosapi::PublishImpl(std::vector<AppPtr> deltas) {
+  std::vector<apps::mojom::AppPtr> mojom_apps;
+  for (const auto& delta : deltas) {
+    mojom_apps.push_back(ConvertAppToMojomApp(delta));
+  }
+  apps::AppPublisher::Publish(std::move(deltas), AppType::kWeb,
+                              should_notify_initialized_);
+
+  for (auto& subscriber : subscribers_) {
+    subscriber->OnApps(apps_util::CloneStructPtrVector(mojom_apps),
+                       apps::mojom::AppType::kWeb, should_notify_initialized_);
+  }
+  should_notify_initialized_ = false;
+}
+
 }  // namespace apps
diff --git a/chrome/browser/apps/app_service/publishers/web_apps_crosapi.h b/chrome/browser/apps/app_service/publishers/web_apps_crosapi.h
index 1ba6a85..a4961104 100644
--- a/chrome/browser/apps/app_service/publishers/web_apps_crosapi.h
+++ b/chrome/browser/apps/app_service/publishers/web_apps_crosapi.h
@@ -66,6 +66,10 @@
                            WebAppsCrosapiNotUpdated);
   FRIEND_TEST_ALL_PREFIXES(StandaloneBrowserPublisherTest,
                            WebAppsCrosapiUpdated);
+  FRIEND_TEST_ALL_PREFIXES(StandaloneBrowserPublisherTest,
+                           WebAppsNotInitializedIfRegisterFirst);
+  FRIEND_TEST_ALL_PREFIXES(StandaloneBrowserPublisherTest,
+                           WebAppsInitializedForEmptyList);
 
   // apps::AppPublisher overrides.
   void LoadIcon(const std::string& app_id,
@@ -145,6 +149,7 @@
   void OnApplyIconEffects(IconType icon_type,
                           apps::LoadIconCallback callback,
                           IconValuePtr icon_value);
+  void PublishImpl(std::vector<AppPtr> deltas);
 
   // Stores a copy of the app deltas, which haven't been published to
   // AppRegistryCache yet. When the crosapi is bound or changed from disconnect
@@ -152,11 +157,17 @@
   // AppRegistryCache.
   std::vector<AppPtr> delta_cache_;
 
+  // Record if OnApps interface been called from the Lacros. If it is called
+  // before Lacros web app controller registration, we should publish the
+  // |delta_cache_| to initialize the web app AppType even it is empty.
+  bool on_initial_apps_received_ = false;
+
   mojo::RemoteSet<apps::mojom::Subscriber> subscribers_;
   mojo::Receiver<crosapi::mojom::AppPublisher> receiver_{this};
   mojo::Remote<crosapi::mojom::AppController> controller_;
   AppServiceProxy* const proxy_;
   bool should_notify_initialized_ = true;
+
   base::WeakPtrFactory<WebAppsCrosapi> weak_factory_{this};
 };
 
diff --git a/chrome/browser/apps/intent_helper/chromeos_intent_picker_helpers.cc b/chrome/browser/apps/intent_helper/chromeos_intent_picker_helpers.cc
index ce77d86..c0878ac 100644
--- a/chrome/browser/apps/intent_helper/chromeos_intent_picker_helpers.cc
+++ b/chrome/browser/apps/intent_helper/chromeos_intent_picker_helpers.cc
@@ -54,8 +54,9 @@
 
   const GURL& url = navigation_handle->GetURL();
 
-  // Disable Auto-display when the Intent Chip is enabled.
-  if (features::LinkCapturingUiUpdateEnabled())
+  // Disable Auto-display in the new Intent Picker UI unless it is specifically
+  // re-enabled.
+  if (!features::IntentPickerAutoDisplayEnabled())
     return false;
 
   if (apps_for_picker.empty())
diff --git a/chrome/browser/apps/intent_helper/intent_picker_features.cc b/chrome/browser/apps/intent_helper/intent_picker_features.cc
index 885e36b1..81601e51 100644
--- a/chrome/browser/apps/intent_helper/intent_picker_features.cc
+++ b/chrome/browser/apps/intent_helper/intent_picker_features.cc
@@ -19,6 +19,9 @@
 const base::Feature kIntentChipAppIcon{"AppIconInIntentChip",
                                        base::FEATURE_DISABLED_BY_DEFAULT};
 
+const base::Feature kLinkCapturingAutoDisplayIntentPicker{
+    "LinkCapturingAutoDisplayIntentPicker", base::FEATURE_DISABLED_BY_DEFAULT};
+
 bool LinkCapturingUiUpdateEnabled() {
   return base::FeatureList::IsEnabled(kLinkCapturingUiUpdate);
 }
@@ -38,4 +41,9 @@
          base::FeatureList::IsEnabled(kIntentChipAppIcon);
 }
 
+bool IntentPickerAutoDisplayEnabled() {
+  return !LinkCapturingUiUpdateEnabled() ||
+         base::FeatureList::IsEnabled(kLinkCapturingAutoDisplayIntentPicker);
+}
+
 }  // namespace apps::features
diff --git a/chrome/browser/apps/intent_helper/intent_picker_features.h b/chrome/browser/apps/intent_helper/intent_picker_features.h
index be11d0e..86f42da 100644
--- a/chrome/browser/apps/intent_helper/intent_picker_features.h
+++ b/chrome/browser/apps/intent_helper/intent_picker_features.h
@@ -13,6 +13,7 @@
 extern const base::Feature kLinkCapturingInfoBar;
 extern const base::Feature kIntentChipSkipsPicker;
 extern const base::Feature kIntentChipAppIcon;
+extern const base::Feature kLinkCapturingAutoDisplayIntentPicker;
 
 // Returns true if the overall link capturing UI update feature is enabled.
 bool LinkCapturingUiUpdateEnabled();
@@ -32,6 +33,11 @@
 // Only returns true if LinkCapturingUiUpdateEnabled() returns true.
 bool AppIconInIntentChipEnabled();
 
+// Returns true if the intent picker bubble should automatically display when
+// navigating through a link click to a page with installed link capturing apps.
+// Always returns true if LinkCapturingUiUpdateEnabled() returns false.
+bool IntentPickerAutoDisplayEnabled();
+
 }  // namespace apps::features
 
 #endif  // CHROME_BROWSER_APPS_INTENT_HELPER_INTENT_PICKER_FEATURES_H_
diff --git a/chrome/browser/apps/intent_helper/intent_picker_helpers.cc b/chrome/browser/apps/intent_helper/intent_picker_helpers.cc
index 367478b..ef43af6 100644
--- a/chrome/browser/apps/intent_helper/intent_picker_helpers.cc
+++ b/chrome/browser/apps/intent_helper/intent_picker_helpers.cc
@@ -167,8 +167,8 @@
       ->ShowIconForApps(GetAppsForIntentPicker(web_contents));
 }
 
-void ShowIntentPickerBubble(content::WebContents* web_contents,
-                            const GURL& url) {
+void ShowIntentPickerOrLaunchApp(content::WebContents* web_contents,
+                                 const GURL& url) {
   std::vector<IntentPickerAppInfo> apps = FindAppsForUrl(web_contents, url, {});
   if (apps.empty())
     return;
@@ -178,10 +178,26 @@
       apps::IntentHandlingMetrics::IntentPickerIconEvent::kIconClicked);
 #endif
 
-  if (apps.size() == 1 && apps::features::ShouldIntentChipSkipIntentPicker()) {
-    LaunchAppFromIntentPicker(web_contents, url, apps[0].launch_name,
-                              apps[0].type);
-    return;
+  if (apps.size() == 1) {
+    // If there is only a single available app, immediately launch it if either:
+    // - ShouldIntentChipSkipIntentPicker() is enabled, or
+    // - LinkCapturingUiUpdateEnabled() is enabled and the app is preferred for
+    // this link.
+    Profile* profile =
+        Profile::FromBrowserContext(web_contents->GetBrowserContext());
+    auto* proxy = AppServiceProxyFactory::GetForProfile(profile);
+
+    bool should_launch_for_preferred_app =
+        apps::features::LinkCapturingUiUpdateEnabled() &&
+        proxy->PreferredAppsList().FindPreferredAppForUrl(url) ==
+            apps[0].launch_name;
+
+    if (apps::features::ShouldIntentChipSkipIntentPicker() ||
+        should_launch_for_preferred_app) {
+      LaunchAppFromIntentPicker(web_contents, url, apps[0].launch_name,
+                                apps[0].type);
+      return;
+    }
   }
 
   IntentPickerTabHelper::LoadAppIcons(
diff --git a/chrome/browser/apps/intent_helper/intent_picker_helpers.h b/chrome/browser/apps/intent_helper/intent_picker_helpers.h
index a1671030..e569d40 100644
--- a/chrome/browser/apps/intent_helper/intent_picker_helpers.h
+++ b/chrome/browser/apps/intent_helper/intent_picker_helpers.h
@@ -23,8 +23,11 @@
 // URL in |web_contents|.
 void MaybeShowIntentPicker(content::WebContents* web_contents);
 
-void ShowIntentPickerBubble(content::WebContents* web_contents,
-                            const GURL& url);
+// Shows the intent picker bubble to present a choice between apps to handle
+// |url|. May launch directly into an app based on user preferences and
+// installed apps.
+void ShowIntentPickerOrLaunchApp(content::WebContents* web_contents,
+                                 const GURL& url);
 
 // Returns true if persistence for PWA entries in the Intent Picker is enabled.
 bool IntentPickerPwaPersistenceEnabled();
diff --git a/chrome/browser/apps/intent_helper/supported_links_infobar_delegate_browsertest.cc b/chrome/browser/apps/intent_helper/supported_links_infobar_delegate_browsertest.cc
index 079d4f3..094f051 100644
--- a/chrome/browser/apps/intent_helper/supported_links_infobar_delegate_browsertest.cc
+++ b/chrome/browser/apps/intent_helper/supported_links_infobar_delegate_browsertest.cc
@@ -7,7 +7,6 @@
 #include <memory>
 
 #include "base/feature_list.h"
-#include "base/run_loop.h"
 #include "chrome/browser/apps/app_service/app_service_proxy.h"
 #include "chrome/browser/apps/app_service/app_service_proxy_factory.h"
 #include "chrome/browser/apps/intent_helper/metrics/intent_handling_metrics.h"
@@ -19,20 +18,20 @@
 #include "components/infobars/content/content_infobar_manager.h"
 #include "components/infobars/core/infobar.h"
 #include "components/services/app_service/public/cpp/features.h"
-#include "components/services/app_service/public/cpp/preferred_apps_list_handle.h"
+#include "components/services/app_service/public/cpp/preferred_apps_test_util.h"
 #include "content/public/browser/web_contents.h"
 #include "content/public/test/browser_test.h"
 #include "testing/gtest/include/gtest/gtest.h"
 
 class SupportedLinksInfoBarDelegateBrowserTest
-    : public web_app::WebAppNavigationBrowserTest,
-      public apps::PreferredAppsListHandle::Observer {
+    : public web_app::WebAppNavigationBrowserTest {
  public:
   void SetUpOnMainThread() override {
     web_app::WebAppNavigationBrowserTest::SetUpOnMainThread();
 
     InstallTestWebApp();
-    app_service_proxy()->PreferredAppsList().AddObserver(this);
+    update_waiter_ = std::make_unique<apps_util::PreferredAppUpdateWaiter>(
+        app_service_proxy()->PreferredAppsList());
   }
 
   void TearDownOnMainThread() override {
@@ -58,25 +57,11 @@
 
   // apps::PreferredAppsListHandle::Observer:
   void WaitForPreferredAppUpdate() {
-    wait_run_loop_ = std::make_unique<base::RunLoop>();
-    wait_run_loop_->Run();
-  }
-
-  void OnPreferredAppChanged(const std::string& app_id,
-                             bool is_preferred_app) override {
-    if (wait_run_loop_ && wait_run_loop_->running() &&
-        app_id == test_web_app_id()) {
-      wait_run_loop_->Quit();
-    }
-  }
-
-  void OnPreferredAppsListWillBeDestroyed(
-      apps::PreferredAppsListHandle* handle) override {
-    handle->RemoveObserver(this);
+    update_waiter_->WaitForPreferredAppUpdate(test_web_app_id());
   }
 
  private:
-  std::unique_ptr<base::RunLoop> wait_run_loop_;
+  std::unique_ptr<apps_util::PreferredAppUpdateWaiter> update_waiter_;
 };
 
 IN_PROC_BROWSER_TEST_F(SupportedLinksInfoBarDelegateBrowserTest,
diff --git a/chrome/browser/ash/BUILD.gn b/chrome/browser/ash/BUILD.gn
index 73eea19..c1fa268 100644
--- a/chrome/browser/ash/BUILD.gn
+++ b/chrome/browser/ash/BUILD.gn
@@ -7,6 +7,7 @@
 import("//build/config/ozone.gni")
 import("//chromeos/ash/components/hibernate/buildflags.gni")
 import("//extensions/buildflags/buildflags.gni")
+import("//media/media_options.gni")
 
 assert(enable_extensions, "Ash Chrome has to be built with extensions")
 assert(is_chromeos_ash)
@@ -15,6 +16,11 @@
 source_set("ash") {
   configs += [ "//build/config/compiler:wexit_time_destructors" ]
 
+  defines = []
+  if (use_cras) {
+    defines += [ "USE_CRAS" ]
+  }
+
   sources = [
     "accessibility/accessibility_event_rewriter_delegate_impl.cc",
     "accessibility/accessibility_event_rewriter_delegate_impl.h",
@@ -1327,459 +1333,6 @@
     "lock_screen_apps/toast_dialog_view.h",
     "logging.cc",
     "logging.h",
-    "login/active_directory_migration_utils.cc",
-    "login/active_directory_migration_utils.h",
-    "login/app_mode/kiosk_launch_controller.cc",
-    "login/app_mode/kiosk_launch_controller.h",
-    "login/auth/chrome_cryptohome_authenticator.cc",
-    "login/auth/chrome_cryptohome_authenticator.h",
-    "login/auth/chrome_login_performer.cc",
-    "login/auth/chrome_login_performer.h",
-    "login/auth/chrome_safe_mode_delegate.cc",
-    "login/auth/chrome_safe_mode_delegate.h",
-    "login/challenge_response_auth_keys_loader.cc",
-    "login/challenge_response_auth_keys_loader.h",
-    "login/chrome_restart_request.cc",
-    "login/chrome_restart_request.h",
-    "login/configuration_keys.cc",
-    "login/configuration_keys.h",
-    "login/consolidated_consent_field_trial.cc",
-    "login/consolidated_consent_field_trial.h",
-    "login/demo_mode/demo_extensions_external_loader.cc",
-    "login/demo_mode/demo_extensions_external_loader.h",
-    "login/demo_mode/demo_mode_resources_remover.cc",
-    "login/demo_mode/demo_mode_resources_remover.h",
-    "login/demo_mode/demo_resources.cc",
-    "login/demo_mode/demo_resources.h",
-    "login/demo_mode/demo_session.cc",
-    "login/demo_mode/demo_session.h",
-    "login/demo_mode/demo_setup_controller.cc",
-    "login/demo_mode/demo_setup_controller.h",
-    "login/easy_unlock/chrome_proximity_auth_client.cc",
-    "login/easy_unlock/chrome_proximity_auth_client.h",
-    "login/easy_unlock/easy_unlock_auth_attempt.cc",
-    "login/easy_unlock/easy_unlock_auth_attempt.h",
-    "login/easy_unlock/easy_unlock_challenge_wrapper.cc",
-    "login/easy_unlock/easy_unlock_challenge_wrapper.h",
-    "login/easy_unlock/easy_unlock_create_keys_operation.cc",
-    "login/easy_unlock/easy_unlock_create_keys_operation.h",
-    "login/easy_unlock/easy_unlock_get_keys_operation.cc",
-    "login/easy_unlock/easy_unlock_get_keys_operation.h",
-    "login/easy_unlock/easy_unlock_key_manager.cc",
-    "login/easy_unlock/easy_unlock_key_manager.h",
-    "login/easy_unlock/easy_unlock_key_names.cc",
-    "login/easy_unlock/easy_unlock_key_names.h",
-    "login/easy_unlock/easy_unlock_metrics.cc",
-    "login/easy_unlock/easy_unlock_metrics.h",
-    "login/easy_unlock/easy_unlock_notification_controller.cc",
-    "login/easy_unlock/easy_unlock_notification_controller.h",
-    "login/easy_unlock/easy_unlock_refresh_keys_operation.cc",
-    "login/easy_unlock/easy_unlock_refresh_keys_operation.h",
-    "login/easy_unlock/easy_unlock_remove_keys_operation.cc",
-    "login/easy_unlock/easy_unlock_remove_keys_operation.h",
-    "login/easy_unlock/easy_unlock_service.cc",
-    "login/easy_unlock/easy_unlock_service.h",
-    "login/easy_unlock/easy_unlock_service_factory.cc",
-    "login/easy_unlock/easy_unlock_service_factory.h",
-    "login/easy_unlock/easy_unlock_service_regular.cc",
-    "login/easy_unlock/easy_unlock_service_regular.h",
-    "login/easy_unlock/easy_unlock_service_signin.cc",
-    "login/easy_unlock/easy_unlock_service_signin.h",
-    "login/easy_unlock/easy_unlock_tpm_key_manager.cc",
-    "login/easy_unlock/easy_unlock_tpm_key_manager.h",
-    "login/easy_unlock/easy_unlock_tpm_key_manager_factory.cc",
-    "login/easy_unlock/easy_unlock_tpm_key_manager_factory.h",
-    "login/easy_unlock/easy_unlock_types.cc",
-    "login/easy_unlock/easy_unlock_types.h",
-    "login/easy_unlock/easy_unlock_user_login_flow.cc",
-    "login/easy_unlock/easy_unlock_user_login_flow.h",
-    "login/easy_unlock/smartlock_feature_usage_metrics.cc",
-    "login/easy_unlock/smartlock_feature_usage_metrics.h",
-    "login/easy_unlock/smartlock_state_handler.cc",
-    "login/easy_unlock/smartlock_state_handler.h",
-    "login/enrollment/auto_enrollment_check_screen.cc",
-    "login/enrollment/auto_enrollment_check_screen.h",
-    "login/enrollment/auto_enrollment_check_screen_view.h",
-    "login/enrollment/auto_enrollment_controller.cc",
-    "login/enrollment/auto_enrollment_controller.h",
-    "login/enrollment/enrollment_screen.cc",
-    "login/enrollment/enrollment_screen.h",
-    "login/enrollment/enrollment_screen_view.h",
-    "login/enrollment/enrollment_uma.cc",
-    "login/enrollment/enrollment_uma.h",
-    "login/enrollment/enterprise_enrollment_helper.cc",
-    "login/enrollment/enterprise_enrollment_helper.h",
-    "login/enrollment/enterprise_enrollment_helper_impl.cc",
-    "login/enrollment/enterprise_enrollment_helper_impl.h",
-    "login/enterprise_user_session_metrics.cc",
-    "login/enterprise_user_session_metrics.h",
-    "login/error_screens_histogram_helper.cc",
-    "login/error_screens_histogram_helper.h",
-    "login/existing_user_controller.cc",
-    "login/existing_user_controller.h",
-    "login/gaia_reauth_token_fetcher.cc",
-    "login/gaia_reauth_token_fetcher.h",
-    "login/hats_unlock_survey_trigger.cc",
-    "login/hats_unlock_survey_trigger.h",
-    "login/help_app_launcher.cc",
-    "login/help_app_launcher.h",
-    "login/helper.cc",
-    "login/helper.h",
-    "login/hwid_checker.cc",
-    "login/hwid_checker.h",
-    "login/lock/screen_locker.cc",
-    "login/lock/screen_locker.h",
-    "login/lock/views_screen_locker.cc",
-    "login/lock/views_screen_locker.h",
-    "login/lock_screen_utils.cc",
-    "login/lock_screen_utils.h",
-    "login/login_auth_recorder.cc",
-    "login/login_auth_recorder.h",
-    "login/login_client_cert_usage_observer.cc",
-    "login/login_client_cert_usage_observer.h",
-    "login/login_pref_names.cc",
-    "login/login_pref_names.h",
-    "login/login_screen_extensions_lifetime_manager.cc",
-    "login/login_screen_extensions_lifetime_manager.h",
-    "login/login_screen_extensions_storage_cleaner.cc",
-    "login/login_screen_extensions_storage_cleaner.h",
-    "login/login_wizard.h",
-    "login/marketing_backend_connector.cc",
-    "login/marketing_backend_connector.h",
-    "login/mojo_system_info_dispatcher.cc",
-    "login/mojo_system_info_dispatcher.h",
-    "login/onboarding_user_activity_counter.cc",
-    "login/onboarding_user_activity_counter.h",
-    "login/oobe_configuration.cc",
-    "login/oobe_configuration.h",
-    "login/oobe_screen.cc",
-    "login/oobe_screen.h",
-    "login/profile_auth_data.cc",
-    "login/profile_auth_data.h",
-    "login/quick_unlock/auth_token.cc",
-    "login/quick_unlock/auth_token.h",
-    "login/quick_unlock/fake_pin_salt_storage.cc",
-    "login/quick_unlock/fake_pin_salt_storage.h",
-    "login/quick_unlock/fingerprint_power_button_race_detector.cc",
-    "login/quick_unlock/fingerprint_power_button_race_detector.h",
-    "login/quick_unlock/fingerprint_storage.cc",
-    "login/quick_unlock/fingerprint_storage.h",
-    "login/quick_unlock/fingerprint_utils.cc",
-    "login/quick_unlock/fingerprint_utils.h",
-    "login/quick_unlock/pin_backend.cc",
-    "login/quick_unlock/pin_backend.h",
-    "login/quick_unlock/pin_salt_storage.cc",
-    "login/quick_unlock/pin_salt_storage.h",
-    "login/quick_unlock/pin_storage_cryptohome.cc",
-    "login/quick_unlock/pin_storage_cryptohome.h",
-    "login/quick_unlock/pin_storage_prefs.cc",
-    "login/quick_unlock/pin_storage_prefs.h",
-    "login/quick_unlock/quick_unlock_factory.cc",
-    "login/quick_unlock/quick_unlock_factory.h",
-    "login/quick_unlock/quick_unlock_storage.cc",
-    "login/quick_unlock/quick_unlock_storage.h",
-    "login/quick_unlock/quick_unlock_utils.cc",
-    "login/quick_unlock/quick_unlock_utils.h",
-    "login/reauth_stats.cc",
-    "login/reauth_stats.h",
-    "login/reporting/login_logout_reporter.cc",
-    "login/reporting/login_logout_reporter.h",
-    "login/saml/in_session_password_change_manager.cc",
-    "login/saml/in_session_password_change_manager.h",
-    "login/saml/in_session_password_sync_manager.cc",
-    "login/saml/in_session_password_sync_manager.h",
-    "login/saml/in_session_password_sync_manager_factory.cc",
-    "login/saml/in_session_password_sync_manager_factory.h",
-    "login/saml/password_change_success_notification.cc",
-    "login/saml/password_change_success_notification.h",
-    "login/saml/password_expiry_notification.cc",
-    "login/saml/password_expiry_notification.h",
-    "login/saml/password_sync_token_checkers_collection.cc",
-    "login/saml/password_sync_token_checkers_collection.h",
-    "login/saml/password_sync_token_fetcher.cc",
-    "login/saml/password_sync_token_fetcher.h",
-    "login/saml/password_sync_token_login_checker.cc",
-    "login/saml/password_sync_token_login_checker.h",
-    "login/saml/password_sync_token_verifier.cc",
-    "login/saml/password_sync_token_verifier.h",
-    "login/saml/password_sync_token_verifier_factory.cc",
-    "login/saml/password_sync_token_verifier_factory.h",
-    "login/saml/public_saml_url_fetcher.cc",
-    "login/saml/public_saml_url_fetcher.h",
-    "login/saml/saml_metric_utils.cc",
-    "login/saml/saml_metric_utils.h",
-    "login/saml/saml_profile_prefs.cc",
-    "login/saml/saml_profile_prefs.h",
-    "login/screen_manager.cc",
-    "login/screen_manager.h",
-    "login/screens/active_directory_login_screen.cc",
-    "login/screens/active_directory_login_screen.h",
-    "login/screens/active_directory_password_change_screen.cc",
-    "login/screens/active_directory_password_change_screen.h",
-    "login/screens/app_downloading_screen.cc",
-    "login/screens/app_downloading_screen.h",
-    "login/screens/arc_terms_of_service_screen.cc",
-    "login/screens/arc_terms_of_service_screen.h",
-    "login/screens/assistant_optin_flow_screen.cc",
-    "login/screens/assistant_optin_flow_screen.h",
-    "login/screens/base_screen.cc",
-    "login/screens/base_screen.h",
-    "login/screens/chrome_user_selection_screen.cc",
-    "login/screens/chrome_user_selection_screen.h",
-    "login/screens/chromevox_hint/chromevox_hint_detector.cc",
-    "login/screens/chromevox_hint/chromevox_hint_detector.h",
-    "login/screens/consolidated_consent_screen.cc",
-    "login/screens/consolidated_consent_screen.h",
-    "login/screens/demo_preferences_screen.cc",
-    "login/screens/demo_preferences_screen.h",
-    "login/screens/demo_setup_screen.cc",
-    "login/screens/demo_setup_screen.h",
-    "login/screens/device_disabled_screen.cc",
-    "login/screens/device_disabled_screen.h",
-    "login/screens/edu_coexistence_login_screen.cc",
-    "login/screens/edu_coexistence_login_screen.h",
-    "login/screens/enable_adb_sideloading_screen.cc",
-    "login/screens/enable_adb_sideloading_screen.h",
-    "login/screens/enable_debugging_screen.cc",
-    "login/screens/enable_debugging_screen.h",
-    "login/screens/encryption_migration_mode.h",
-    "login/screens/encryption_migration_screen.cc",
-    "login/screens/encryption_migration_screen.h",
-    "login/screens/error_screen.cc",
-    "login/screens/error_screen.h",
-    "login/screens/eula_screen.cc",
-    "login/screens/eula_screen.h",
-    "login/screens/family_link_notice_screen.cc",
-    "login/screens/family_link_notice_screen.h",
-    "login/screens/fingerprint_setup_screen.cc",
-    "login/screens/fingerprint_setup_screen.h",
-    "login/screens/gaia_password_changed_screen.cc",
-    "login/screens/gaia_password_changed_screen.h",
-    "login/screens/gaia_screen.cc",
-    "login/screens/gaia_screen.h",
-    "login/screens/gesture_navigation_screen.cc",
-    "login/screens/gesture_navigation_screen.h",
-    "login/screens/guest_tos_screen.cc",
-    "login/screens/guest_tos_screen.h",
-    "login/screens/hardware_data_collection_screen.cc",
-    "login/screens/hardware_data_collection_screen.h",
-    "login/screens/hid_detection_screen.cc",
-    "login/screens/hid_detection_screen.h",
-    "login/screens/kiosk_autolaunch_screen.cc",
-    "login/screens/kiosk_autolaunch_screen.h",
-    "login/screens/kiosk_enable_screen.cc",
-    "login/screens/kiosk_enable_screen.h",
-    "login/screens/lacros_data_migration_screen.cc",
-    "login/screens/lacros_data_migration_screen.h",
-    "login/screens/locale_switch_screen.cc",
-    "login/screens/locale_switch_screen.h",
-    "login/screens/management_transition_screen.cc",
-    "login/screens/management_transition_screen.h",
-    "login/screens/marketing_opt_in_screen.cc",
-    "login/screens/marketing_opt_in_screen.h",
-    "login/screens/multidevice_setup_screen.cc",
-    "login/screens/multidevice_setup_screen.h",
-    "login/screens/network_error.cc",
-    "login/screens/network_error.h",
-    "login/screens/network_screen.cc",
-    "login/screens/network_screen.h",
-    "login/screens/offline_login_screen.cc",
-    "login/screens/offline_login_screen.h",
-    "login/screens/os_install_screen.cc",
-    "login/screens/os_install_screen.h",
-    "login/screens/os_trial_screen.cc",
-    "login/screens/os_trial_screen.h",
-    "login/screens/packaged_license_screen.cc",
-    "login/screens/packaged_license_screen.h",
-    "login/screens/parental_handoff_screen.cc",
-    "login/screens/parental_handoff_screen.h",
-    "login/screens/pin_setup_screen.cc",
-    "login/screens/pin_setup_screen.h",
-    "login/screens/quick_start_screen.cc",
-    "login/screens/quick_start_screen.h",
-    "login/screens/recommend_apps/fake_recommend_apps_fetcher.cc",
-    "login/screens/recommend_apps/fake_recommend_apps_fetcher.h",
-    "login/screens/recommend_apps/recommend_apps_fetcher.cc",
-    "login/screens/recommend_apps/recommend_apps_fetcher.h",
-    "login/screens/recommend_apps/recommend_apps_fetcher_delegate.h",
-    "login/screens/recommend_apps/recommend_apps_fetcher_impl.cc",
-    "login/screens/recommend_apps/recommend_apps_fetcher_impl.h",
-    "login/screens/recommend_apps_screen.cc",
-    "login/screens/recommend_apps_screen.h",
-    "login/screens/reset_screen.cc",
-    "login/screens/reset_screen.h",
-    "login/screens/saml_confirm_password_screen.cc",
-    "login/screens/saml_confirm_password_screen.h",
-    "login/screens/signin_fatal_error_screen.cc",
-    "login/screens/signin_fatal_error_screen.h",
-    "login/screens/smart_privacy_protection_screen.cc",
-    "login/screens/smart_privacy_protection_screen.h",
-    "login/screens/sync_consent_screen.cc",
-    "login/screens/sync_consent_screen.h",
-    "login/screens/terms_of_service_screen.cc",
-    "login/screens/terms_of_service_screen.h",
-    "login/screens/theme_selection_screen.cc",
-    "login/screens/theme_selection_screen.h",
-    "login/screens/tpm_error_screen.cc",
-    "login/screens/tpm_error_screen.h",
-    "login/screens/update_required_screen.cc",
-    "login/screens/update_required_screen.h",
-    "login/screens/update_screen.cc",
-    "login/screens/update_screen.h",
-    "login/screens/user_creation_screen.cc",
-    "login/screens/user_creation_screen.h",
-    "login/screens/user_selection_screen.cc",
-    "login/screens/user_selection_screen.h",
-    "login/screens/welcome_screen.cc",
-    "login/screens/welcome_screen.h",
-    "login/screens/wrong_hwid_screen.cc",
-    "login/screens/wrong_hwid_screen.h",
-    "login/security_token_pin_dialog_host_login_impl.cc",
-    "login/security_token_pin_dialog_host_login_impl.h",
-    "login/security_token_session_controller.cc",
-    "login/security_token_session_controller.h",
-    "login/security_token_session_controller_factory.cc",
-    "login/security_token_session_controller_factory.h",
-    "login/session/chrome_session_manager.cc",
-    "login/session/chrome_session_manager.h",
-    "login/session/user_session_initializer.cc",
-    "login/session/user_session_initializer.h",
-    "login/session/user_session_manager.cc",
-    "login/session/user_session_manager.h",
-    "login/signin/auth_error_observer.cc",
-    "login/signin/auth_error_observer.h",
-    "login/signin/auth_error_observer_factory.cc",
-    "login/signin/auth_error_observer_factory.h",
-    "login/signin/merge_session_navigation_throttle.cc",
-    "login/signin/merge_session_navigation_throttle.h",
-    "login/signin/merge_session_throttling_utils.cc",
-    "login/signin/merge_session_throttling_utils.h",
-    "login/signin/oauth2_login_manager.cc",
-    "login/signin/oauth2_login_manager.h",
-    "login/signin/oauth2_login_manager_factory.cc",
-    "login/signin/oauth2_login_manager_factory.h",
-    "login/signin/oauth2_login_verifier.cc",
-    "login/signin/oauth2_login_verifier.h",
-    "login/signin/oauth2_token_fetcher.cc",
-    "login/signin/oauth2_token_fetcher.h",
-    "login/signin/oauth2_token_initializer.cc",
-    "login/signin/oauth2_token_initializer.h",
-    "login/signin/offline_signin_limiter.cc",
-    "login/signin/offline_signin_limiter.h",
-    "login/signin/offline_signin_limiter_factory.cc",
-    "login/signin/offline_signin_limiter_factory.h",
-    "login/signin/signin_error_notifier.cc",
-    "login/signin/signin_error_notifier.h",
-    "login/signin/signin_error_notifier_factory.cc",
-    "login/signin/signin_error_notifier_factory.h",
-    "login/signin/token_handle_fetcher.cc",
-    "login/signin/token_handle_fetcher.h",
-    "login/signin/token_handle_util.cc",
-    "login/signin/token_handle_util.h",
-    "login/signin_partition_manager.cc",
-    "login/signin_partition_manager.h",
-    "login/signin_specifics.h",
-    "login/startup_utils.cc",
-    "login/startup_utils.h",
-    "login/ui/captive_portal_dialog_delegate.cc",
-    "login/ui/captive_portal_dialog_delegate.h",
-    "login/ui/captive_portal_view.cc",
-    "login/ui/captive_portal_view.h",
-    "login/ui/captive_portal_window_proxy.cc",
-    "login/ui/captive_portal_window_proxy.h",
-    "login/ui/input_events_blocker.cc",
-    "login/ui/input_events_blocker.h",
-    "login/ui/kiosk_app_menu_controller.cc",
-    "login/ui/kiosk_app_menu_controller.h",
-    "login/ui/login_display.cc",
-    "login/ui/login_display.h",
-    "login/ui/login_display_host.cc",
-    "login/ui/login_display_host.h",
-    "login/ui/login_display_host_common.cc",
-    "login/ui/login_display_host_common.h",
-    "login/ui/login_display_host_mojo.cc",
-    "login/ui/login_display_host_mojo.h",
-    "login/ui/login_display_host_webui.cc",
-    "login/ui/login_display_host_webui.h",
-    "login/ui/login_display_mojo.cc",
-    "login/ui/login_display_mojo.h",
-    "login/ui/login_display_webui.cc",
-    "login/ui/login_display_webui.h",
-    "login/ui/login_feedback.cc",
-    "login/ui/login_feedback.h",
-    "login/ui/login_screen_extension_ui/create_options.cc",
-    "login/ui/login_screen_extension_ui/create_options.h",
-    "login/ui/login_screen_extension_ui/dialog_delegate.cc",
-    "login/ui/login_screen_extension_ui/dialog_delegate.h",
-    "login/ui/login_screen_extension_ui/web_dialog_view.cc",
-    "login/ui/login_screen_extension_ui/web_dialog_view.h",
-    "login/ui/login_screen_extension_ui/window.cc",
-    "login/ui/login_screen_extension_ui/window.h",
-    "login/ui/login_web_dialog.cc",
-    "login/ui/login_web_dialog.h",
-    "login/ui/oobe_dialog_size_utils.cc",
-    "login/ui/oobe_dialog_size_utils.h",
-    "login/ui/oobe_ui_dialog_delegate.cc",
-    "login/ui/oobe_ui_dialog_delegate.h",
-    "login/ui/signin_ui.h",
-    "login/ui/simple_web_view_dialog.cc",
-    "login/ui/simple_web_view_dialog.h",
-    "login/ui/user_adding_screen.cc",
-    "login/ui/user_adding_screen.h",
-    "login/ui/user_adding_screen_input_methods_controller.cc",
-    "login/ui/user_adding_screen_input_methods_controller.h",
-    "login/ui/views/user_board_view.h",
-    "login/ui/web_contents_forced_title.cc",
-    "login/ui/web_contents_forced_title.h",
-    "login/ui/webui_login_view.cc",
-    "login/ui/webui_login_view.h",
-    "login/user_board_view_mojo.cc",
-    "login/user_board_view_mojo.h",
-    "login/user_flow.cc",
-    "login/user_flow.h",
-    "login/user_online_signin_notifier.cc",
-    "login/user_online_signin_notifier.h",
-    "login/users/affiliation.cc",
-    "login/users/affiliation.h",
-    "login/users/avatar/user_image_file_selector.cc",
-    "login/users/avatar/user_image_file_selector.h",
-    "login/users/avatar/user_image_loader.cc",
-    "login/users/avatar/user_image_loader.h",
-    "login/users/avatar/user_image_manager.cc",
-    "login/users/avatar/user_image_manager.h",
-    "login/users/avatar/user_image_manager_impl.cc",
-    "login/users/avatar/user_image_manager_impl.h",
-    "login/users/avatar/user_image_sync_observer.cc",
-    "login/users/avatar/user_image_sync_observer.h",
-    "login/users/chrome_user_manager.cc",
-    "login/users/chrome_user_manager.h",
-    "login/users/chrome_user_manager_impl.cc",
-    "login/users/chrome_user_manager_impl.h",
-    "login/users/chrome_user_manager_util.cc",
-    "login/users/chrome_user_manager_util.h",
-    "login/users/default_user_image/default_user_images.cc",
-    "login/users/default_user_image/default_user_images.h",
-    "login/users/multi_profile_user_controller.cc",
-    "login/users/multi_profile_user_controller.h",
-    "login/users/multi_profile_user_controller_delegate.h",
-    "login/users/scoped_test_user_manager.cc",
-    "login/users/scoped_test_user_manager.h",
-    "login/users/supervised_user_manager.h",
-    "login/users/supervised_user_manager_impl.cc",
-    "login/users/supervised_user_manager_impl.h",
-    "login/users/test_users.cc",
-    "login/users/test_users.h",
-    "login/users/user_manager_interface.h",
-    "login/version_info_updater.cc",
-    "login/version_info_updater.h",
-    "login/version_updater/update_time_estimator.cc",
-    "login/version_updater/update_time_estimator.h",
-    "login/version_updater/version_updater.cc",
-    "login/version_updater/version_updater.h",
-    "login/wizard_context.cc",
-    "login/wizard_context.h",
-    "login/wizard_controller.cc",
-    "login/wizard_controller.h",
     "mobile/mobile_activator.cc",
     "mobile/mobile_activator.h",
     "multidevice_setup/auth_token_validator_factory.cc",
@@ -2018,6 +1571,7 @@
     "//chromeos/ash/components/dbus/fusebox:proto",
     "//chromeos/ash/components/dbus/kerberos:kerberos_proto",
     "//chromeos/ash/components/dbus/os_install",
+    "//chromeos/ash/components/dbus/resourced",
     "//chromeos/ash/components/dbus/seneschal",
     "//chromeos/ash/components/dbus/seneschal:seneschal_proto",
     "//chromeos/ash/components/dbus/services",
@@ -2050,7 +1604,6 @@
     "//chromeos/dbus/missive",
     "//chromeos/dbus/power",
     "//chromeos/dbus/power:power_manager_proto",
-    "//chromeos/dbus/resourced",
     "//chromeos/dbus/runtime_probe",
     "//chromeos/dbus/tpm_manager",
     "//chromeos/dbus/tpm_manager:tpm_manager_proto",
@@ -2269,6 +1822,7 @@
     "//chromeos/ash/components/dbus/kerberos",
     "//chromeos/ash/components/dbus/lorgnette_manager",
     "//chromeos/ash/components/dbus/media_analytics",
+    "//chromeos/ash/components/dbus/oobe_config",
     "//chromeos/ash/components/dbus/patchpanel",
     "//chromeos/ash/components/dbus/pciguard",
     "//chromeos/ash/components/dbus/rgbkbd",
@@ -2307,7 +1861,6 @@
     "//chromeos/dbus/image_loader",
     "//chromeos/dbus/init",
     "//chromeos/dbus/machine_learning",
-    "//chromeos/dbus/oobe_config",
     "//chromeos/dbus/permission_broker",
     "//chromeos/dbus/shill",
     "//chromeos/dbus/u2f",
diff --git a/chrome/browser/ash/app_restore/arc_app_launch_handler.cc b/chrome/browser/ash/app_restore/arc_app_launch_handler.cc
index 7e625c96..d996582f 100644
--- a/chrome/browser/ash/app_restore/arc_app_launch_handler.cc
+++ b/chrome/browser/ash/app_restore/arc_app_launch_handler.cc
@@ -179,9 +179,8 @@
                               windows_.size() + no_stack_windows_.size());
 
   // Receive the memory pressure level.
-  if (chromeos::ResourcedClient::Get() &&
-      !resourced_client_observer_.IsObserving()) {
-    resourced_client_observer_.Observe(chromeos::ResourcedClient::Get());
+  if (ResourcedClient::Get() && !resourced_client_observer_.IsObserving()) {
+    resourced_client_observer_.Observe(ResourcedClient::Get());
   }
 
   // Receive the system CPU usage rate.
@@ -481,9 +480,8 @@
   }
 }
 
-void ArcAppLaunchHandler::OnMemoryPressure(
-    chromeos::ResourcedClient::PressureLevel level,
-    uint64_t reclaim_target_kb) {
+void ArcAppLaunchHandler::OnMemoryPressure(ResourcedClient::PressureLevel level,
+                                           uint64_t reclaim_target_kb) {
   pressure_level_ = level;
 }
 
@@ -507,16 +505,15 @@
 
 bool ArcAppLaunchHandler::IsUnderMemoryPressure() {
   switch (pressure_level_) {
-    case chromeos::ResourcedClient::PressureLevel::NONE:
+    case ResourcedClient::PressureLevel::NONE:
       return false;
-    case chromeos::ResourcedClient::PressureLevel::MODERATE:
-    case chromeos::ResourcedClient::PressureLevel::CRITICAL: {
-      LOG(WARNING)
-          << "Stop restoring Arc apps due to memory pressure: "
-          << (pressure_level_ ==
-                      chromeos::ResourcedClient::PressureLevel::MODERATE
-                  ? "MODERATE"
-                  : "CRITICAL");
+    case ResourcedClient::PressureLevel::MODERATE:
+    case ResourcedClient::PressureLevel::CRITICAL: {
+      LOG(WARNING) << "Stop restoring Arc apps due to memory pressure: "
+                   << (pressure_level_ ==
+                               ResourcedClient::PressureLevel::MODERATE
+                           ? "MODERATE"
+                           : "CRITICAL");
       return true;
     }
   }
diff --git a/chrome/browser/ash/app_restore/arc_app_launch_handler.h b/chrome/browser/ash/app_restore/arc_app_launch_handler.h
index b3705a4..de59a3b 100644
--- a/chrome/browser/ash/app_restore/arc_app_launch_handler.h
+++ b/chrome/browser/ash/app_restore/arc_app_launch_handler.h
@@ -14,8 +14,8 @@
 #include "base/time/time.h"
 #include "base/timer/timer.h"
 #include "chrome/browser/ash/scheduler_configuration_manager.h"
+#include "chromeos/ash/components/dbus/resourced/resourced_client.h"
 #include "chromeos/ash/services/cros_healthd/public/mojom/cros_healthd.mojom.h"
-#include "chromeos/dbus/resourced/resourced_client.h"
 #include "components/services/app_service/public/cpp/app_registry_cache.h"
 #include "mojo/public/cpp/bindings/remote.h"
 #include "third_party/abseil-cpp/absl/types/optional.h"
@@ -105,7 +105,7 @@
 // phase.
 class ArcAppLaunchHandler
     : public apps::AppRegistryCache::Observer,
-      public chromeos::ResourcedClient::Observer,
+      public ResourcedClient::Observer,
       public wm::ActivationChangeObserver,
       public aura::EnvObserver,
       public aura::WindowObserver,
@@ -179,8 +179,8 @@
   // ARC not being ready, or the system perforamcne concern) on Chrome OS.
   void PrepareAppLaunching(const std::string& app_id);
 
-  // Override chromeos::ResourcedClient::Observer
-  void OnMemoryPressure(chromeos::ResourcedClient::PressureLevel level,
+  // Override ResourcedClient::Observer
+  void OnMemoryPressure(ResourcedClient::PressureLevel level,
                         uint64_t reclaim_target_kb) override;
 
   // Returns true if there are windows to be restored. Otherwise, returns false.
@@ -291,8 +291,8 @@
   base::ScopedMultiSourceObservation<aura::Window, aura::WindowObserver>
       observed_windows_{this};
 
-  chromeos::ResourcedClient::PressureLevel pressure_level_ =
-      chromeos::ResourcedClient::PressureLevel::MODERATE;
+  ResourcedClient::PressureLevel pressure_level_ =
+      ResourcedClient::PressureLevel::MODERATE;
 
   absl::optional<bool> should_apply_cpu_restirction_;
 
@@ -312,8 +312,7 @@
                           apps::AppRegistryCache::Observer>
       app_registry_cache_observer_{this};
 
-  base::ScopedObservation<chromeos::ResourcedClient,
-                          chromeos::ResourcedClient::Observer>
+  base::ScopedObservation<ResourcedClient, ResourcedClient::Observer>
       resourced_client_observer_{this};
 
   base::WeakPtrFactory<ArcAppLaunchHandler> weak_ptr_factory_{this};
diff --git a/chrome/browser/ash/arc/arc_util_unittest.cc b/chrome/browser/ash/arc/arc_util_unittest.cc
index e1939c9f..b6b3ef4 100644
--- a/chrome/browser/ash/arc/arc_util_unittest.cc
+++ b/chrome/browser/ash/arc/arc_util_unittest.cc
@@ -33,7 +33,6 @@
 #include "chrome/test/base/testing_profile.h"
 #include "chrome/test/base/testing_profile_manager.h"
 #include "chromeos/ash/components/dbus/concierge/concierge_client.h"
-#include "chromeos/dbus/oobe_config/fake_oobe_configuration_client.h"
 #include "components/account_id/account_id.h"
 #include "components/policy/core/common/cloud/cloud_policy_constants.h"
 #include "components/prefs/pref_service.h"
diff --git a/chrome/browser/ash/borealis/borealis_game_mode_controller.cc b/chrome/browser/ash/borealis/borealis_game_mode_controller.cc
index 39934d997..adc1d1e1 100644
--- a/chrome/browser/ash/borealis/borealis_game_mode_controller.cc
+++ b/chrome/browser/ash/borealis/borealis_game_mode_controller.cc
@@ -9,7 +9,7 @@
 #include "chrome/browser/ash/borealis/borealis_metrics.h"
 #include "chrome/browser/ash/borealis/borealis_service.h"
 #include "chrome/browser/ash/borealis/borealis_window_manager.h"
-#include "chromeos/dbus/resourced/resourced_client.h"
+#include "chromeos/ash/components/dbus/resourced/resourced_client.h"
 #include "ui/views/widget/widget.h"
 
 namespace borealis {
@@ -92,9 +92,9 @@
 BorealisGameModeController::GameModeEnabler::GameModeEnabler() {
   GameModeEnabler::should_record_failure = true;
   RecordBorealisGameModeResultHistogram(BorealisGameModeResult::kAttempted);
-  if (chromeos::ResourcedClient::Get()) {
-    chromeos::ResourcedClient::Get()->SetGameModeWithTimeout(
-        chromeos::ResourcedClient::GameMode::BOREALIS, kTimeoutSec,
+  if (ash::ResourcedClient::Get()) {
+    ash::ResourcedClient::Get()->SetGameModeWithTimeout(
+        ash::ResourcedClient::GameMode::BOREALIS, kTimeoutSec,
         base::BindOnce(&GameModeEnabler::OnSetGameMode, false));
   }
   timer_.Start(FROM_HERE, base::Seconds(kRefreshSec), this,
@@ -103,17 +103,17 @@
 
 BorealisGameModeController::GameModeEnabler::~GameModeEnabler() {
   timer_.Stop();
-  if (chromeos::ResourcedClient::Get()) {
-    chromeos::ResourcedClient::Get()->SetGameModeWithTimeout(
-        chromeos::ResourcedClient::GameMode::OFF, 0,
+  if (ash::ResourcedClient::Get()) {
+    ash::ResourcedClient::Get()->SetGameModeWithTimeout(
+        ash::ResourcedClient::GameMode::OFF, 0,
         base::BindOnce(&GameModeEnabler::OnSetGameMode, true));
   }
 }
 
 void BorealisGameModeController::GameModeEnabler::RefreshGameMode() {
-  if (chromeos::ResourcedClient::Get()) {
-    chromeos::ResourcedClient::Get()->SetGameModeWithTimeout(
-        chromeos::ResourcedClient::GameMode::BOREALIS, kTimeoutSec,
+  if (ash::ResourcedClient::Get()) {
+    ash::ResourcedClient::Get()->SetGameModeWithTimeout(
+        ash::ResourcedClient::GameMode::BOREALIS, kTimeoutSec,
         base::BindOnce(&GameModeEnabler::OnSetGameMode, true));
   }
 }
@@ -121,12 +121,11 @@
 // Previous is whether game mode was enabled previous to this call.
 void BorealisGameModeController::GameModeEnabler::OnSetGameMode(
     bool was_refresh,
-    absl::optional<chromeos::ResourcedClient::GameMode> previous) {
+    absl::optional<ash::ResourcedClient::GameMode> previous) {
   if (!previous.has_value()) {
     LOG(ERROR) << "Failed to set Game Mode";
   } else if (GameModeEnabler::should_record_failure && was_refresh &&
-             previous.value() !=
-                 chromeos::ResourcedClient::GameMode::BOREALIS) {
+             previous.value() != ash::ResourcedClient::GameMode::BOREALIS) {
     // If game mode was not on and it was not the initial call,
     // it means the previous call failed/timed out.
     RecordBorealisGameModeResultHistogram(BorealisGameModeResult::kFailed);
diff --git a/chrome/browser/ash/borealis/borealis_game_mode_controller.h b/chrome/browser/ash/borealis/borealis_game_mode_controller.h
index 015a097..e2b15b3 100644
--- a/chrome/browser/ash/borealis/borealis_game_mode_controller.h
+++ b/chrome/browser/ash/borealis/borealis_game_mode_controller.h
@@ -9,7 +9,7 @@
 #include "ash/wm/window_state_observer.h"
 #include "base/scoped_observation.h"
 #include "base/timer/timer.h"
-#include "chromeos/dbus/resourced/resourced_client.h"
+#include "chromeos/ash/components/dbus/resourced/resourced_client.h"
 #include "ui/aura/client/focus_change_observer.h"
 #include "ui/aura/client/focus_client.h"
 
@@ -49,7 +49,7 @@
    private:
     static void OnSetGameMode(
         bool was_refresh,
-        absl::optional<chromeos::ResourcedClient::GameMode> previous);
+        absl::optional<ash::ResourcedClient::GameMode> previous);
     void RefreshGameMode();
 
     // Used to determine if it's the first instance of game mode failing.
diff --git a/chrome/browser/ash/borealis/borealis_game_mode_controller_unittest.cc b/chrome/browser/ash/borealis/borealis_game_mode_controller_unittest.cc
index 046cf28..8385cb2 100644
--- a/chrome/browser/ash/borealis/borealis_game_mode_controller_unittest.cc
+++ b/chrome/browser/ash/borealis/borealis_game_mode_controller_unittest.cc
@@ -13,7 +13,7 @@
 #include "chrome/browser/ash/borealis/testing/widgets.h"
 #include "chrome/test/base/chrome_ash_test_base.h"
 #include "chrome/test/base/testing_profile.h"
-#include "chromeos/dbus/resourced/fake_resourced_client.h"
+#include "chromeos/ash/components/dbus/resourced/fake_resourced_client.h"
 #include "content/public/test/browser_task_environment.h"
 #include "ui/aura/window.h"
 #include "ui/views/widget/widget.h"
@@ -32,7 +32,7 @@
  protected:
   void SetUp() override {
     ChromeAshTestBase::SetUp();
-    fake_resourced_client_ = new chromeos::FakeResourcedClient();
+    fake_resourced_client_ = new ash::FakeResourcedClient();
     profile_ = std::make_unique<TestingProfile>();
     service_fake_ = BorealisServiceFake::UseFakeForTesting(profile_.get());
     window_manager_ = std::make_unique<BorealisWindowManager>(profile_.get());
@@ -46,7 +46,7 @@
   void TearDown() override {
     game_mode_controller_.reset();
     histogram_tester_.reset();
-    chromeos::ResourcedClient::Shutdown();
+    ash::ResourcedClient::Shutdown();
     ChromeAshTestBase::TearDown();
   }
 
@@ -55,7 +55,7 @@
   std::unique_ptr<BorealisGameModeController> game_mode_controller_;
   std::unique_ptr<BorealisFeatures> features_;
   BorealisServiceFake* service_fake_;
-  chromeos::FakeResourcedClient* fake_resourced_client_;
+  ash::FakeResourcedClient* fake_resourced_client_;
   std::unique_ptr<base::HistogramTester> histogram_tester_;
 };
 
@@ -167,7 +167,7 @@
 
   // Previous game mode timed out/failed followed by refresh.
   fake_resourced_client_->set_set_game_mode_with_timeout_response(
-      chromeos::ResourcedClient::GameMode::OFF);
+      ash::ResourcedClient::GameMode::OFF);
   task_environment()->FastForwardBy(base::Seconds(61));
   EXPECT_EQ(3, fake_resourced_client_->get_enter_game_mode_count());
   histogram_tester_->ExpectBucketCount(kBorealisGameModeResultHistogram,
@@ -178,7 +178,7 @@
   // Previous game mode timed out/failed followed by exit.
   // Should not record to histogram as it was already recorded above.
   fake_resourced_client_->set_set_game_mode_with_timeout_response(
-      chromeos::ResourcedClient::GameMode::OFF);
+      ash::ResourcedClient::GameMode::OFF);
   test_widget->SetFullscreen(false);
   EXPECT_FALSE(ash::WindowState::Get(window)->IsFullscreen());
   EXPECT_EQ(1, fake_resourced_client_->get_exit_game_mode_count());
diff --git a/chrome/browser/ash/crosapi/BUILD.gn b/chrome/browser/ash/crosapi/BUILD.gn
index 2ba4de0..89e8f8d 100644
--- a/chrome/browser/ash/crosapi/BUILD.gn
+++ b/chrome/browser/ash/crosapi/BUILD.gn
@@ -245,6 +245,7 @@
     "//chrome/common:channel_info",
     "//chrome/common:constants",
     "//chromeos/ash/components/dbus/lorgnette_manager:lorgnette_proto",
+    "//chromeos/ash/components/dbus/resourced",
     "//chromeos/ash/components/dbus/session_manager",
     "//chromeos/ash/components/dbus/update_engine",
     "//chromeos/ash/components/dbus/upstart",
@@ -259,7 +260,6 @@
     "//chromeos/dbus",
     "//chromeos/dbus/cros_disks",
     "//chromeos/dbus/power",
-    "//chromeos/dbus/resourced",
     "//chromeos/dbus/util",
     "//chromeos/login/login_state",
     "//chromeos/network",
diff --git a/chrome/browser/ash/crosapi/resource_manager_ash.cc b/chrome/browser/ash/crosapi/resource_manager_ash.cc
index a483f6d..7f65fe44 100644
--- a/chrome/browser/ash/crosapi/resource_manager_ash.cc
+++ b/chrome/browser/ash/crosapi/resource_manager_ash.cc
@@ -11,13 +11,13 @@
 // ResourceManagerAsh
 
 ResourceManagerAsh::ResourceManagerAsh() {
-  chromeos::ResourcedClient* client = chromeos::ResourcedClient::Get();
+  ash::ResourcedClient* client = ash::ResourcedClient::Get();
   if (client)
     client->AddObserver(this);
 }
 
 ResourceManagerAsh::~ResourceManagerAsh() {
-  chromeos::ResourcedClient* client = chromeos::ResourcedClient::Get();
+  ash::ResourcedClient* client = ash::ResourcedClient::Get();
   if (client)
     client->RemoveObserver(this);
 }
@@ -28,7 +28,7 @@
 }
 
 void ResourceManagerAsh::OnMemoryPressure(
-    chromeos::ResourcedClient::PressureLevel level,
+    ash::ResourcedClient::PressureLevel level,
     uint64_t reclaim_target_kb) {
   for (auto& observer : observers_) {
     mojom::MemoryPressurePtr pressure = mojom::MemoryPressure::New();
diff --git a/chrome/browser/ash/crosapi/resource_manager_ash.h b/chrome/browser/ash/crosapi/resource_manager_ash.h
index de80a9fa..748d3ee 100644
--- a/chrome/browser/ash/crosapi/resource_manager_ash.h
+++ b/chrome/browser/ash/crosapi/resource_manager_ash.h
@@ -7,8 +7,8 @@
 
 #include <stdint.h>
 
+#include "chromeos/ash/components/dbus/resourced/resourced_client.h"
 #include "chromeos/crosapi/mojom/resource_manager.mojom.h"
-#include "chromeos/dbus/resourced/resourced_client.h"
 #include "mojo/public/cpp/bindings/receiver_set.h"
 #include "mojo/public/cpp/bindings/remote_set.h"
 
@@ -17,7 +17,7 @@
 // The ash-chrome implementation of the ResourceManager crosapi interface.
 // This class must only be used from the main thread.
 class ResourceManagerAsh : public mojom::ResourceManager,
-                           public chromeos::ResourcedClient::Observer {
+                           public ash::ResourcedClient::Observer {
  public:
   ResourceManagerAsh();
   ResourceManagerAsh(const ResourceManagerAsh&) = delete;
@@ -26,8 +26,8 @@
 
   void BindReceiver(mojo::PendingReceiver<mojom::ResourceManager> receiver);
 
-  // chromeos::ResourcedClient::Observer:
-  void OnMemoryPressure(chromeos::ResourcedClient::PressureLevel level,
+  // ash::ResourcedClient::Observer:
+  void OnMemoryPressure(ash::ResourcedClient::PressureLevel level,
                         uint64_t reclaim_target_kb) override;
 
   // crosapi::mojom::ResourceManager:
diff --git a/chrome/browser/ash/crostini/crostini_manager.cc b/chrome/browser/ash/crostini/crostini_manager.cc
index 00ef5a9b..482a8c3 100644
--- a/chrome/browser/ash/crostini/crostini_manager.cc
+++ b/chrome/browser/ash/crostini/crostini_manager.cc
@@ -1212,7 +1212,6 @@
   DCHECK(!profile_->IsOffTheRecord());
   GetCiceroneClient()->AddObserver(this);
   GetConciergeClient()->AddVmObserver(this);
-  GetConciergeClient()->AddContainerObserver(this);
   if (ash::AnomalyDetectorClient::Get()) {  // May be null in tests.
     ash::AnomalyDetectorClient::Get()->AddObserver(this);
   }
@@ -1258,7 +1257,6 @@
   }
   dbus_observers_removed_ = true;
   GetCiceroneClient()->RemoveObserver(this);
-  GetConciergeClient()->RemoveContainerObserver(this);
   if (ash::AnomalyDetectorClient::Get()) {  // May be null in tests.
     ash::AnomalyDetectorClient::Get()->RemoveObserver(this);
   }
@@ -2718,19 +2716,6 @@
   OnVmStoppedCleanup(signal.name());
 }
 
-void CrostiniManager::OnContainerStartupFailed(
-    const vm_tools::concierge::ContainerStartedSignal& signal) {
-  if (signal.owner_id() != owner_id_)
-    return;
-
-  guest_os::GuestId container(kCrostiniDefaultVmType, signal.vm_name(),
-                              signal.container_name());
-  LOG(ERROR) << "Container startup failed for container: " << container;
-  InvokeAndErasePendingContainerCallbacks(
-      &start_container_callbacks_, container,
-      CrostiniResult::CONTAINER_START_FAILED);
-}
-
 void CrostiniManager::OnContainerShutdown(
     const vm_tools::cicerone::ContainerShutdownSignal& signal) {
   if (signal.owner_id() != owner_id_)
diff --git a/chrome/browser/ash/crostini/crostini_manager.h b/chrome/browser/ash/crostini/crostini_manager.h
index 9e7ebee..5a3bea5 100644
--- a/chrome/browser/ash/crostini/crostini_manager.h
+++ b/chrome/browser/ash/crostini/crostini_manager.h
@@ -150,7 +150,6 @@
 class CrostiniManager : public KeyedService,
                         public ash::AnomalyDetectorClient::Observer,
                         public ash::ConciergeClient::VmObserver,
-                        public ash::ConciergeClient::ContainerObserver,
                         public ash::CiceroneClient::Observer,
                         public chromeos::NetworkStateHandlerObserver,
                         public chromeos::PowerManagerClient::Observer {
@@ -497,10 +496,6 @@
   void OnVmStarted(const vm_tools::concierge::VmStartedSignal& signal) override;
   void OnVmStopped(const vm_tools::concierge::VmStoppedSignal& signal) override;
 
-  // ConciergeClient::ContainerObserver:
-  void OnContainerStartupFailed(
-      const vm_tools::concierge::ContainerStartedSignal& signal) override;
-
   // CiceroneClient::Observer:
   void OnContainerStarted(
       const vm_tools::cicerone::ContainerStartedSignal& signal) override;
diff --git a/chrome/browser/ash/dbus/ash_dbus_helper.cc b/chrome/browser/ash/dbus/ash_dbus_helper.cc
index 036f099..cf3c456f 100644
--- a/chrome/browser/ash/dbus/ash_dbus_helper.cc
+++ b/chrome/browser/ash/dbus/ash_dbus_helper.cc
@@ -32,9 +32,11 @@
 #include "chromeos/ash/components/dbus/kerberos/kerberos_client.h"
 #include "chromeos/ash/components/dbus/lorgnette_manager/lorgnette_manager_client.h"
 #include "chromeos/ash/components/dbus/media_analytics/media_analytics_client.h"
+#include "chromeos/ash/components/dbus/oobe_config/oobe_configuration_client.h"
 #include "chromeos/ash/components/dbus/os_install/os_install_client.h"
 #include "chromeos/ash/components/dbus/patchpanel/patchpanel_client.h"
 #include "chromeos/ash/components/dbus/pciguard/pciguard_client.h"
+#include "chromeos/ash/components/dbus/resourced/resourced_client.h"
 #include "chromeos/ash/components/dbus/rgbkbd/rgbkbd_client.h"
 #include "chromeos/ash/components/dbus/rmad/rmad_client.h"
 #include "chromeos/ash/components/dbus/seneschal/seneschal_client.h"
@@ -68,10 +70,8 @@
 #include "chromeos/dbus/init/initialize_dbus_client.h"
 #include "chromeos/dbus/machine_learning/machine_learning_client.h"
 #include "chromeos/dbus/missive/missive_client.h"
-#include "chromeos/dbus/oobe_config/oobe_configuration_client.h"
 #include "chromeos/dbus/permission_broker/permission_broker_client.h"
 #include "chromeos/dbus/power/power_manager_client.h"
-#include "chromeos/dbus/resourced/resourced_client.h"
 #include "chromeos/dbus/runtime_probe/runtime_probe_client.h"
 #include "chromeos/dbus/tpm_manager/tpm_manager_client.h"
 #include "chromeos/dbus/u2f/u2f_client.h"
@@ -154,13 +154,13 @@
   InitializeDBusClient<chromeos::MachineLearningClient>(bus);
   InitializeDBusClient<MediaAnalyticsClient>(bus);
   InitializeDBusClient<chromeos::MissiveClient>(bus);
-  InitializeDBusClient<chromeos::OobeConfigurationClient>(bus);
+  InitializeDBusClient<OobeConfigurationClient>(bus);
   InitializeDBusClient<OsInstallClient>(bus);
   InitializeDBusClient<PatchPanelClient>(bus);
   InitializeDBusClient<PciguardClient>(bus);
   InitializeDBusClient<chromeos::PermissionBrokerClient>(bus);
   InitializeDBusClient<chromeos::PowerManagerClient>(bus);
-  InitializeDBusClient<chromeos::ResourcedClient>(bus);
+  InitializeDBusClient<ResourcedClient>(bus);
   InitializeDBusClient<chromeos::RuntimeProbeClient>(bus);
   InitializeDBusClient<SeneschalClient>(bus);
   InitializeDBusClient<SessionManagerClient>(bus);
@@ -246,7 +246,7 @@
   SessionManagerClient::Shutdown();
   SeneschalClient::Shutdown();
   chromeos::RuntimeProbeClient::Shutdown();
-  chromeos::ResourcedClient::Shutdown();
+  ResourcedClient::Shutdown();
   if (ash::features::IsRgbKeyboardEnabled()) {
     RgbkbdClient::Shutdown();
   }
@@ -258,7 +258,7 @@
   PciguardClient::Shutdown();
   PatchPanelClient::Shutdown();
   OsInstallClient::Shutdown();
-  chromeos::OobeConfigurationClient::Shutdown();
+  OobeConfigurationClient::Shutdown();
   chromeos::MissiveClient::Shutdown();
   MediaAnalyticsClient::Shutdown();
   chromeos::MachineLearningClient::Shutdown();
diff --git a/chrome/browser/ash/file_manager/file_manager_browsertest.cc b/chrome/browser/ash/file_manager/file_manager_browsertest.cc
index 63e3ca18..9041be9 100644
--- a/chrome/browser/ash/file_manager/file_manager_browsertest.cc
+++ b/chrome/browser/ash/file_manager/file_manager_browsertest.cc
@@ -1731,20 +1731,16 @@
         TestCase("recentsA11yMessages").EnableFiltersInRecents(),
         TestCase("recentsA11yMessages").EnableFiltersInRecents().FilesSwa(),
         TestCase("recentsAllowCutForDownloads")
-            .EnableArc()
             .EnableFiltersInRecents()
             .EnableFiltersInRecentsV2(),
         TestCase("recentsAllowCutForDownloads")
-            .EnableArc()
             .EnableFiltersInRecents()
             .EnableFiltersInRecentsV2()
             .FilesSwa(),
         TestCase("recentsAllowCutForDrive")
-            .EnableArc()
             .EnableFiltersInRecents()
             .EnableFiltersInRecentsV2(),
         TestCase("recentsAllowCutForDrive")
-            .EnableArc()
             .EnableFiltersInRecents()
             .EnableFiltersInRecentsV2()
             .FilesSwa(),
@@ -1853,6 +1849,13 @@
             .EnableFiltersInRecents()
             .EnableFiltersInRecentsV2()
             .FilesSwa(),
+        TestCase("recentsTimePeriodHeadings")
+            .EnableFiltersInRecents()
+            .EnableFiltersInRecentsV2(),
+        TestCase("recentsTimePeriodHeadings")
+            .EnableFiltersInRecents()
+            .EnableFiltersInRecentsV2()
+            .FilesSwa(),
         TestCase("recentAudioDownloads"),
         TestCase("recentAudioDownloads").FilesSwa(),
         TestCase("recentAudioDownloads").EnableFiltersInRecents(),
diff --git a/chrome/browser/ash/file_manager/file_manager_jstest.cc b/chrome/browser/ash/file_manager/file_manager_jstest.cc
index bb4fff6c..676efcb 100644
--- a/chrome/browser/ash/file_manager/file_manager_jstest.cc
+++ b/chrome/browser/ash/file_manager/file_manager_jstest.cc
@@ -300,7 +300,7 @@
 }
 
 IN_PROC_BROWSER_TEST_F(FileManagerJsTest, XfBreadcrumbs) {
-  RunTestURL("widgets/xf_breadcrumbs_unittest.js");
+  RunTestURL("widgets/xf_breadcrumb_unittest.js");
 }
 
 IN_PROC_BROWSER_TEST_F(FileManagerJsTest, FileGridTest) {
diff --git a/chrome/browser/ash/login/demo_mode/demo_setup_browsertest.cc b/chrome/browser/ash/login/demo_mode/demo_setup_browsertest.cc
index 9897951..b599adf 100644
--- a/chrome/browser/ash/login/demo_mode/demo_setup_browsertest.cc
+++ b/chrome/browser/ash/login/demo_mode/demo_setup_browsertest.cc
@@ -946,8 +946,9 @@
   }
 };
 
+// crbug.com/1341073 Disable due to flakiness.
 IN_PROC_BROWSER_TEST_F(DemoSetupProgressStepsTest,
-                       SetupProgessStepsDisplayCorrectly) {
+                       DISABLED_SetupProgessStepsDisplayCorrectly) {
   SimulateNetworkConnected();
   TriggerDemoModeOnWelcomeScreen();
   test::OobeJS().ClickOnPath(kDemoPreferencesNext);
@@ -1028,15 +1029,10 @@
   }
 };
 
-#if defined(ADDRESS_SANITIZER)
-#define MAYBE_VariantCountryCodeRegionDefaultCountryIsSet \
-  DISABLED_VariantCountryCodeRegionDefaultCountryIsSet
-#else
-#define MAYBE_VariantCountryCodeRegionDefaultCountryIsSet \
-  VariantCountryCodeRegionDefaultCountryIsSet
-#endif
+// crbug.com/1340982 Disable due to flakiness. Note that this test is also
+// disabled with ASAN, see crbug.com/1150349 for more information.
 IN_PROC_BROWSER_TEST_F(DemoSetupVariantCountryCodeRegionTest,
-                       MAYBE_VariantCountryCodeRegionDefaultCountryIsSet) {
+                       DISABLED_VariantCountryCodeRegionDefaultCountryIsSet) {
   // Simulate successful online setup.
   enrollment_helper_.ExpectEnrollmentMode(
       policy::EnrollmentConfig::MODE_ATTESTATION);
diff --git a/chrome/browser/ash/login/oobe_configuration.cc b/chrome/browser/ash/login/oobe_configuration.cc
index ee9684fc..ae21f308 100644
--- a/chrome/browser/ash/login/oobe_configuration.cc
+++ b/chrome/browser/ash/login/oobe_configuration.cc
@@ -9,7 +9,7 @@
 #include "base/json/json_reader.h"
 #include "base/logging.h"
 #include "chrome/browser/ash/login/configuration_keys.h"
-#include "chromeos/dbus/oobe_config/oobe_configuration_client.h"
+#include "chromeos/ash/components/dbus/oobe_config/oobe_configuration_client.h"
 #include "ui/base/ime/ash/input_method_manager.h"
 #include "ui/base/ime/ash/input_method_util.h"
 
@@ -66,9 +66,8 @@
 void OobeConfiguration::CheckConfiguration() {
   if (skip_check_for_testing_)
     return;
-  chromeos::OobeConfigurationClient::Get()->CheckForOobeConfiguration(
-      base::BindOnce(&OobeConfiguration::OnConfigurationCheck,
-                     weak_factory_.GetWeakPtr()));
+  OobeConfigurationClient::Get()->CheckForOobeConfiguration(base::BindOnce(
+      &OobeConfiguration::OnConfigurationCheck, weak_factory_.GetWeakPtr()));
 }
 
 void OobeConfiguration::OnConfigurationCheck(bool has_configuration,
diff --git a/chrome/browser/ash/login/screens/welcome_screen_browsertest.cc b/chrome/browser/ash/login/screens/welcome_screen_browsertest.cc
index 98a5555..84646b7 100644
--- a/chrome/browser/ash/login/screens/welcome_screen_browsertest.cc
+++ b/chrome/browser/ash/login/screens/welcome_screen_browsertest.cc
@@ -675,7 +675,8 @@
 
 // Assert that the ChromeVox hint gives speech output and shows a dialog.
 // Clicking the 'activate' button in the dialog should activate ChromeVox.
-IN_PROC_BROWSER_TEST_F(WelcomeScreenChromeVoxHintTest, LaptopClick) {
+// crbug.com/1341515 Disabled due to flakiness.
+IN_PROC_BROWSER_TEST_F(WelcomeScreenChromeVoxHintTest, DISABLED_LaptopClick) {
   OobeScreenWaiter(WelcomeView::kScreenId).Wait();
   // A consistency check to ensure the ChromeVox hint idle detector is disabled
   // for this and similar tests.
diff --git a/chrome/browser/ash/system_web_apps/system_web_app_manager_browsertest.cc b/chrome/browser/ash/system_web_apps/system_web_app_manager_browsertest.cc
index 21070a5c..a5208d64 100644
--- a/chrome/browser/ash/system_web_apps/system_web_app_manager_browsertest.cc
+++ b/chrome/browser/ash/system_web_apps/system_web_app_manager_browsertest.cc
@@ -1625,7 +1625,6 @@
                           ui::EF_LEFT_MOUSE_BUTTON);
   url_observer.Wait();
 }
-#endif  // BUILDFLAG(IS_CHROMEOS_ASH)
 
 class SystemWebAppManagerBackgroundTaskTest
     : public SystemWebAppManagerBrowserTest {
@@ -1685,6 +1684,8 @@
   EXPECT_EQ(base::Days(1), timer->GetCurrentDelay());
 }
 
+#endif  // BUILDFLAG(IS_CHROMEOS_ASH)
+
 class SystemWebAppManagerContextMenuBrowserTest
     : public SystemWebAppManagerBrowserTest {
  public:
@@ -1945,10 +1946,10 @@
 
 INSTANTIATE_SYSTEM_WEB_APP_MANAGER_TEST_SUITE_REGULAR_PROFILE_P(
     SystemWebAppManagerShortcutTest);
-#endif
 
 INSTANTIATE_SYSTEM_WEB_APP_MANAGER_TEST_SUITE_REGULAR_PROFILE_P(
     SystemWebAppManagerBackgroundTaskTest);
+#endif
 
 #if !BUILDFLAG(IS_CHROMEOS_LACROS)
 INSTANTIATE_SYSTEM_WEB_APP_MANAGER_TEST_SUITE_REGULAR_PROFILE_P(
diff --git a/chrome/browser/ash/system_web_apps/system_web_app_manager_factory.cc b/chrome/browser/ash/system_web_apps/system_web_app_manager_factory.cc
index b87a00d..5f56850 100644
--- a/chrome/browser/ash/system_web_apps/system_web_app_manager_factory.cc
+++ b/chrome/browser/ash/system_web_apps/system_web_app_manager_factory.cc
@@ -4,6 +4,7 @@
 
 #include "chrome/browser/ash/system_web_apps/system_web_app_manager_factory.h"
 
+#include "build/chromeos_buildflags.h"
 #include "chrome/browser/ash/system_web_apps/system_web_app_manager.h"
 #include "chrome/browser/profiles/profile.h"
 #include "chrome/browser/web_applications/web_app_provider.h"
@@ -65,7 +66,12 @@
 
 content::BrowserContext* SystemWebAppManagerFactory::GetBrowserContextToUse(
     content::BrowserContext* context) const {
+  // System Web Apps are only available in Ash.
+#if BUILDFLAG(IS_CHROMEOS_ASH)
   return web_app::GetBrowserContextForWebApps(context);
+#else
+  return nullptr;
+#endif
 }
 
 void SystemWebAppManagerFactory::RegisterProfilePrefs(
diff --git a/chrome/browser/chromeos/BUILD.gn b/chrome/browser/chromeos/BUILD.gn
index 84aebc0..a17e29f 100644
--- a/chrome/browser/chromeos/BUILD.gn
+++ b/chrome/browser/chromeos/BUILD.gn
@@ -268,10 +268,13 @@
     "//chromeos/ash/components/dbus/lorgnette_manager:lorgnette_proto",
     "//chromeos/ash/components/dbus/media_analytics",
     "//chromeos/ash/components/dbus/media_analytics:media_perception_proto",
+    "//chromeos/ash/components/dbus/oobe_config",
+    "//chromeos/ash/components/dbus/oobe_config:proto",
     "//chromeos/ash/components/dbus/os_install",
     "//chromeos/ash/components/dbus/patchpanel",
     "//chromeos/ash/components/dbus/patchpanel:patchpanel_proto",
     "//chromeos/ash/components/dbus/pciguard",
+    "//chromeos/ash/components/dbus/resourced",
     "//chromeos/ash/components/dbus/rgbkbd",
     "//chromeos/ash/components/dbus/rmad",
     "//chromeos/ash/components/dbus/seneschal",
@@ -342,11 +345,8 @@
     "//chromeos/dbus/image_loader",
     "//chromeos/dbus/machine_learning",
     "//chromeos/dbus/missive",
-    "//chromeos/dbus/oobe_config",
-    "//chromeos/dbus/oobe_config:proto",
     "//chromeos/dbus/permission_broker",
     "//chromeos/dbus/power",
-    "//chromeos/dbus/resourced",
     "//chromeos/dbus/tpm_manager",
     "//chromeos/dbus/tpm_manager:tpm_manager_proto",
     "//chromeos/dbus/u2f",
@@ -595,6 +595,459 @@
   ]
 
   sources = [
+    "../ash/login/active_directory_migration_utils.cc",
+    "../ash/login/active_directory_migration_utils.h",
+    "../ash/login/app_mode/kiosk_launch_controller.cc",
+    "../ash/login/app_mode/kiosk_launch_controller.h",
+    "../ash/login/auth/chrome_cryptohome_authenticator.cc",
+    "../ash/login/auth/chrome_cryptohome_authenticator.h",
+    "../ash/login/auth/chrome_login_performer.cc",
+    "../ash/login/auth/chrome_login_performer.h",
+    "../ash/login/auth/chrome_safe_mode_delegate.cc",
+    "../ash/login/auth/chrome_safe_mode_delegate.h",
+    "../ash/login/challenge_response_auth_keys_loader.cc",
+    "../ash/login/challenge_response_auth_keys_loader.h",
+    "../ash/login/chrome_restart_request.cc",
+    "../ash/login/chrome_restart_request.h",
+    "../ash/login/configuration_keys.cc",
+    "../ash/login/configuration_keys.h",
+    "../ash/login/consolidated_consent_field_trial.cc",
+    "../ash/login/consolidated_consent_field_trial.h",
+    "../ash/login/demo_mode/demo_extensions_external_loader.cc",
+    "../ash/login/demo_mode/demo_extensions_external_loader.h",
+    "../ash/login/demo_mode/demo_mode_resources_remover.cc",
+    "../ash/login/demo_mode/demo_mode_resources_remover.h",
+    "../ash/login/demo_mode/demo_resources.cc",
+    "../ash/login/demo_mode/demo_resources.h",
+    "../ash/login/demo_mode/demo_session.cc",
+    "../ash/login/demo_mode/demo_session.h",
+    "../ash/login/demo_mode/demo_setup_controller.cc",
+    "../ash/login/demo_mode/demo_setup_controller.h",
+    "../ash/login/easy_unlock/chrome_proximity_auth_client.cc",
+    "../ash/login/easy_unlock/chrome_proximity_auth_client.h",
+    "../ash/login/easy_unlock/easy_unlock_auth_attempt.cc",
+    "../ash/login/easy_unlock/easy_unlock_auth_attempt.h",
+    "../ash/login/easy_unlock/easy_unlock_challenge_wrapper.cc",
+    "../ash/login/easy_unlock/easy_unlock_challenge_wrapper.h",
+    "../ash/login/easy_unlock/easy_unlock_create_keys_operation.cc",
+    "../ash/login/easy_unlock/easy_unlock_create_keys_operation.h",
+    "../ash/login/easy_unlock/easy_unlock_get_keys_operation.cc",
+    "../ash/login/easy_unlock/easy_unlock_get_keys_operation.h",
+    "../ash/login/easy_unlock/easy_unlock_key_manager.cc",
+    "../ash/login/easy_unlock/easy_unlock_key_manager.h",
+    "../ash/login/easy_unlock/easy_unlock_key_names.cc",
+    "../ash/login/easy_unlock/easy_unlock_key_names.h",
+    "../ash/login/easy_unlock/easy_unlock_metrics.cc",
+    "../ash/login/easy_unlock/easy_unlock_metrics.h",
+    "../ash/login/easy_unlock/easy_unlock_notification_controller.cc",
+    "../ash/login/easy_unlock/easy_unlock_notification_controller.h",
+    "../ash/login/easy_unlock/easy_unlock_refresh_keys_operation.cc",
+    "../ash/login/easy_unlock/easy_unlock_refresh_keys_operation.h",
+    "../ash/login/easy_unlock/easy_unlock_remove_keys_operation.cc",
+    "../ash/login/easy_unlock/easy_unlock_remove_keys_operation.h",
+    "../ash/login/easy_unlock/easy_unlock_service.cc",
+    "../ash/login/easy_unlock/easy_unlock_service.h",
+    "../ash/login/easy_unlock/easy_unlock_service_factory.cc",
+    "../ash/login/easy_unlock/easy_unlock_service_factory.h",
+    "../ash/login/easy_unlock/easy_unlock_service_regular.cc",
+    "../ash/login/easy_unlock/easy_unlock_service_regular.h",
+    "../ash/login/easy_unlock/easy_unlock_service_signin.cc",
+    "../ash/login/easy_unlock/easy_unlock_service_signin.h",
+    "../ash/login/easy_unlock/easy_unlock_tpm_key_manager.cc",
+    "../ash/login/easy_unlock/easy_unlock_tpm_key_manager.h",
+    "../ash/login/easy_unlock/easy_unlock_tpm_key_manager_factory.cc",
+    "../ash/login/easy_unlock/easy_unlock_tpm_key_manager_factory.h",
+    "../ash/login/easy_unlock/easy_unlock_types.cc",
+    "../ash/login/easy_unlock/easy_unlock_types.h",
+    "../ash/login/easy_unlock/easy_unlock_user_login_flow.cc",
+    "../ash/login/easy_unlock/easy_unlock_user_login_flow.h",
+    "../ash/login/easy_unlock/smartlock_feature_usage_metrics.cc",
+    "../ash/login/easy_unlock/smartlock_feature_usage_metrics.h",
+    "../ash/login/easy_unlock/smartlock_state_handler.cc",
+    "../ash/login/easy_unlock/smartlock_state_handler.h",
+    "../ash/login/enrollment/auto_enrollment_check_screen.cc",
+    "../ash/login/enrollment/auto_enrollment_check_screen.h",
+    "../ash/login/enrollment/auto_enrollment_check_screen_view.h",
+    "../ash/login/enrollment/auto_enrollment_controller.cc",
+    "../ash/login/enrollment/auto_enrollment_controller.h",
+    "../ash/login/enrollment/enrollment_screen.cc",
+    "../ash/login/enrollment/enrollment_screen.h",
+    "../ash/login/enrollment/enrollment_screen_view.h",
+    "../ash/login/enrollment/enrollment_uma.cc",
+    "../ash/login/enrollment/enrollment_uma.h",
+    "../ash/login/enrollment/enterprise_enrollment_helper.cc",
+    "../ash/login/enrollment/enterprise_enrollment_helper.h",
+    "../ash/login/enrollment/enterprise_enrollment_helper_impl.cc",
+    "../ash/login/enrollment/enterprise_enrollment_helper_impl.h",
+    "../ash/login/enterprise_user_session_metrics.cc",
+    "../ash/login/enterprise_user_session_metrics.h",
+    "../ash/login/error_screens_histogram_helper.cc",
+    "../ash/login/error_screens_histogram_helper.h",
+    "../ash/login/existing_user_controller.cc",
+    "../ash/login/existing_user_controller.h",
+    "../ash/login/gaia_reauth_token_fetcher.cc",
+    "../ash/login/gaia_reauth_token_fetcher.h",
+    "../ash/login/hats_unlock_survey_trigger.cc",
+    "../ash/login/hats_unlock_survey_trigger.h",
+    "../ash/login/help_app_launcher.cc",
+    "../ash/login/help_app_launcher.h",
+    "../ash/login/helper.cc",
+    "../ash/login/helper.h",
+    "../ash/login/hwid_checker.cc",
+    "../ash/login/hwid_checker.h",
+    "../ash/login/lock/screen_locker.cc",
+    "../ash/login/lock/screen_locker.h",
+    "../ash/login/lock/views_screen_locker.cc",
+    "../ash/login/lock/views_screen_locker.h",
+    "../ash/login/lock_screen_utils.cc",
+    "../ash/login/lock_screen_utils.h",
+    "../ash/login/login_auth_recorder.cc",
+    "../ash/login/login_auth_recorder.h",
+    "../ash/login/login_client_cert_usage_observer.cc",
+    "../ash/login/login_client_cert_usage_observer.h",
+    "../ash/login/login_pref_names.cc",
+    "../ash/login/login_pref_names.h",
+    "../ash/login/login_screen_extensions_lifetime_manager.cc",
+    "../ash/login/login_screen_extensions_lifetime_manager.h",
+    "../ash/login/login_screen_extensions_storage_cleaner.cc",
+    "../ash/login/login_screen_extensions_storage_cleaner.h",
+    "../ash/login/login_wizard.h",
+    "../ash/login/marketing_backend_connector.cc",
+    "../ash/login/marketing_backend_connector.h",
+    "../ash/login/mojo_system_info_dispatcher.cc",
+    "../ash/login/mojo_system_info_dispatcher.h",
+    "../ash/login/onboarding_user_activity_counter.cc",
+    "../ash/login/onboarding_user_activity_counter.h",
+    "../ash/login/oobe_configuration.cc",
+    "../ash/login/oobe_configuration.h",
+    "../ash/login/oobe_screen.cc",
+    "../ash/login/oobe_screen.h",
+    "../ash/login/profile_auth_data.cc",
+    "../ash/login/profile_auth_data.h",
+    "../ash/login/quick_unlock/auth_token.cc",
+    "../ash/login/quick_unlock/auth_token.h",
+    "../ash/login/quick_unlock/fake_pin_salt_storage.cc",
+    "../ash/login/quick_unlock/fake_pin_salt_storage.h",
+    "../ash/login/quick_unlock/fingerprint_power_button_race_detector.cc",
+    "../ash/login/quick_unlock/fingerprint_power_button_race_detector.h",
+    "../ash/login/quick_unlock/fingerprint_storage.cc",
+    "../ash/login/quick_unlock/fingerprint_storage.h",
+    "../ash/login/quick_unlock/fingerprint_utils.cc",
+    "../ash/login/quick_unlock/fingerprint_utils.h",
+    "../ash/login/quick_unlock/pin_backend.cc",
+    "../ash/login/quick_unlock/pin_backend.h",
+    "../ash/login/quick_unlock/pin_salt_storage.cc",
+    "../ash/login/quick_unlock/pin_salt_storage.h",
+    "../ash/login/quick_unlock/pin_storage_cryptohome.cc",
+    "../ash/login/quick_unlock/pin_storage_cryptohome.h",
+    "../ash/login/quick_unlock/pin_storage_prefs.cc",
+    "../ash/login/quick_unlock/pin_storage_prefs.h",
+    "../ash/login/quick_unlock/quick_unlock_factory.cc",
+    "../ash/login/quick_unlock/quick_unlock_factory.h",
+    "../ash/login/quick_unlock/quick_unlock_storage.cc",
+    "../ash/login/quick_unlock/quick_unlock_storage.h",
+    "../ash/login/quick_unlock/quick_unlock_utils.cc",
+    "../ash/login/quick_unlock/quick_unlock_utils.h",
+    "../ash/login/reauth_stats.cc",
+    "../ash/login/reauth_stats.h",
+    "../ash/login/reporting/login_logout_reporter.cc",
+    "../ash/login/reporting/login_logout_reporter.h",
+    "../ash/login/saml/in_session_password_change_manager.cc",
+    "../ash/login/saml/in_session_password_change_manager.h",
+    "../ash/login/saml/in_session_password_sync_manager.cc",
+    "../ash/login/saml/in_session_password_sync_manager.h",
+    "../ash/login/saml/in_session_password_sync_manager_factory.cc",
+    "../ash/login/saml/in_session_password_sync_manager_factory.h",
+    "../ash/login/saml/password_change_success_notification.cc",
+    "../ash/login/saml/password_change_success_notification.h",
+    "../ash/login/saml/password_expiry_notification.cc",
+    "../ash/login/saml/password_expiry_notification.h",
+    "../ash/login/saml/password_sync_token_checkers_collection.cc",
+    "../ash/login/saml/password_sync_token_checkers_collection.h",
+    "../ash/login/saml/password_sync_token_fetcher.cc",
+    "../ash/login/saml/password_sync_token_fetcher.h",
+    "../ash/login/saml/password_sync_token_login_checker.cc",
+    "../ash/login/saml/password_sync_token_login_checker.h",
+    "../ash/login/saml/password_sync_token_verifier.cc",
+    "../ash/login/saml/password_sync_token_verifier.h",
+    "../ash/login/saml/password_sync_token_verifier_factory.cc",
+    "../ash/login/saml/password_sync_token_verifier_factory.h",
+    "../ash/login/saml/public_saml_url_fetcher.cc",
+    "../ash/login/saml/public_saml_url_fetcher.h",
+    "../ash/login/saml/saml_metric_utils.cc",
+    "../ash/login/saml/saml_metric_utils.h",
+    "../ash/login/saml/saml_profile_prefs.cc",
+    "../ash/login/saml/saml_profile_prefs.h",
+    "../ash/login/screen_manager.cc",
+    "../ash/login/screen_manager.h",
+    "../ash/login/screens/active_directory_login_screen.cc",
+    "../ash/login/screens/active_directory_login_screen.h",
+    "../ash/login/screens/active_directory_password_change_screen.cc",
+    "../ash/login/screens/active_directory_password_change_screen.h",
+    "../ash/login/screens/app_downloading_screen.cc",
+    "../ash/login/screens/app_downloading_screen.h",
+    "../ash/login/screens/arc_terms_of_service_screen.cc",
+    "../ash/login/screens/arc_terms_of_service_screen.h",
+    "../ash/login/screens/assistant_optin_flow_screen.cc",
+    "../ash/login/screens/assistant_optin_flow_screen.h",
+    "../ash/login/screens/base_screen.cc",
+    "../ash/login/screens/base_screen.h",
+    "../ash/login/screens/chrome_user_selection_screen.cc",
+    "../ash/login/screens/chrome_user_selection_screen.h",
+    "../ash/login/screens/chromevox_hint/chromevox_hint_detector.cc",
+    "../ash/login/screens/chromevox_hint/chromevox_hint_detector.h",
+    "../ash/login/screens/consolidated_consent_screen.cc",
+    "../ash/login/screens/consolidated_consent_screen.h",
+    "../ash/login/screens/demo_preferences_screen.cc",
+    "../ash/login/screens/demo_preferences_screen.h",
+    "../ash/login/screens/demo_setup_screen.cc",
+    "../ash/login/screens/demo_setup_screen.h",
+    "../ash/login/screens/device_disabled_screen.cc",
+    "../ash/login/screens/device_disabled_screen.h",
+    "../ash/login/screens/edu_coexistence_login_screen.cc",
+    "../ash/login/screens/edu_coexistence_login_screen.h",
+    "../ash/login/screens/enable_adb_sideloading_screen.cc",
+    "../ash/login/screens/enable_adb_sideloading_screen.h",
+    "../ash/login/screens/enable_debugging_screen.cc",
+    "../ash/login/screens/enable_debugging_screen.h",
+    "../ash/login/screens/encryption_migration_mode.h",
+    "../ash/login/screens/encryption_migration_screen.cc",
+    "../ash/login/screens/encryption_migration_screen.h",
+    "../ash/login/screens/error_screen.cc",
+    "../ash/login/screens/error_screen.h",
+    "../ash/login/screens/eula_screen.cc",
+    "../ash/login/screens/eula_screen.h",
+    "../ash/login/screens/family_link_notice_screen.cc",
+    "../ash/login/screens/family_link_notice_screen.h",
+    "../ash/login/screens/fingerprint_setup_screen.cc",
+    "../ash/login/screens/fingerprint_setup_screen.h",
+    "../ash/login/screens/gaia_password_changed_screen.cc",
+    "../ash/login/screens/gaia_password_changed_screen.h",
+    "../ash/login/screens/gaia_screen.cc",
+    "../ash/login/screens/gaia_screen.h",
+    "../ash/login/screens/gesture_navigation_screen.cc",
+    "../ash/login/screens/gesture_navigation_screen.h",
+    "../ash/login/screens/guest_tos_screen.cc",
+    "../ash/login/screens/guest_tos_screen.h",
+    "../ash/login/screens/hardware_data_collection_screen.cc",
+    "../ash/login/screens/hardware_data_collection_screen.h",
+    "../ash/login/screens/hid_detection_screen.cc",
+    "../ash/login/screens/hid_detection_screen.h",
+    "../ash/login/screens/kiosk_autolaunch_screen.cc",
+    "../ash/login/screens/kiosk_autolaunch_screen.h",
+    "../ash/login/screens/kiosk_enable_screen.cc",
+    "../ash/login/screens/kiosk_enable_screen.h",
+    "../ash/login/screens/lacros_data_migration_screen.cc",
+    "../ash/login/screens/lacros_data_migration_screen.h",
+    "../ash/login/screens/locale_switch_screen.cc",
+    "../ash/login/screens/locale_switch_screen.h",
+    "../ash/login/screens/management_transition_screen.cc",
+    "../ash/login/screens/management_transition_screen.h",
+    "../ash/login/screens/marketing_opt_in_screen.cc",
+    "../ash/login/screens/marketing_opt_in_screen.h",
+    "../ash/login/screens/multidevice_setup_screen.cc",
+    "../ash/login/screens/multidevice_setup_screen.h",
+    "../ash/login/screens/network_error.cc",
+    "../ash/login/screens/network_error.h",
+    "../ash/login/screens/network_screen.cc",
+    "../ash/login/screens/network_screen.h",
+    "../ash/login/screens/offline_login_screen.cc",
+    "../ash/login/screens/offline_login_screen.h",
+    "../ash/login/screens/os_install_screen.cc",
+    "../ash/login/screens/os_install_screen.h",
+    "../ash/login/screens/os_trial_screen.cc",
+    "../ash/login/screens/os_trial_screen.h",
+    "../ash/login/screens/packaged_license_screen.cc",
+    "../ash/login/screens/packaged_license_screen.h",
+    "../ash/login/screens/parental_handoff_screen.cc",
+    "../ash/login/screens/parental_handoff_screen.h",
+    "../ash/login/screens/pin_setup_screen.cc",
+    "../ash/login/screens/pin_setup_screen.h",
+    "../ash/login/screens/quick_start_screen.cc",
+    "../ash/login/screens/quick_start_screen.h",
+    "../ash/login/screens/recommend_apps/fake_recommend_apps_fetcher.cc",
+    "../ash/login/screens/recommend_apps/fake_recommend_apps_fetcher.h",
+    "../ash/login/screens/recommend_apps/recommend_apps_fetcher.cc",
+    "../ash/login/screens/recommend_apps/recommend_apps_fetcher.h",
+    "../ash/login/screens/recommend_apps/recommend_apps_fetcher_delegate.h",
+    "../ash/login/screens/recommend_apps/recommend_apps_fetcher_impl.cc",
+    "../ash/login/screens/recommend_apps/recommend_apps_fetcher_impl.h",
+    "../ash/login/screens/recommend_apps_screen.cc",
+    "../ash/login/screens/recommend_apps_screen.h",
+    "../ash/login/screens/reset_screen.cc",
+    "../ash/login/screens/reset_screen.h",
+    "../ash/login/screens/saml_confirm_password_screen.cc",
+    "../ash/login/screens/saml_confirm_password_screen.h",
+    "../ash/login/screens/signin_fatal_error_screen.cc",
+    "../ash/login/screens/signin_fatal_error_screen.h",
+    "../ash/login/screens/smart_privacy_protection_screen.cc",
+    "../ash/login/screens/smart_privacy_protection_screen.h",
+    "../ash/login/screens/sync_consent_screen.cc",
+    "../ash/login/screens/sync_consent_screen.h",
+    "../ash/login/screens/terms_of_service_screen.cc",
+    "../ash/login/screens/terms_of_service_screen.h",
+    "../ash/login/screens/theme_selection_screen.cc",
+    "../ash/login/screens/theme_selection_screen.h",
+    "../ash/login/screens/tpm_error_screen.cc",
+    "../ash/login/screens/tpm_error_screen.h",
+    "../ash/login/screens/update_required_screen.cc",
+    "../ash/login/screens/update_required_screen.h",
+    "../ash/login/screens/update_screen.cc",
+    "../ash/login/screens/update_screen.h",
+    "../ash/login/screens/user_creation_screen.cc",
+    "../ash/login/screens/user_creation_screen.h",
+    "../ash/login/screens/user_selection_screen.cc",
+    "../ash/login/screens/user_selection_screen.h",
+    "../ash/login/screens/welcome_screen.cc",
+    "../ash/login/screens/welcome_screen.h",
+    "../ash/login/screens/wrong_hwid_screen.cc",
+    "../ash/login/screens/wrong_hwid_screen.h",
+    "../ash/login/security_token_pin_dialog_host_login_impl.cc",
+    "../ash/login/security_token_pin_dialog_host_login_impl.h",
+    "../ash/login/security_token_session_controller.cc",
+    "../ash/login/security_token_session_controller.h",
+    "../ash/login/security_token_session_controller_factory.cc",
+    "../ash/login/security_token_session_controller_factory.h",
+    "../ash/login/session/chrome_session_manager.cc",
+    "../ash/login/session/chrome_session_manager.h",
+    "../ash/login/session/user_session_initializer.cc",
+    "../ash/login/session/user_session_initializer.h",
+    "../ash/login/session/user_session_manager.cc",
+    "../ash/login/session/user_session_manager.h",
+    "../ash/login/signin/auth_error_observer.cc",
+    "../ash/login/signin/auth_error_observer.h",
+    "../ash/login/signin/auth_error_observer_factory.cc",
+    "../ash/login/signin/auth_error_observer_factory.h",
+    "../ash/login/signin/merge_session_navigation_throttle.cc",
+    "../ash/login/signin/merge_session_navigation_throttle.h",
+    "../ash/login/signin/merge_session_throttling_utils.cc",
+    "../ash/login/signin/merge_session_throttling_utils.h",
+    "../ash/login/signin/oauth2_login_manager.cc",
+    "../ash/login/signin/oauth2_login_manager.h",
+    "../ash/login/signin/oauth2_login_manager_factory.cc",
+    "../ash/login/signin/oauth2_login_manager_factory.h",
+    "../ash/login/signin/oauth2_login_verifier.cc",
+    "../ash/login/signin/oauth2_login_verifier.h",
+    "../ash/login/signin/oauth2_token_fetcher.cc",
+    "../ash/login/signin/oauth2_token_fetcher.h",
+    "../ash/login/signin/oauth2_token_initializer.cc",
+    "../ash/login/signin/oauth2_token_initializer.h",
+    "../ash/login/signin/offline_signin_limiter.cc",
+    "../ash/login/signin/offline_signin_limiter.h",
+    "../ash/login/signin/offline_signin_limiter_factory.cc",
+    "../ash/login/signin/offline_signin_limiter_factory.h",
+    "../ash/login/signin/signin_error_notifier.cc",
+    "../ash/login/signin/signin_error_notifier.h",
+    "../ash/login/signin/signin_error_notifier_factory.cc",
+    "../ash/login/signin/signin_error_notifier_factory.h",
+    "../ash/login/signin/token_handle_fetcher.cc",
+    "../ash/login/signin/token_handle_fetcher.h",
+    "../ash/login/signin/token_handle_util.cc",
+    "../ash/login/signin/token_handle_util.h",
+    "../ash/login/signin_partition_manager.cc",
+    "../ash/login/signin_partition_manager.h",
+    "../ash/login/signin_specifics.h",
+    "../ash/login/startup_utils.cc",
+    "../ash/login/startup_utils.h",
+    "../ash/login/ui/captive_portal_dialog_delegate.cc",
+    "../ash/login/ui/captive_portal_dialog_delegate.h",
+    "../ash/login/ui/captive_portal_view.cc",
+    "../ash/login/ui/captive_portal_view.h",
+    "../ash/login/ui/captive_portal_window_proxy.cc",
+    "../ash/login/ui/captive_portal_window_proxy.h",
+    "../ash/login/ui/input_events_blocker.cc",
+    "../ash/login/ui/input_events_blocker.h",
+    "../ash/login/ui/kiosk_app_menu_controller.cc",
+    "../ash/login/ui/kiosk_app_menu_controller.h",
+    "../ash/login/ui/login_display.cc",
+    "../ash/login/ui/login_display.h",
+    "../ash/login/ui/login_display_host.cc",
+    "../ash/login/ui/login_display_host.h",
+    "../ash/login/ui/login_display_host_common.cc",
+    "../ash/login/ui/login_display_host_common.h",
+    "../ash/login/ui/login_display_host_mojo.cc",
+    "../ash/login/ui/login_display_host_mojo.h",
+    "../ash/login/ui/login_display_host_webui.cc",
+    "../ash/login/ui/login_display_host_webui.h",
+    "../ash/login/ui/login_display_mojo.cc",
+    "../ash/login/ui/login_display_mojo.h",
+    "../ash/login/ui/login_display_webui.cc",
+    "../ash/login/ui/login_display_webui.h",
+    "../ash/login/ui/login_feedback.cc",
+    "../ash/login/ui/login_feedback.h",
+    "../ash/login/ui/login_screen_extension_ui/create_options.cc",
+    "../ash/login/ui/login_screen_extension_ui/create_options.h",
+    "../ash/login/ui/login_screen_extension_ui/dialog_delegate.cc",
+    "../ash/login/ui/login_screen_extension_ui/dialog_delegate.h",
+    "../ash/login/ui/login_screen_extension_ui/web_dialog_view.cc",
+    "../ash/login/ui/login_screen_extension_ui/web_dialog_view.h",
+    "../ash/login/ui/login_screen_extension_ui/window.cc",
+    "../ash/login/ui/login_screen_extension_ui/window.h",
+    "../ash/login/ui/login_web_dialog.cc",
+    "../ash/login/ui/login_web_dialog.h",
+    "../ash/login/ui/oobe_dialog_size_utils.cc",
+    "../ash/login/ui/oobe_dialog_size_utils.h",
+    "../ash/login/ui/oobe_ui_dialog_delegate.cc",
+    "../ash/login/ui/oobe_ui_dialog_delegate.h",
+    "../ash/login/ui/signin_ui.h",
+    "../ash/login/ui/simple_web_view_dialog.cc",
+    "../ash/login/ui/simple_web_view_dialog.h",
+    "../ash/login/ui/user_adding_screen.cc",
+    "../ash/login/ui/user_adding_screen.h",
+    "../ash/login/ui/user_adding_screen_input_methods_controller.cc",
+    "../ash/login/ui/user_adding_screen_input_methods_controller.h",
+    "../ash/login/ui/views/user_board_view.h",
+    "../ash/login/ui/web_contents_forced_title.cc",
+    "../ash/login/ui/web_contents_forced_title.h",
+    "../ash/login/ui/webui_login_view.cc",
+    "../ash/login/ui/webui_login_view.h",
+    "../ash/login/user_board_view_mojo.cc",
+    "../ash/login/user_board_view_mojo.h",
+    "../ash/login/user_flow.cc",
+    "../ash/login/user_flow.h",
+    "../ash/login/user_online_signin_notifier.cc",
+    "../ash/login/user_online_signin_notifier.h",
+    "../ash/login/users/affiliation.cc",
+    "../ash/login/users/affiliation.h",
+    "../ash/login/users/avatar/user_image_file_selector.cc",
+    "../ash/login/users/avatar/user_image_file_selector.h",
+    "../ash/login/users/avatar/user_image_loader.cc",
+    "../ash/login/users/avatar/user_image_loader.h",
+    "../ash/login/users/avatar/user_image_manager.cc",
+    "../ash/login/users/avatar/user_image_manager.h",
+    "../ash/login/users/avatar/user_image_manager_impl.cc",
+    "../ash/login/users/avatar/user_image_manager_impl.h",
+    "../ash/login/users/avatar/user_image_sync_observer.cc",
+    "../ash/login/users/avatar/user_image_sync_observer.h",
+    "../ash/login/users/chrome_user_manager.cc",
+    "../ash/login/users/chrome_user_manager.h",
+    "../ash/login/users/chrome_user_manager_impl.cc",
+    "../ash/login/users/chrome_user_manager_impl.h",
+    "../ash/login/users/chrome_user_manager_util.cc",
+    "../ash/login/users/chrome_user_manager_util.h",
+    "../ash/login/users/default_user_image/default_user_images.cc",
+    "../ash/login/users/default_user_image/default_user_images.h",
+    "../ash/login/users/multi_profile_user_controller.cc",
+    "../ash/login/users/multi_profile_user_controller.h",
+    "../ash/login/users/multi_profile_user_controller_delegate.h",
+    "../ash/login/users/scoped_test_user_manager.cc",
+    "../ash/login/users/scoped_test_user_manager.h",
+    "../ash/login/users/supervised_user_manager.h",
+    "../ash/login/users/supervised_user_manager_impl.cc",
+    "../ash/login/users/supervised_user_manager_impl.h",
+    "../ash/login/users/test_users.cc",
+    "../ash/login/users/test_users.h",
+    "../ash/login/users/user_manager_interface.h",
+    "../ash/login/version_info_updater.cc",
+    "../ash/login/version_info_updater.h",
+    "../ash/login/version_updater/update_time_estimator.cc",
+    "../ash/login/version_updater/update_time_estimator.h",
+    "../ash/login/version_updater/version_updater.cc",
+    "../ash/login/version_updater/version_updater.h",
+    "../ash/login/wizard_context.cc",
+    "../ash/login/wizard_context.h",
+    "../ash/login/wizard_controller.cc",
+    "../ash/login/wizard_controller.h",
     "../ash/pcie_peripheral/ash_usb_detector.cc",
     "../ash/pcie_peripheral/ash_usb_detector.h",
     "../ash/phonehub/browser_tabs_metadata_fetcher_impl.cc",
@@ -3172,6 +3625,7 @@
     "//chromeos/ash/components/dbus/anomaly_detector",
     "//chromeos/ash/components/dbus/authpolicy",
     "//chromeos/ash/components/dbus/lorgnette_manager:lorgnette_proto",
+    "//chromeos/ash/components/dbus/oobe_config",
     "//chromeos/ash/components/dbus/services:test_support",
     "//chromeos/ash/components/dbus/session_manager",
     "//chromeos/ash/components/dbus/smbprovider",
@@ -3196,7 +3650,6 @@
     "//chromeos/dbus/dlp",
     "//chromeos/dbus/gnubby",
     "//chromeos/dbus/missive",
-    "//chromeos/dbus/oobe_config",
     "//chromeos/dbus/power",
     "//chromeos/ime:gencode",
     "//chromeos/login/login_state",
diff --git a/chrome/browser/chromeos/launcher_search/search_util.cc b/chrome/browser/chromeos/launcher_search/search_util.cc
index 4fe1ac29..e9a1d44 100644
--- a/chrome/browser/chromeos/launcher_search/search_util.cc
+++ b/chrome/browser/chromeos/launcher_search/search_util.cc
@@ -175,9 +175,15 @@
   result->is_answer = SearchResult::OptionalBool::kTrue;
   result->answer_type = MatchTypeToAnswerType(match.answer->type());
 
-  if (result->answer_type == SearchResult::AnswerType::kWeather)
+  if (result->answer_type == SearchResult::AnswerType::kWeather) {
     result->image_url = match.answer->image_url();
 
+    const std::u16string* a11y_label =
+        match.answer->second_line().accessibility_label();
+    if (a11y_label)
+      result->description_a11y_label = *a11y_label;
+  }
+
   result->contents = match.contents;
 
   const auto& first = match.answer->first_line();
diff --git a/chrome/browser/chromeos/launcher_search/search_util_unittest.cc b/chrome/browser/chromeos/launcher_search/search_util_unittest.cc
index 06520c43..dfd40ab 100644
--- a/chrome/browser/chromeos/launcher_search/search_util_unittest.cc
+++ b/chrome/browser/chromeos/launcher_search/search_util_unittest.cc
@@ -36,12 +36,13 @@
 
   SuggestionAnswer answer;
   std::string json =
-      "{ \"l\": ["
-      "  { \"il\": { \"t\": [{ \"t\": \"text one\", \"tt\": 8 }], "
-      "              \"at\": { \"t\": \"additional one\", \"tt\": 42 } } }, "
-      "  { \"il\": { \"t\": [{ \"t\": \"text two\", \"tt\": 5 }], "
-      "              \"at\": { \"t\": \"additional two\", \"tt\": 6 } } } "
-      "] }";
+      R"({ "l": [)"
+      R"(  { "il": { "t": [{ "t": "text one", "tt": 8 }],)"
+      R"(            "at": { "t": "additional one", "tt": 42 } } },)"
+      R"(  { "il": { "t": [{ "t": "text two", "tt": 5 }],)"
+      R"(            "at": { "t": "additional two", "tt": 6 },)"
+      R"(            "al": "a11y label" } })"
+      R"(] })";
   absl::optional<base::Value> value = base::JSONReader::Read(json);
   ASSERT_TRUE(value && value->is_dict());
   ASSERT_TRUE(SuggestionAnswer::ParseAnswer(value->GetDict(), u"-1", &answer));
@@ -105,5 +106,58 @@
   EXPECT_EQ(result->description_type, mojom::SearchResult::TextType::kUnset);
 }
 
+// Tests result conversion for a weather Omnibox result.
+TEST(SearchUtilTest, CreateWeatherResult) {
+  AutocompleteMatch match;
+  match.relevance = 1200;
+  match.destination_url = GURL("https://www.example.com.au/weather");
+  match.type = AutocompleteMatchType::Type::SEARCH_SUGGEST;
+  match.contents = u"Weather in Perth";
+  match.contents_class = {
+      ACMatchClassification(0, ACMatchClassification::Style::MATCH)};
+
+  SuggestionAnswer answer;
+  const std::string json =
+      R"({ "l": [)"
+      R"(  { "il": { "t": [ { "t": "weather in perth", "tt": 8 } ] } },)"
+      R"(  {)"
+      R"(    "il": {)"
+      R"(      "al": "Sunny",)"
+      R"(      "at": { "t": "Perth WA, Australia", "tt": 19 },)"
+      R"(      "i": { "d": "//www.weather.com.au/sunny.png", "t": 3 },)"
+      R"(      "t": [ { "t": "16°C", "tt": 18 } ])"
+      R"(    })"
+      R"(  })"
+      R"(] })";
+  const absl::optional<base::Value> value = base::JSONReader::Read(json);
+  ASSERT_TRUE(value && value->is_dict());
+  ASSERT_TRUE(SuggestionAnswer::ParseAnswer(
+      value->GetDict(), /* The answer type for 'weather'. */ u"8", &answer));
+  match.answer = answer;
+
+  const auto result = CreateAnswerResult(match, nullptr, AutocompleteInput());
+  EXPECT_EQ(result->type, mojom::SearchResultType::kOmniboxResult);
+  EXPECT_EQ(result->relevance, 1200);
+  ASSERT_TRUE(result->destination_url.has_value());
+  EXPECT_EQ(result->destination_url.value(),
+            GURL("https://www.example.com.au/weather"));
+  EXPECT_EQ(result->is_omnibox_search,
+            mojom::SearchResult::OptionalBool::kTrue);
+  EXPECT_EQ(result->is_answer, mojom::SearchResult::OptionalBool::kTrue);
+
+  ASSERT_TRUE(result->contents.has_value());
+  EXPECT_EQ(result->contents.value(), u"Weather in Perth");
+  EXPECT_FALSE(result->additional_contents.has_value());
+  ASSERT_TRUE(result->description.has_value());
+  EXPECT_EQ(result->description.value(), u"16°C");
+  ASSERT_TRUE(result->additional_description.has_value());
+  EXPECT_EQ(result->additional_description.value(), u"Perth WA, Australia");
+  ASSERT_TRUE(result->description_a11y_label.has_value());
+  EXPECT_EQ(result->description_a11y_label.value(), u"Sunny");
+  ASSERT_TRUE(result->image_url.has_value());
+  EXPECT_EQ(result->image_url.value(),
+            GURL("https://www.weather.com.au/sunny.png"));
+}
+
 }  // namespace
 }  // namespace crosapi
diff --git a/chrome/browser/enterprise/connectors/device_trust/key_management/core/network/fetcher/BUILD.gn b/chrome/browser/enterprise/connectors/device_trust/key_management/core/network/fetcher/BUILD.gn
new file mode 100644
index 0000000..945166b
--- /dev/null
+++ b/chrome/browser/enterprise/connectors/device_trust/key_management/core/network/fetcher/BUILD.gn
@@ -0,0 +1,35 @@
+# 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.
+
+if (is_win) {
+  source_set("fetcher") {
+    public = [ "win_network_fetcher.h" ]
+
+    sources = [
+      "win_network_fetcher.cc",
+      "win_network_fetcher_impl.cc",
+      "win_network_fetcher_impl.h",
+    ]
+
+    deps = [
+      "//base",
+      "//net",
+      "//url",
+    ]
+
+    public_deps = [ "//components/winhttp" ]
+  }
+
+  source_set("test_support") {
+    testonly = true
+    public = [ "mock_win_network_fetcher.h" ]
+
+    sources = [ "mock_win_network_fetcher.cc" ]
+
+    public_deps = [
+      ":fetcher",
+      "//testing/gmock",
+    ]
+  }
+}
diff --git a/chrome/browser/enterprise/connectors/device_trust/key_management/core/network/fetcher/mock_win_network_fetcher.cc b/chrome/browser/enterprise/connectors/device_trust/key_management/core/network/fetcher/mock_win_network_fetcher.cc
new file mode 100644
index 0000000..06d365a
--- /dev/null
+++ b/chrome/browser/enterprise/connectors/device_trust/key_management/core/network/fetcher/mock_win_network_fetcher.cc
@@ -0,0 +1,14 @@
+// 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.
+
+#include "chrome/browser/enterprise/connectors/device_trust/key_management/core/network/fetcher/mock_win_network_fetcher.h"
+
+namespace enterprise_connectors {
+namespace test {
+
+MockWinNetworkFetcher::MockWinNetworkFetcher() = default;
+MockWinNetworkFetcher::~MockWinNetworkFetcher() = default;
+
+}  // namespace test
+}  // namespace enterprise_connectors
diff --git a/chrome/browser/enterprise/connectors/device_trust/key_management/core/network/fetcher/mock_win_network_fetcher.h b/chrome/browser/enterprise/connectors/device_trust/key_management/core/network/fetcher/mock_win_network_fetcher.h
new file mode 100644
index 0000000..5b7f93e
--- /dev/null
+++ b/chrome/browser/enterprise/connectors/device_trust/key_management/core/network/fetcher/mock_win_network_fetcher.h
@@ -0,0 +1,27 @@
+// 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 CHROME_BROWSER_ENTERPRISE_CONNECTORS_DEVICE_TRUST_KEY_MANAGEMENT_CORE_NETWORK_FETCHER_MOCK_WIN_NETWORK_FETCHER_H_
+#define CHROME_BROWSER_ENTERPRISE_CONNECTORS_DEVICE_TRUST_KEY_MANAGEMENT_CORE_NETWORK_FETCHER_MOCK_WIN_NETWORK_FETCHER_H_
+
+#include "chrome/browser/enterprise/connectors/device_trust/key_management/core/network/fetcher/win_network_fetcher.h"
+
+#include "testing/gmock/include/gmock/gmock.h"
+
+namespace enterprise_connectors {
+namespace test {
+
+// Mocked implementation of the WinNetworkFetcher interface.
+class MockWinNetworkFetcher : public WinNetworkFetcher {
+ public:
+  MockWinNetworkFetcher();
+  ~MockWinNetworkFetcher() override;
+
+  MOCK_METHOD(void, Fetch, (FetchCompletedCallback), (override));
+};
+
+}  // namespace test
+}  // namespace enterprise_connectors
+
+#endif  // CHROME_BROWSER_ENTERPRISE_CONNECTORS_DEVICE_TRUST_KEY_MANAGEMENT_CORE_NETWORK_FETCHER_MOCK_WIN_NETWORK_FETCHER_H_
diff --git a/chrome/browser/enterprise/connectors/device_trust/key_management/core/network/fetcher/win_network_fetcher.cc b/chrome/browser/enterprise/connectors/device_trust/key_management/core/network/fetcher/win_network_fetcher.cc
new file mode 100644
index 0000000..d4bd030
--- /dev/null
+++ b/chrome/browser/enterprise/connectors/device_trust/key_management/core/network/fetcher/win_network_fetcher.cc
@@ -0,0 +1,23 @@
+// 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.
+
+#include "chrome/browser/enterprise/connectors/device_trust/key_management/core/network/fetcher/win_network_fetcher.h"
+
+#include <memory>
+#include <string>
+
+#include "base/containers/flat_map.h"
+#include "chrome/browser/enterprise/connectors/device_trust/key_management/core/network/fetcher/win_network_fetcher_impl.h"
+
+namespace enterprise_connectors {
+
+// static
+std::unique_ptr<WinNetworkFetcher> WinNetworkFetcher::Create(
+    const GURL& url,
+    const std::string& body,
+    base::flat_map<std::string, std::string>& headers) {
+  return std::make_unique<WinNetworkFetcherImpl>(url, body, headers);
+}
+
+}  // namespace enterprise_connectors
diff --git a/chrome/browser/enterprise/connectors/device_trust/key_management/core/network/fetcher/win_network_fetcher.h b/chrome/browser/enterprise/connectors/device_trust/key_management/core/network/fetcher/win_network_fetcher.h
new file mode 100644
index 0000000..076699d8
--- /dev/null
+++ b/chrome/browser/enterprise/connectors/device_trust/key_management/core/network/fetcher/win_network_fetcher.h
@@ -0,0 +1,40 @@
+// 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 CHROME_BROWSER_ENTERPRISE_CONNECTORS_DEVICE_TRUST_KEY_MANAGEMENT_CORE_NETWORK_FETCHER_WIN_NETWORK_FETCHER_H_
+#define CHROME_BROWSER_ENTERPRISE_CONNECTORS_DEVICE_TRUST_KEY_MANAGEMENT_CORE_NETWORK_FETCHER_WIN_NETWORK_FETCHER_H_
+
+#include <memory>
+#include <string>
+
+#include "base/callback.h"
+#include "base/containers/flat_map.h"
+
+class GURL;
+
+namespace enterprise_connectors {
+
+// Interface for the object in charge of issuing a windows key network upload
+// request.
+class WinNetworkFetcher {
+ public:
+  // Network request completion callback. The single argument is the response
+  // code of the network request.
+  using FetchCompletedCallback = base::OnceCallback<void(int)>;
+
+  virtual ~WinNetworkFetcher() = default;
+
+  static std::unique_ptr<WinNetworkFetcher> Create(
+      const GURL& url,
+      const std::string& body,
+      base::flat_map<std::string, std::string>& headers);
+
+  // Sends a DeviceManagementRequest to the DM server and returns the HTTP
+  // response to the `callback`.
+  virtual void Fetch(FetchCompletedCallback callback) = 0;
+};
+
+}  // namespace enterprise_connectors
+
+#endif  // CHROME_BROWSER_ENTERPRISE_CONNECTORS_DEVICE_TRUST_KEY_MANAGEMENT_CORE_NETWORK_FETCHER_WIN_NETWORK_FETCHER_H_
diff --git a/chrome/browser/enterprise/connectors/device_trust/key_management/core/network/fetcher/win_network_fetcher_impl.cc b/chrome/browser/enterprise/connectors/device_trust/key_management/core/network/fetcher/win_network_fetcher_impl.cc
new file mode 100644
index 0000000..71be98b
--- /dev/null
+++ b/chrome/browser/enterprise/connectors/device_trust/key_management/core/network/fetcher/win_network_fetcher_impl.cc
@@ -0,0 +1,45 @@
+// 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.
+
+#include "chrome/browser/enterprise/connectors/device_trust/key_management/core/network/fetcher/win_network_fetcher_impl.h"
+
+#include <string>
+#include <utility>
+
+#include "base/callback_helpers.h"
+#include "base/containers/flat_map.h"
+#include "url/gurl.h"
+
+namespace enterprise_connectors {
+
+namespace {}  // namespace
+
+WinNetworkFetcherImpl::WinNetworkFetcherImpl(
+    const GURL& url,
+    const std::string& body,
+    const base::flat_map<std::string, std::string> headers)
+    : url_(url), body_(body), headers_(std::move(headers)) {}
+
+WinNetworkFetcherImpl::~WinNetworkFetcherImpl() = default;
+
+void WinNetworkFetcherImpl::Fetch(FetchCompletedCallback callback) {
+  // TODO(b/202321214): need to pass in winhttp::ProxyInfo somehow.
+  // If specified use it to create an winhttp::ProxyConfiguration instance.
+  // Otherwise create an winhttp::AutoProxyConfiguration instance.
+  if (!winhttp_network_fetcher_) {
+    auto proxy_config = base::MakeRefCounted<winhttp::ProxyConfiguration>();
+    winhttp_session_ = winhttp::CreateSessionHandle(
+        L"DeviceTrustKeyManagement", proxy_config->access_type());
+    winhttp_network_fetcher_ = base::MakeRefCounted<winhttp::NetworkFetcher>(
+        winhttp_session_.get(), std::move(proxy_config));
+  }
+
+  winhttp_network_fetcher_->PostRequest(
+      url_, body_, std::string(), headers_,
+      /*fetch_started_callback=*/base::DoNothing(),
+      /*fetch_progress_callback=*/base::DoNothing(),
+      /*fetch_completed_callback=*/std::move(callback));
+}
+
+}  // namespace enterprise_connectors
diff --git a/chrome/browser/enterprise/connectors/device_trust/key_management/core/network/fetcher/win_network_fetcher_impl.h b/chrome/browser/enterprise/connectors/device_trust/key_management/core/network/fetcher/win_network_fetcher_impl.h
new file mode 100644
index 0000000..fce5c2e
--- /dev/null
+++ b/chrome/browser/enterprise/connectors/device_trust/key_management/core/network/fetcher/win_network_fetcher_impl.h
@@ -0,0 +1,40 @@
+// 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 CHROME_BROWSER_ENTERPRISE_CONNECTORS_DEVICE_TRUST_KEY_MANAGEMENT_CORE_NETWORK_FETCHER_WIN_NETWORK_FETCHER_IMPL_H_
+#define CHROME_BROWSER_ENTERPRISE_CONNECTORS_DEVICE_TRUST_KEY_MANAGEMENT_CORE_NETWORK_FETCHER_WIN_NETWORK_FETCHER_IMPL_H_
+
+#include <string>
+
+#include "base/containers/flat_map.h"
+#include "chrome/browser/enterprise/connectors/device_trust/key_management/core/network/fetcher/win_network_fetcher.h"
+#include "components/winhttp/network_fetcher.h"
+#include "components/winhttp/scoped_hinternet.h"
+#include "url/gurl.h"
+
+namespace enterprise_connectors {
+
+// Implementation of the WinNetworkFetcher interface.
+class WinNetworkFetcherImpl : public WinNetworkFetcher {
+ public:
+  WinNetworkFetcherImpl(const GURL& url,
+                        const std::string& body,
+                        const base::flat_map<std::string, std::string> headers);
+
+  ~WinNetworkFetcherImpl() override;
+
+  // WinNetworkFetcher:
+  void Fetch(FetchCompletedCallback callback) override;
+
+ private:
+  GURL url_;
+  std::string body_;
+  base::flat_map<std::string, std::string> headers_;
+  winhttp::ScopedHInternet winhttp_session_;
+  scoped_refptr<winhttp::NetworkFetcher> winhttp_network_fetcher_;
+};
+
+}  // namespace enterprise_connectors
+
+#endif  // CHROME_BROWSER_ENTERPRISE_CONNECTORS_DEVICE_TRUST_KEY_MANAGEMENT_CORE_NETWORK_FETCHER_WIN_NETWORK_FETCHER_IMPL_H_
diff --git a/chrome/browser/flag-metadata.json b/chrome/browser/flag-metadata.json
index 34518c9..b1e8245 100644
--- a/chrome/browser/flag-metadata.json
+++ b/chrome/browser/flag-metadata.json
@@ -688,6 +688,11 @@
     "expiry_milestone": 110
   },
   {
+    "name": "borealis-storage-ballooning",
+    "owners": [ "danielng" ],
+    "expiry_milestone": 110
+  },
+  {
     "name": "broker-file-operations-on-disk-cache-in-network-service",
     "owners": [ "yhirano", "network-service-dev" ],
     "expiry_milestone": 120
@@ -3830,12 +3835,12 @@
   {
     "name": "intent-chip-app-icon",
     "owners": ["tsergeant", "chromeos-apps-foundation-team@google.com"],
-    "expiry_milestone": 105
+    "expiry_milestone": 108
   },
   {
     "name": "intent-chip-skips-intent-picker",
     "owners": ["tsergeant", "chromeos-apps-foundation-team@google.com"],
-    "expiry_milestone": 105
+    "expiry_milestone": 108
   },
   {
     "name": "interest-feed-notice-card-auto-dismiss",
@@ -4088,14 +4093,19 @@
     "expiry_milestone": 108
   },
   {
+    "name": "link-capturing-auto-display-intent-picker",
+    "owners": [ "tsergeant", "chromeos-apps-foundation-team@google.com" ],
+    "expiry_milestone": 108
+  },
+  {
     "name": "link-capturing-infobar",
     "owners": ["tsergeant", "chromeos-apps-foundation-team@google.com"],
-    "expiry_milestone": 105
+    "expiry_milestone": 108
   },
   {
     "name": "link-capturing-ui-update",
     "owners": ["tsergeant", "chromeos-apps-foundation-team@google.com"],
-    "expiry_milestone": 105
+    "expiry_milestone": 108
   },
   {
     "name": "list-all-display-modes",
diff --git a/chrome/browser/flag_descriptions.cc b/chrome/browser/flag_descriptions.cc
index 9e823db..9f8e7b5 100644
--- a/chrome/browser/flag_descriptions.cc
+++ b/chrome/browser/flag_descriptions.cc
@@ -603,6 +603,11 @@
     "other reasons, including: administrator settings, device hardware "
     "capabilities, or other security measures.";
 
+const char kBorealisStorageBallooningName[] = "Borealis Storage Ballooning";
+const char kBorealisStorageBallooningDescription[] =
+    "Enables storage balloning for Borealis. This takes precedence over the "
+    "other Borealis Disk management flag.";
+
 const char kBypassAppBannerEngagementChecksName[] =
     "Bypass user engagement checks";
 const char kBypassAppBannerEngagementChecksDescription[] =
@@ -5837,6 +5842,13 @@
     "When enabled, the intent chip in the Omnibox will show the app icon for "
     "the app which can handle the current URL.";
 
+const char kLinkCapturingAutoDisplayIntentPickerName[] =
+    "Enable auto-display of intent picker bubble";
+const char kLinkCapturingAutoDisplayIntentPickerDescription[] =
+    "When enabled, the intent picker bubble will automatically display when "
+    "clicking a link which can be opened in installed apps. Only applies when "
+    "'Enable updated link capturing UI' is enabled.";
+
 const char kLinkCapturingInfoBarName[] = "Enable link capturing info bar";
 const char kLinkCapturingInfoBarDescription[] =
     "Enables an info bar which appears when launching a web app through the "
diff --git a/chrome/browser/flag_descriptions.h b/chrome/browser/flag_descriptions.h
index 25ad924c..16c8585 100644
--- a/chrome/browser/flag_descriptions.h
+++ b/chrome/browser/flag_descriptions.h
@@ -324,6 +324,9 @@
 extern const char kBorealisPermittedName[];
 extern const char kBorealisPermittedDescription[];
 
+extern const char kBorealisStorageBallooningName[];
+extern const char kBorealisStorageBallooningDescription[];
+
 extern const char kBypassAppBannerEngagementChecksName[];
 extern const char kBypassAppBannerEngagementChecksDescription[];
 
@@ -3346,6 +3349,9 @@
 extern const char kIntentChipAppIconName[];
 extern const char kIntentChipAppIconDescription[];
 
+extern const char kLinkCapturingAutoDisplayIntentPickerName[];
+extern const char kLinkCapturingAutoDisplayIntentPickerDescription[];
+
 extern const char kLinkCapturingInfoBarName[];
 extern const char kLinkCapturingInfoBarDescription[];
 
diff --git a/chrome/browser/page_load_metrics/observers/core/ukm_page_load_metrics_observer.cc b/chrome/browser/page_load_metrics/observers/core/ukm_page_load_metrics_observer.cc
index db36fd5..ebcd095 100644
--- a/chrome/browser/page_load_metrics/observers/core/ukm_page_load_metrics_observer.cc
+++ b/chrome/browser/page_load_metrics/observers/core/ukm_page_load_metrics_observer.cc
@@ -1218,9 +1218,6 @@
   builder.Record(ukm::UkmRecorder::Get());
 
   base::UmaHistogramPercentage(
-      "Graphics.Smoothness.PerSession.AveragePercentDroppedFrames",
-      smoothness_data.avg_smoothness);
-  base::UmaHistogramPercentage(
       "Graphics.Smoothness.PerSession.95pctPercentDroppedFrames_1sWindow",
       smoothness_data.percentile_95);
   base::UmaHistogramPercentage(
diff --git a/chrome/browser/resources/chromeos/accessibility/chromevox/background/panel/panel_background.js b/chrome/browser/resources/chromeos/accessibility/chromevox/background/panel/panel_background.js
index c7652472..c12aba6 100644
--- a/chrome/browser/resources/chromeos/accessibility/chromevox/background/panel/panel_background.js
+++ b/chrome/browser/resources/chromeos/accessibility/chromevox/background/panel/panel_background.js
@@ -260,10 +260,12 @@
    */
   async waitForPanelCollapse_() {
     return new Promise(async resolve => {
-      const desktop = await new Promise(chrome.automation.getDesktop);
+      const desktop =
+          await new Promise((resolve) => chrome.automation.getDesktop(resolve));
       // Watch for a focus event outside the panel.
       const onFocus = event => {
-        if (event.target.docUrl.contains('chromevox/panel')) {
+        if (event.target.docUrl &&
+            event.target.docUrl.includes('chromevox/panel')) {
           return;
         }
 
diff --git a/chrome/browser/resources/chromeos/emoji_picker/BUILD.gn b/chrome/browser/resources/chromeos/emoji_picker/BUILD.gn
index d72d07d..31a5b56 100644
--- a/chrome/browser/resources/chromeos/emoji_picker/BUILD.gn
+++ b/chrome/browser/resources/chromeos/emoji_picker/BUILD.gn
@@ -196,6 +196,7 @@
     ":emoji_picker_api_proxy",
     ":emoji_search",
     ":events",
+    ":metadata_extension",
     ":store",
     ":text_group_button",
     ":trie",
@@ -289,6 +290,10 @@
   deps = [ ":trie" ]
 }
 
+js_library("metadata_extension") {
+  deps = [ ":types" ]
+}
+
 js_library("store") {
   deps = [ ":types" ]
 }
diff --git a/chrome/browser/resources/chromeos/emoji_picker/emoji_picker.js b/chrome/browser/resources/chromeos/emoji_picker/emoji_picker.js
index 0b506d523..395fb4e0 100644
--- a/chrome/browser/resources/chromeos/emoji_picker/emoji_picker.js
+++ b/chrome/browser/resources/chromeos/emoji_picker/emoji_picker.js
@@ -18,10 +18,6 @@
 import {RecentlyUsedStore} from './store.js';
 import {CategoryData, CategoryEnum, EmojiGroup, EmojiGroupData, EmojiVariants, SubcategoryData, EmojiGroupElement} from './types.js';
 
-const EMOJI_ORDERING_JSON_TEMPLATE = '/emoji_14_0_ordering';
-const EMOTICON_ORDERING_JSON_TEMPLATE = '/emoticon_ordering.json';
-
-
 export class EmojiPicker extends PolymerElement {
   static get is() {
     return 'emoji-picker';
@@ -31,12 +27,20 @@
     return html`{__html_template__}`;
   }
 
+  static configs() {
+    return {
+      'dataUrls': {
+        [CategoryEnum.EMOJI]: [
+          '/emoji_14_0_ordering_start.json',
+          '/emoji_14_0_ordering_remaining.json',
+        ],
+        [CategoryEnum.EMOTICON]: ['/emoticon_ordering.json'],
+      },
+    };
+  }
+
   static get properties() {
     return {
-      /** {string} */
-      emojiDataUrl: {type: String, value: EMOJI_ORDERING_JSON_TEMPLATE},
-      /** {string} */
-      emoticonDataUrl: {type: String, value: EMOTICON_ORDERING_JSON_TEMPLATE},
       /** @private {CategoryEnum} */
       category: {type: String, value: 'emoji', observer: 'onCategoryChanged'},
       /** @type {string} */
@@ -114,6 +118,9 @@
         ev => this.onShowEmojiVariants(
             /** @type {!events.EmojiVariantsShownEvent} */ (ev)));
     this.addEventListener('click', () => this.hideDialogs());
+    this.addEventListener(
+      events.CATEGORY_BUTTON_CLICK,
+      ev => this.onCategoryButtonClick(ev.detail.categoryName));
   }
 
   /**
@@ -141,34 +148,21 @@
   ready() {
     super.ready();
 
-    // TODO(b/211520561): Handle loading of emoticon data.
-    const initializationPromise = Promise.all([
-      this.apiProxy_.getFeatureList().then(
-          (response) => this.setActiveFeatures(response.featureList)),
-      this.fetchOrderingData(
-          this.emojiDataUrl + '_start.json').then(
-          data => this.onEmojiDataLoaded(data)),
-      this.apiProxy_.isIncognitoTextField().then(
-          (response) => this.initHistoryUI(response.incognito))
-    ]);
+    // Ensure first category is emoji for compatibility with V1.
+    if (CATEGORY_METADATA[0].name !== CategoryEnum.EMOJI) {
+      throw new Error(
+        `First category is ${CATEGORY_METADATA[0].name} but must be 'emoji'.`);
+    }
 
-    initializationPromise.then(() => {
-      afterNextRender(this, () => {
-        this.apiProxy_.showUI();
-      });
-      if (this.v2Enabled) {
-        this.addEventListener(
-            events.CATEGORY_BUTTON_CLICK,
-            ev => this.onCategoryButtonClick(ev.detail.categoryName));
-        this.addEventListener(events.EMOJI_REMAINING_DATA_LOADED, () => {
-          this.fetchOrderingData(this.emoticonDataUrl).then((data) => {
-            this.updateCategoryData(data, CategoryEnum.EMOTICON, true);
-            this.dispatchEvent(events.createCustomEvent(
-              events.V2_CONTENT_LOADED));
-          });
-        });
-      }
-    });
+    const dataUrls = EmojiPicker.configs().dataUrls;
+    // Create an ordered list of category and urls based on the order that
+    // categories need to appear in the UIs.
+    const categoryDataUrls = CATEGORY_METADATA
+        .filter(item => dataUrls[item.name])
+        .map(item => ({'category': item.name, 'urls': dataUrls[item.name]}));
+
+    // Fetch and process all the data.
+    this.fetchAndProcessData(categoryDataUrls);
 
     this.updateStyles({
       '--emoji-group-button-size': constants.EMOJI_GROUP_SIZE_PX,
@@ -193,6 +187,89 @@
   }
 
   /**
+   * Fetches data and updates all the variables that are required to render
+   * EmojiPicker UI. This function serves as the main entry for creating and
+   * managing async calls dealing with fetching data and rendering UI in the
+   * correct order. These include:
+   *   * Feature list
+   *   * Incognito state
+   *   * Category data (emoji, emoticon, etc.)
+   *
+   *
+   * @param {Array<{category: CategoryEnum, urls: Array<string>}>}
+   *    categoryDataUrls An array of categories and their corresponding data
+   *    urls.
+   */
+  async fetchAndProcessData(categoryDataUrls) {
+    // Create a flat list of urls (with details) that need to be fetched and
+    // rendered sequentially.
+    const dataUrls = categoryDataUrls.flatMap(
+      item =>
+        // Create url details of the category.
+        item.urls.map(
+          (url, index) => ({
+              'category': item.category,
+              'url': url,
+              'categoryLastPartition':
+                  index === item.urls.length - 1,
+          })
+        )
+    );
+
+    // Update feature list, incognito state and fetch data of first url.
+    const initialData = await Promise.all(
+      [
+        this.fetchOrderingData(dataUrls[0].url),
+        this.apiProxy_.getFeatureList().then(
+            (response) => this.setActiveFeatures(response.featureList)),
+        this.apiProxy_.isIncognitoTextField().then(
+            (response) => this.initHistoryUI(response.incognito)),
+      ],
+    ).then(values => values[0]); // Map to the fetched data only.
+
+    // Update UI and relevant features based on the initial data.
+    this.updateCategoryData(
+      initialData, dataUrls[0].category,
+      dataUrls[0].categoryLastPartition,
+      !this.v2Enabled && dataUrls[0].categoryLastPartition);
+
+    // Show the UI after the initial data is rendered.
+    afterNextRender(this, () => {
+      this.apiProxy_.showUI();
+    });
+
+    // Filter data urls based on the version. Remove the first url as it is
+    // already added and shown.
+    const remainingData = this.v2Enabled ?
+      dataUrls.slice(1) :
+      dataUrls.slice(1).filter(
+        item => item.category === dataUrls[0].category);
+
+    let prevFetchPromise = Promise.resolve();
+    let prevRenderPromise = Promise.resolve();
+
+    // Create a chain of promises for fetching and rendering data of
+    // different categories in the correct order.
+    remainingData.forEach(
+      (dataUrl, index) => {
+        // Fetch the url only after the previous url is fetched.
+        prevFetchPromise = prevFetchPromise.then(() =>
+          this.fetchOrderingData(dataUrl.url));
+        // Update category data after the data is fetched and the previous
+        // category data update/rendering completed successfully.
+        prevRenderPromise = Promise.all(
+          [prevRenderPromise, prevFetchPromise]
+        ).then((values) => values[1]).then((data) =>
+          this.updateCategoryData(
+            data, dataUrl.category, dataUrl.categoryLastPartition,
+            index === remainingData.length - 1
+          )
+        );
+      }
+    );
+  }
+
+  /**
    * @param {!Array<!Feature>} featureList
    */
   setActiveFeatures(featureList) {
@@ -220,10 +297,16 @@
    * @param {!EmojiGroupData} data The category data to be processes.
    *    Note: category field will be added to the each EmojiGroup in data.
    * @param {!CategoryEnum} category Category of the data.
+   * @param {boolean} categoryLastPartition True if no future data updates
+   *      are expected for the given category.
    * @param {boolean} lastPartition True if no future data updates are
    *      expected.
+   *
+   * @fires CustomEvent#`EMOJI_PICKER_READY`
+   * @fires CustomEvent#`CATEGORY_DATA_LOADED``
    */
-  updateCategoryData(data, category, lastPartition=false) {
+  updateCategoryData(data, category, categoryLastPartition=false,
+      lastPartition=false) {
     // TODO(b/233270589): Add category to the underlying data.
     // Add category field to the data.
     data.forEach((emojiGroup) => {
@@ -242,24 +325,56 @@
 
     // Convert the emoji group data to elements.
     const baseIndex = this.categoriesGroupElements.length;
-    const categoriesGroupElements = data.map(
-      (emojiGroup, index) =>
+    const categoriesGroupElements = [];
+
+    data.forEach((emojiGroup, index) => {
+      const tabIndex = baseIndex + index;
+      const tabCategory = V2_SUBCATEGORY_TABS[tabIndex].category;
+      categoriesGroupElements.push(
         this.createEmojiGroupElement(
-          emojiGroup.emoji,
-          this.getEmojiGroupPreference(category),
-          false,
-          baseIndex + index
-        )
-    );
+          emojiGroup.emoji, this.getEmojiGroupPreference(category),
+          false, tabIndex)
+      );
+
+      // TODO(b/233271528): Remove assert after removing metadata.
+      // Ensure category of emoji groups match tab entries.
+      console.assert(
+        tabCategory === category,
+        `Tab category at index ${tabIndex} is ${tabCategory} ` +
+        `but corresponding group category in data is ${category}.`);
+    });
 
     // Update emoji data for other features such as search.
     this.push('categoriesData', ...data);
     // Update group elements for the emoji picker.
     this.push('categoriesGroupElements', ...categoriesGroupElements);
 
-    // If all data is fetched, trigger search index.
+    if (categoryLastPartition) {
+      this.dispatchEvent(events.createCustomEvent(
+        events.CATEGORY_DATA_LOADED, {'category': category}));
+    }
+
     if (lastPartition) {
+      // If all data is fetched, trigger search index.
       this.searchLazyIndexing = false;
+
+      // TODO(b/233271528): Remove the following after removing metadata.
+      const numEmojiGroups = this.categoriesGroupElements.length;
+      const dataMatchSubcategoryTabs = this.v2Enabled ?
+        numEmojiGroups === V2_SUBCATEGORY_TABS.length :
+        V2_SUBCATEGORY_TABS[numEmojiGroups].category !== CategoryEnum.EMOJI;
+
+      // Ensure hard-coded tabs match the loaded data.
+      console.assert(dataMatchSubcategoryTabs,
+        `The Number of tabs "${V2_SUBCATEGORY_TABS.length}" does not match ` +
+        ` the number of loaded groups "${numEmojiGroups}".`
+      );
+
+      afterNextRender(this, () => {
+          this.dispatchEvent(events.createCustomEvent(
+            events.EMOJI_PICKER_READY, {'v2Enabled': this.v2Enabled}));
+        }
+      );
     }
   }
 
@@ -844,26 +959,6 @@
   }
 
   /**
-   * @param {!EmojiGroupData} data
-   */
-  onEmojiDataLoaded(data) {
-    // There is quite a lot of emoji data to load which causes slow rendering.
-    // Just load the first emoji category immediately, and defer loading of the
-    // other categories (which will be off screen).
-    this.updateCategoryData([data[0]], CategoryEnum.EMOJI);
-    afterNextRender(
-        this,
-        () => this.fetchOrderingData(`${this.emojiDataUrl}_remaining.json`)
-                  .then(data => this.onEmojiDataLoadedRemaining(data)));
-  }
-
-  onEmojiDataLoadedRemaining(data) {
-    this.updateCategoryData(data, CategoryEnum.EMOJI, !this.v2Enabled);
-    this.dispatchEvent(events.createCustomEvent(
-      events.EMOJI_REMAINING_DATA_LOADED));
-  }
-
-  /**
    * Triggers when category property changes
    * @param {string} newCategoryName
    */
diff --git a/chrome/browser/resources/chromeos/emoji_picker/events.js b/chrome/browser/resources/chromeos/emoji_picker/events.js
index a404d7a..0738ecc7 100644
--- a/chrome/browser/resources/chromeos/emoji_picker/events.js
+++ b/chrome/browser/resources/chromeos/emoji_picker/events.js
@@ -40,18 +40,27 @@
 export const EMOJI_VARIANTS_SHOWN = 'emoji-variants-shown';
 
 /**
- * @typedef {!CustomEvent}
+ * @typedef {!CustomEvent<{category: string}>}
  */
-export let EmojiDataLoadedEvent;
-
-export const EMOJI_DATA_LOADED = 'emoji-data-loaded';
+export let CategoryDataLoadEvent;
 
 /**
- * @typedef {!CustomEvent}
+ * The event that data of a category is fetched and processed for rendering.
+ * Note: this event does not indicate if rendering of the category data is
+ * completed or not.
  */
-export let EmojiRemainingDataLoadedEvent;
+export const CATEGORY_DATA_LOADED = 'category-data-loaded';
 
-export const EMOJI_REMAINING_DATA_LOADED = 'emoji-data-remaining-loaded';
+/**
+ * @typedef {!CustomEvent<{v2Enabled: boolean}>}
+ */
+export let EmojiPickerReadyEvent;
+
+/**
+ * The event that all the data are loaded and rendered and all the
+ * emoji-picker functionalities are ready to use.
+ */
+export const EMOJI_PICKER_READY = 'emoji-picker-ready';
 
 /**
  * @typedef {!CustomEvent}
@@ -61,13 +70,6 @@
 export const EMOJI_CLEAR_RECENTS_CLICK = 'emoji-clear-recents-click';
 
 /**
- *
- * @typedef {!CustomEvent}
- */
-export let V2ContentLoadedEvent;
-
-export const V2_CONTENT_LOADED = 'v2-content-loaded';
-/**
  * Constructs a CustomEvent with the given event type and details.
  * The event will bubble up through elements and components.
  *
diff --git a/chrome/browser/resources/chromeos/emoji_picker/metadata_extension.js b/chrome/browser/resources/chromeos/emoji_picker/metadata_extension.js
index 1271cb0..a65f95c 100644
--- a/chrome/browser/resources/chromeos/emoji_picker/metadata_extension.js
+++ b/chrome/browser/resources/chromeos/emoji_picker/metadata_extension.js
@@ -2,8 +2,72 @@
 // Use of this source code is governed by a BSD-style license that can be
 // found in the LICENSE file.
 
+
+/**
+ * TODO(b/233271528): Remove metadata_extension module.
+ * This module includes tab details which is better to be extracted dynamically
+ * from the emoji group data directly.
+ */
+
+
+import {SubcategoryData} from './types.js';
+
 const RECENTLY_USED_NAME = 'Recently used';
 
+/**
+ * Creates a list of tabs with all required information for rendering given
+ * category orders and basic info of each tab. It also adds tabs for "Recently
+ * used" group as the first tab of each category.
+ *
+ * @param {!Array<string>} categories List of categories. The order in the
+ *    list determines the order of the tabs in the output.
+ * @param {!Object<string, Array<{name: !string, pagination: ?number,
+ *    icon: ?string}>>} categoryBaseEmojis A mapping from each category to
+ *    its list of basic tabs info.
+ * @returns {!Array<!SubcategoryData>} List of tabs.
+ */
+function _MakeGroupTabs(categories, categoryBaseEmojis) {
+  const groupTabs = [];
+  let groupId = 0;
+
+  // TODO(b/216190190): Change groupId to number type.
+  for (const category of categories) {
+    // Add recently used tab.
+    groupTabs.push(
+      {
+        name: RECENTLY_USED_NAME,
+        icon: 'emoji_picker:schedule',
+        category: category,
+        groupId: `${category}-history`,
+        active: false,
+        disabled: true,
+        pagination: 1,
+      }
+    );
+    let pagination = 1;
+    categoryBaseEmojis[category].forEach(
+      tab => {
+        // Update pagination if provided.
+        pagination = tab.pagination || pagination;
+        // Add new tab.
+        groupTabs.push(
+          {
+            name: tab.name,
+            icon: tab.icon,
+            category: category,
+            pagination: pagination,
+            groupId: groupId.toString(),
+            active: false,
+            disabled: false,
+          }
+        );
+        groupId ++;
+      }
+    );
+  }
+  return groupTabs;
+}
+
 export const CATEGORY_METADATA = [
   {
     name: 'emoji',
@@ -18,237 +82,80 @@
   },
 ];
 
-/**
- * The name attributes below are used to label the group buttons.
- * The ordering group names are used for the group headings in the emoji
- * picker.
-*/
-// TODO(b/216190190): Change groupId to number type.
-// TODO(b/233271528): Remove the list and load it from the input data.
-export const EMOJI_GROUP_TABS = [
-  {
-    name: RECENTLY_USED_NAME,
-    icon: 'emoji_picker:schedule',
-    category: 'emoji',
-    groupId: 'emoji-history',
-    active: false,
-    disabled: true,
-    pagination: 1
-  },
-  {
-    name: 'Smileys & Emotions',
-    icon: 'emoji_picker:insert_emoticon',
-    category: 'emoji',
-    groupId: '0',
-    active: false,
-    disabled: false
-  },
-  {
-    name: 'People',
-    icon: 'emoji_picker:emoji_people',
-    category: 'emoji',
-    groupId: '1',
-    active: false,
-    disabled: false
-  },
-  {
-    name: 'Animals & Nature',
-    icon: 'emoji_picker:emoji_nature',
-    category: 'emoji',
-    groupId: '2',
-    active: false,
-    disabled: false
-  },
-  {
-    name: 'Food & Drink',
-    icon: 'emoji_picker:emoji_food_beverage',
-    category: 'emoji',
-    groupId: '3',
-    active: false,
-    disabled: false
-  },
-  {
-    name: 'Travel & Places',
-    icon: 'emoji_picker:emoji_transportation',
-    category: 'emoji',
-    groupId: '4',
-    active: false,
-    disabled: false
-  },
-  {
-    name: 'Activities & Events',
-    icon: 'emoji_picker:emoji_events',
-    category: 'emoji',
-    groupId: '5',
-    active: false,
-    disabled: false
-  },
-  {
-    name: 'Objects',
-    icon: 'emoji_picker:emoji_objects',
-    category: 'emoji',
-    groupId: '6',
-    active: false,
-    disabled: false
-  },
-  {
-    name: 'Symbols',
-    icon: 'emoji_picker:emoji_symbols',
-    category: 'emoji',
-    groupId: '7',
-    active: false,
-    disabled: false
-  },
-  {
-    name: 'Flags',
-    icon: 'emoji_picker:flag',
-    category: 'emoji',
-    groupId: '8',
-    active: false,
-    disabled: false
-  },
-];
-
-// TODO(b/216190190): Change groupId to number type.
-// TODO(b/233271528): Remove the list and load it from the input data.
-export const EMOTICON_GROUP_TABS = [
-  {
-    name: RECENTLY_USED_NAME,
-    icon: 'emoji_picker:schedule',
-    category: 'emoticon',
-    groupId: 'emoticon-history',
-    active: false,
-    disabled: true,
-    pagination: 1
-  },
-  {
-    name: 'Classic',
-    category: 'emoticon',
-    groupId: '9',
-    active: false,
-    disabled: false,
-    pagination: 1
-  },
-  {
-    name: 'Smiling',
-    category: 'emoticon',
-    groupId: '10',
-    active: false,
-    disabled: false,
-    pagination: 1
-  },
-  {
-    name: 'Loving',
-    category: 'emoticon',
-    groupId: '11',
-    active: false,
-    disabled: false,
-    pagination: 1
-  },
-  {
-    name: 'Hugging',
-    category: 'emoticon',
-    groupId: '12',
-    active: false,
-    disabled: false,
-    pagination: 1
-  },
-  {
-    name: 'Flexing',
-    category: 'emoticon',
-    groupId: '13',
-    active: false,
-    disabled: false,
-    pagination: 1
-  },
-  {
-    name: 'Animals',
-    category: 'emoticon',
-    groupId: '14',
-    active: false,
-    disabled: false,
-    pagination: 2
-  },
-  {
-    name: 'Surprising',
-    category: 'emoticon',
-    groupId: '15',
-    active: false,
-    disabled: false,
-    pagination: 2
-  },
-  {
-    name: 'Dancing',
-    category: 'emoticon',
-    groupId: '16',
-    active: false,
-    disabled: false,
-    pagination: 2
-  },
-  {
-    name: 'Shrugging',
-    category: 'emoticon',
-    groupId: '17',
-    active: false,
-    disabled: false,
-    pagination: 2
-  },
-  {
-    name: 'Table Flipping',
-    category: 'emoticon',
-    groupId: '18',
-    active: false,
-    disabled: false,
-    pagination: 3
-  },
-  {
-    name: 'Disapproving',
-    category: 'emoticon',
-    groupId: '19',
-    active: false,
-    disabled: false,
-    pagination: 3
-  },
-  {
-    name: 'Crying',
-    category: 'emoticon',
-    groupId: '20',
-    active: false,
-    disabled: false,
-    pagination: 3
-  },
-  {
-    name: 'Worrying',
-    category: 'emoticon',
-    groupId: '21',
-    active: false,
-    disabled: false,
-    pagination: 4
-  },
-  {
-    name: 'Pointing',
-    category: 'emoticon',
-    groupId: '22',
-    active: false,
-    disabled: false,
-    pagination: 4
-  },
-  {
-    name: 'Sparkling',
-    category: 'emoticon',
-    groupId: '23',
-    active: false,
-    disabled: false,
-    pagination: 4
-  },
-];
-
-// TODO(b/233271528): The concat order must be based on CATEGORY_METADATA.
-export const V2_SUBCATEGORY_TABS =
-    EMOJI_GROUP_TABS.concat(EMOTICON_GROUP_TABS);
-
-// TODO(b/233271528): This should be calculated based on concat order.
-export const V2_TABS_CATEGORY_START_INDEX = {
-  'emoji': 0,
-  'emoticon': EMOJI_GROUP_TABS.length,
+const CATEGORY_TABS = {
+  'emoji': [
+    {
+      name: 'Smileys & Emotions',
+      icon: 'emoji_picker:insert_emoticon',
+      pagination: 1,
+    },
+    {
+      name: 'People',
+      icon: 'emoji_picker:emoji_people',
+    },
+    {
+      name: 'Animals & Nature',
+      icon: 'emoji_picker:emoji_nature',
+    },
+    {
+      name: 'Food & Drink',
+      icon: 'emoji_picker:emoji_food_beverage',
+    },
+    {
+      name: 'Travel & Places',
+      icon: 'emoji_picker:emoji_transportation',
+    },
+    {
+      name: 'Activities & Events',
+      icon: 'emoji_picker:emoji_events',
+    },
+    {
+      name: 'Objects',
+      icon: 'emoji_picker:emoji_objects',
+    },
+    {
+      name: 'Symbols',
+      icon: 'emoji_picker:emoji_symbols',
+    },
+    {
+      name: 'Flags',
+      icon: 'emoji_picker:flag',
+    },
+  ],
+  'emoticon': [
+    {name: 'Classic', pagination: 1,},
+    {name: 'Smiling',},
+    {name: 'Loving',},
+    {name: 'Hugging',},
+    {name: 'Flexing',},
+    {name: 'Animals', pagination: 2,},
+    {name: 'Surprising',},
+    {name: 'Dancing', },
+    {name: 'Shrugging',},
+    {name: 'Table Flipping', pagination: 3,},
+    {name: 'Disapproving',},
+    {name: 'Crying',},
+    {name: 'Worrying', pagination: 4,},
+    {name: 'Pointing',},
+    {name: 'Sparkling',},
+  ],
 };
+
+// TODO(b/233271528): Remove the list and load it from the input data.
+/**
+ * The list of tabs based on the order of category buttons and basic tab info
+ * of each category.
+ */
+export const V2_SUBCATEGORY_TABS = _MakeGroupTabs(
+  CATEGORY_METADATA.map(item => item.name),
+  CATEGORY_TABS,
+);
+
+// A mapping from each category to the index of their first tab.
+export const V2_TABS_CATEGORY_START_INDEX = Object.fromEntries(
+  new Map(V2_SUBCATEGORY_TABS.map(
+    (item, index) => [item.category, index]).reverse()
+  ).entries()
+);
+
+export const EMOJI_GROUP_TABS = _MakeGroupTabs(['emoji'], CATEGORY_TABS);
\ No newline at end of file
diff --git a/chrome/browser/resources/chromeos/notification_tester/BUILD.gn b/chrome/browser/resources/chromeos/notification_tester/BUILD.gn
index a2e18c03..61ec361 100644
--- a/chrome/browser/resources/chromeos/notification_tester/BUILD.gn
+++ b/chrome/browser/resources/chromeos/notification_tester/BUILD.gn
@@ -17,7 +17,6 @@
     "index.html",
     "form_constants.js",
     "types.js",
-    "images/chromeos_logo_main.png",
   ]
   input_files_base_dir = rebase_path(".", "//")
 
diff --git a/chrome/browser/resources/chromeos/notification_tester/form_constants.js b/chrome/browser/resources/chromeos/notification_tester/form_constants.js
index d836c52..8b0e03e9 100644
--- a/chrome/browser/resources/chromeos/notification_tester/form_constants.js
+++ b/chrome/browser/resources/chromeos/notification_tester/form_constants.js
@@ -118,7 +118,14 @@
   ],
   IMAGE_OPTIONS: [
     {displayText: 'No Image', value: 'none'},
-    {displayText: 'CrOS Logo (1218x317, PNG)', value: 'chromeos_logo_main'},
+    {
+      displayText: 'Google Logo (PNG, 180 x 68)',
+      value: 'google_logo_small_png'
+    },
+    {
+      displayText: 'Chromium Logo (PNG, 192 x 192)',
+      value: 'chromium_logo_large_png'
+    },
   ],
   URL_OPTIONS: [
     {displayText: 'URL (Left-to-Right)', value: 'https://testurl.xyz'},
diff --git a/chrome/browser/resources/chromeos/notification_tester/images/chromeos_logo_main.png b/chrome/browser/resources/chromeos/notification_tester/images/chromeos_logo_main.png
deleted file mode 100644
index 1fc30eab..0000000
--- a/chrome/browser/resources/chromeos/notification_tester/images/chromeos_logo_main.png
+++ /dev/null
Binary files differ
diff --git a/chrome/browser/sessions/tab_restore_service_browsertest.cc b/chrome/browser/sessions/tab_restore_service_browsertest.cc
index 10d2ac7..078fbd4 100644
--- a/chrome/browser/sessions/tab_restore_service_browsertest.cc
+++ b/chrome/browser/sessions/tab_restore_service_browsertest.cc
@@ -2,13 +2,8 @@
 // Use of this source code is governed by a BSD-style license that can be
 // found in the LICENSE file.
 
-// TODO(jamescook): Why does this test run on all Aura platforms, instead of
-// only Chrome OS or Ash?
-#if defined(USE_AURA)
-
 #include "components/sessions/core/tab_restore_service.h"
 
-#include "build/chromeos_buildflags.h"
 #include "chrome/browser/ash/system_web_apps/test_support/test_system_web_app_installation.h"
 #include "chrome/browser/profiles/profile.h"
 #include "chrome/browser/sessions/tab_restore_service_factory.h"
@@ -26,11 +21,7 @@
  public:
   TabRestoreServiceImplBrowserTest()
       : test_system_web_app_installation_(
-            ash::TestSystemWebAppInstallation::SetUpTabbedMultiWindowApp()) {
-#if BUILDFLAG(IS_CHROMEOS_LACROS)
-    web_app::EnableSystemWebAppsInLacrosForTesting();
-#endif  // BUILDFLAG(IS_CHROMEOS_LACROS)
-  }
+            ash::TestSystemWebAppInstallation::SetUpTabbedMultiWindowApp()) {}
 
  protected:
   std::unique_ptr<ash::TestSystemWebAppInstallation>
@@ -90,5 +81,3 @@
   EXPECT_EQ(app_browser->app_name(), restored_window->app_name);
   EXPECT_EQ(1U, restored_window->tabs.size());
 }
-
-#endif  // defined(USE_AURA)
diff --git a/chrome/browser/ui/views/frame/system_web_app_non_client_frame_view_browsertest.cc b/chrome/browser/ui/views/frame/system_web_app_non_client_frame_view_browsertest.cc
index 90578dc..732d86f 100644
--- a/chrome/browser/ui/views/frame/system_web_app_non_client_frame_view_browsertest.cc
+++ b/chrome/browser/ui/views/frame/system_web_app_non_client_frame_view_browsertest.cc
@@ -6,6 +6,7 @@
 
 #include "build/chromeos_buildflags.h"
 #include "chrome/browser/ash/system_web_apps/test_support/system_web_app_browsertest_base.h"
+#include "chrome/browser/ash/system_web_apps/types/system_web_app_type.h"
 #include "chrome/browser/ui/views/frame/browser_view.h"
 #include "chrome/browser/ui/views/web_apps/frame_toolbar/web_app_frame_toolbar_view.h"
 #include "chrome/browser/ui/web_applications/test/web_app_browsertest_util.h"
@@ -13,14 +14,9 @@
 #include "chrome/test/base/ui_test_utils.h"
 #include "content/public/test/browser_test.h"
 
-#if !BUILDFLAG(IS_CHROMEOS_LACROS)
-#include "chrome/browser/ash/system_web_apps/types/system_web_app_type.h"
-#endif
-
 using SystemWebAppNonClientFrameViewBrowserTest =
     ash::SystemWebAppManagerBrowserTest;
 
-#if !BUILDFLAG(IS_CHROMEOS_LACROS)
 // System Web Apps don't get the web app menu button.
 IN_PROC_BROWSER_TEST_P(SystemWebAppNonClientFrameViewBrowserTest,
                        HideWebAppMenuButton) {
@@ -51,4 +47,3 @@
 
 INSTANTIATE_SYSTEM_WEB_APP_MANAGER_TEST_SUITE_REGULAR_PROFILE_P(
     SystemWebAppNonClientFrameViewBrowserTest);
-#endif  // !BUILDFLAG(IS_CHROMEOS_LACROS)
diff --git a/chrome/browser/ui/views/location_bar/intent_chip_button.cc b/chrome/browser/ui/views/location_bar/intent_chip_button.cc
index 9f6a340d..5f1a8c8 100644
--- a/chrome/browser/ui/views/location_bar/intent_chip_button.cc
+++ b/chrome/browser/ui/views/location_bar/intent_chip_button.cc
@@ -96,7 +96,7 @@
   content::WebContents* web_contents =
       delegate_->GetWebContentsForPageActionIconView();
   const GURL& url = web_contents->GetURL();
-  apps::ShowIntentPickerBubble(web_contents, url);
+  apps::ShowIntentPickerOrLaunchApp(web_contents, url);
 }
 
 IntentPickerTabHelper* IntentChipButton::GetTabHelper() const {
diff --git a/chrome/browser/ui/views/location_bar/intent_chip_button_browsertest.cc b/chrome/browser/ui/views/location_bar/intent_chip_button_browsertest.cc
index 8dd954f..89f8be8 100644
--- a/chrome/browser/ui/views/location_bar/intent_chip_button_browsertest.cc
+++ b/chrome/browser/ui/views/location_bar/intent_chip_button_browsertest.cc
@@ -4,7 +4,10 @@
 
 #include "base/test/bind.h"
 #include "base/test/scoped_feature_list.h"
+#include "build/build_config.h"
 #include "build/chromeos_buildflags.h"
+#include "chrome/browser/apps/app_service/app_service_proxy.h"
+#include "chrome/browser/apps/app_service/app_service_proxy_factory.h"
 #include "chrome/browser/apps/intent_helper/intent_picker_features.h"
 #include "chrome/browser/feature_engagement/tracker_factory.h"
 #include "chrome/browser/ui/browser_commands.h"
@@ -19,6 +22,7 @@
 #include "chrome/browser/web_applications/user_display_mode.h"
 #include "chrome/browser/web_applications/web_app_id.h"
 #include "chrome/browser/web_applications/web_app_install_info.h"
+#include "chrome/test/base/ui_test_utils.h"
 #include "components/feature_engagement/public/feature_constants.h"
 #include "components/feature_engagement/test/test_tracker.h"
 #include "content/public/browser/web_contents.h"
@@ -28,6 +32,12 @@
 #include "ui/views/test/button_test_api.h"
 #include "ui/views/widget/any_widget_observer.h"
 
+#if BUILDFLAG(IS_CHROMEOS)
+#include "chrome/browser/web_applications/web_app_utils.h"
+#include "components/services/app_service/public/cpp/features.h"
+#include "components/services/app_service/public/cpp/preferred_apps_test_util.h"
+#endif
+
 #if BUILDFLAG(IS_CHROMEOS_LACROS)
 #include "chromeos/crosapi/mojom/app_service.mojom.h"
 #include "chromeos/lacros/lacros_service.h"
@@ -37,10 +47,8 @@
     : public web_app::WebAppNavigationBrowserTest {
  public:
   IntentChipButtonBrowserTest() {
-    scoped_feature_list_.InitWithFeatures(
-        /*enabled_features=*/{apps::features::kLinkCapturingUiUpdate,
-                              apps::features::kIntentChipSkipsPicker},
-        /*disabled_features=*/{});
+    scoped_feature_list_.InitAndEnableFeature(
+        apps::features::kLinkCapturingUiUpdate);
   }
 
   void TearDownOnMainThread() override {
@@ -116,19 +124,16 @@
 
   const GURL in_scope_url =
       https_server().GetURL(GetAppUrlHost(), GetInScopeUrlPath());
-  content::WebContents* web_contents =
-      browser()->tab_strip_model()->GetActiveWebContents();
-  ClickLinkAndWait(web_contents, in_scope_url, LinkTarget::SELF, "");
+  ASSERT_TRUE(ui_test_utils::NavigateToURL(browser(), in_scope_url));
 
   EXPECT_TRUE(GetIntentChip()->GetVisible());
 
-  // Clicking the chip should immediately launch the app.
-
+  views::NamedWidgetShownWaiter waiter(views::test::AnyWidgetTestPasskey{},
+                                       "IntentPickerBubbleView");
   ClickIntentChip();
 
-  Browser* app_browser = BrowserList::GetInstance()->GetLastActive();
-  EXPECT_TRUE(web_app::AppBrowserController::IsForWebApp(app_browser,
-                                                         test_web_app_id()));
+  waiter.WaitIfNeededAndGet();
+  ASSERT_TRUE(IntentPickerBubbleView::intent_picker_bubble());
 }
 
 IN_PROC_BROWSER_TEST_F(IntentChipButtonBrowserTest,
@@ -140,9 +145,7 @@
 
   const GURL out_of_scope_url =
       https_server().GetURL(GetAppUrlHost(), GetOutOfScopeUrlPath());
-  content::WebContents* web_contents =
-      browser()->tab_strip_model()->GetActiveWebContents();
-  ClickLinkAndWait(web_contents, out_of_scope_url, LinkTarget::SELF, "");
+  ASSERT_TRUE(ui_test_utils::NavigateToURL(browser(), out_of_scope_url));
 
   EXPECT_FALSE(GetIntentChip()->GetVisible());
 }
@@ -173,6 +176,63 @@
   EXPECT_FALSE(intent_chip_button->GetVisible());
 }
 
+#if BUILDFLAG(IS_CHROMEOS)
+// Using the Intent Chip for an app which is set as preferred should launch
+// directly into the app. Preferred apps are only available on ChromeOS.
+IN_PROC_BROWSER_TEST_F(IntentChipButtonBrowserTest, OpensAppForPreferredApp) {
+  if (!HasRequiredAshVersionForLacros())
+    GTEST_SKIP() << "Ash version is too old to support Intent Picker";
+
+  InstallTestWebApp();
+  auto* proxy = apps::AppServiceProxyFactory::GetForProfile(profile());
+  proxy->SetSupportedLinksPreference(test_web_app_id());
+
+  // Wait for asynchronous preferred apps changes with lacros web apps and/or
+  // mojo app service.
+  if (web_app::IsWebAppsCrosapiEnabled() ||
+      !base::FeatureList::IsEnabled(
+          apps::kAppServicePreferredAppsWithoutMojom)) {
+    apps_util::PreferredAppUpdateWaiter waiter(proxy->PreferredAppsList());
+    waiter.WaitForPreferredAppUpdate(test_web_app_id());
+  }
+
+  const GURL in_scope_url =
+      https_server().GetURL(GetAppUrlHost(), GetInScopeUrlPath());
+  ASSERT_TRUE(ui_test_utils::NavigateToURL(browser(), in_scope_url));
+
+  ClickIntentChip();
+
+  Browser* app_browser = BrowserList::GetInstance()->GetLastActive();
+  EXPECT_TRUE(web_app::AppBrowserController::IsForWebApp(app_browser,
+                                                         test_web_app_id()));
+}
+#endif  // BUILDFLAG(IS_CHROMEOS)
+
+class IntentChipButtonSkipIntentPickerBrowserTest
+    : public IntentChipButtonBrowserTest {
+ private:
+  base::test::ScopedFeatureList feature_list_{
+      apps::features::kIntentChipSkipsPicker};
+};
+
+IN_PROC_BROWSER_TEST_F(IntentChipButtonSkipIntentPickerBrowserTest,
+                       ClickingChipOpensApp) {
+  if (!HasRequiredAshVersionForLacros())
+    GTEST_SKIP() << "Ash version is too old to support Intent Picker";
+
+  InstallTestWebApp();
+
+  const GURL in_scope_url =
+      https_server().GetURL(GetAppUrlHost(), GetInScopeUrlPath());
+  ASSERT_TRUE(ui_test_utils::NavigateToURL(browser(), in_scope_url));
+
+  ClickIntentChip();
+
+  Browser* app_browser = BrowserList::GetInstance()->GetLastActive();
+  EXPECT_TRUE(web_app::AppBrowserController::IsForWebApp(app_browser,
+                                                         test_web_app_id()));
+}
+
 // TODO(crbug.com/1313274): Fix test flakiness on Lacros.
 #if BUILDFLAG(IS_CHROMEOS_LACROS)
 #define MAYBE_ShowsIntentPickerWhenMultipleApps \
@@ -181,7 +241,7 @@
 #define MAYBE_ShowsIntentPickerWhenMultipleApps \
   ShowsIntentPickerWhenMultipleApps
 #endif
-IN_PROC_BROWSER_TEST_F(IntentChipButtonBrowserTest,
+IN_PROC_BROWSER_TEST_F(IntentChipButtonSkipIntentPickerBrowserTest,
                        MAYBE_ShowsIntentPickerWhenMultipleApps) {
   if (!HasRequiredAshVersionForLacros())
     GTEST_SKIP() << "Ash version is too old to support Intent Picker";
@@ -191,9 +251,7 @@
 
   const GURL in_scope_url =
       https_server().GetURL(GetAppUrlHost(), GetInScopeUrlPath());
-  content::WebContents* web_contents =
-      browser()->tab_strip_model()->GetActiveWebContents();
-  ClickLinkAndWait(web_contents, in_scope_url, LinkTarget::SELF, "");
+  ASSERT_TRUE(ui_test_utils::NavigateToURL(browser(), in_scope_url));
   base::RunLoop().RunUntilIdle();
 
   // The Intent Chip should appear, but the intent picker bubble should not
@@ -209,7 +267,8 @@
   ASSERT_TRUE(IntentPickerBubbleView::intent_picker_bubble());
 }
 
-IN_PROC_BROWSER_TEST_F(IntentChipButtonBrowserTest, ShowsIntentChipCollapsed) {
+IN_PROC_BROWSER_TEST_F(IntentChipButtonSkipIntentPickerBrowserTest,
+                       ShowsIntentChipCollapsed) {
   if (!HasRequiredAshVersionForLacros())
     GTEST_SKIP() << "Ash version is too old to support Intent Picker";
 
diff --git a/chrome/browser/ui/views/location_bar/intent_picker_view.cc b/chrome/browser/ui/views/location_bar/intent_picker_view.cc
index fe56d607..dea10a3 100644
--- a/chrome/browser/ui/views/location_bar/intent_picker_view.cc
+++ b/chrome/browser/ui/views/location_bar/intent_picker_view.cc
@@ -47,7 +47,7 @@
   DCHECK(GetShowIcon());
   content::WebContents* web_contents = GetWebContents();
   const GURL& url = chrome::GetURLToBookmark(web_contents);
-  apps::ShowIntentPickerBubble(web_contents, url);
+  apps::ShowIntentPickerOrLaunchApp(web_contents, url);
 }
 
 views::BubbleDialogDelegate* IntentPickerView::GetBubble() const {
diff --git a/chrome/browser/ui/web_applications/BUILD.gn b/chrome/browser/ui/web_applications/BUILD.gn
index 457c6d5..da60d9da 100644
--- a/chrome/browser/ui/web_applications/BUILD.gn
+++ b/chrome/browser/ui/web_applications/BUILD.gn
@@ -33,7 +33,6 @@
   testonly = true
 
   sources = [
-    "app_browser_controller_browsertest.cc",
     "create_shortcut_browsertest.cc",
     "pwa_mixed_content_browsertest.cc",
     "sub_apps_service_impl_browsertest.cc",
@@ -62,7 +61,10 @@
   }
 
   if (is_chromeos_ash) {
-    sources += [ "web_app_guest_session_browsertest_chromeos.cc" ]
+    sources += [
+      "app_browser_controller_browsertest.cc",
+      "web_app_guest_session_browsertest_chromeos.cc",
+    ]
   }
 
   defines = [ "HAS_OUT_OF_PROC_TEST_RUNNER" ]
diff --git a/chrome/browser/ui/web_applications/app_browser_controller_browsertest.cc b/chrome/browser/ui/web_applications/app_browser_controller_browsertest.cc
index 3384a134..785b54c6 100644
--- a/chrome/browser/ui/web_applications/app_browser_controller_browsertest.cc
+++ b/chrome/browser/ui/web_applications/app_browser_controller_browsertest.cc
@@ -93,11 +93,7 @@
  public:
   AppBrowserControllerBrowserTest()
       : test_system_web_app_installation_(
-            ash::TestSystemWebAppInstallation::SetUpTabbedMultiWindowApp()) {
-#if BUILDFLAG(IS_CHROMEOS_LACROS)
-    EnableSystemWebAppsInLacrosForTesting();
-#endif  // BUILDFLAG(IS_CHROMEOS_LACROS)
-  }
+            ash::TestSystemWebAppInstallation::SetUpTabbedMultiWindowApp()) {}
   AppBrowserControllerBrowserTest(const AppBrowserControllerBrowserTest&) =
       delete;
   AppBrowserControllerBrowserTest& operator=(
@@ -361,11 +357,7 @@
  public:
   AppBrowserControllerChromeUntrustedBrowserTest()
       : test_system_web_app_installation_(
-            ash::TestSystemWebAppInstallation::SetUpChromeUntrustedApp()) {
-#if BUILDFLAG(IS_CHROMEOS_LACROS)
-    EnableSystemWebAppsInLacrosForTesting();
-#endif  // BUILDFLAG(IS_CHROMEOS_LACROS)
-  }
+            ash::TestSystemWebAppInstallation::SetUpChromeUntrustedApp()) {}
 
  protected:
   Browser* InstallAndLaunchMockApp() {
diff --git a/chrome/browser/ui/web_applications/web_app_browsertest.cc b/chrome/browser/ui/web_applications/web_app_browsertest.cc
index cd515dcd..0673f770 100644
--- a/chrome/browser/ui/web_applications/web_app_browsertest.cc
+++ b/chrome/browser/ui/web_applications/web_app_browsertest.cc
@@ -22,7 +22,6 @@
 #include "chrome/browser/apps/app_service/app_service_proxy.h"
 #include "chrome/browser/apps/app_service/app_service_proxy_factory.h"
 #include "chrome/browser/apps/app_service/browser_app_launcher.h"
-#include "chrome/browser/ash/system_web_apps/test_support/test_system_web_app_installation.h"
 #include "chrome/browser/banners/app_banner_manager_desktop.h"
 #include "chrome/browser/browser_features.h"
 #include "chrome/browser/browser_process.h"
@@ -66,7 +65,6 @@
 #include "chrome/browser/web_applications/web_app_registrar.h"
 #include "chrome/browser/web_applications/web_app_registry_update.h"
 #include "chrome/browser/web_applications/web_app_sync_bridge.h"
-#include "chrome/browser/web_applications/web_app_utils.h"
 #include "chrome/common/chrome_features.h"
 #include "chrome/common/chrome_switches.h"
 #include "chrome/common/webui_url_constants.h"
@@ -96,6 +94,7 @@
 #include "ui/gfx/geometry/size.h"
 
 #if BUILDFLAG(IS_CHROMEOS_ASH)
+#include "chrome/browser/ash/system_web_apps/test_support/test_system_web_app_installation.h"
 #include "chrome/browser/ui/ash/shelf/chrome_shelf_controller.h"
 #endif
 
@@ -376,16 +375,14 @@
   }
 }
 
-// TODO(crbug.com/1321984): Make is Ash only using BUILDFLAG(IS_CHROMEOS_ASH).
+#if BUILDFLAG(IS_CHROMEOS_ASH)
+
 class BackgroundColorChangeSystemWebAppBrowserTest
     : public WebAppBrowserTest,
       public testing::WithParamInterface<
           /*prefer_manifest_background_color=*/bool> {
  public:
   BackgroundColorChangeSystemWebAppBrowserTest() {
-#if BUILDFLAG(IS_CHROMEOS_LACROS)
-    web_app::EnableSystemWebAppsInLacrosForTesting();
-#endif  // BUILDFLAG(IS_CHROMEOS_LACROS)
     system_web_app_installation_ =
         ash::TestSystemWebAppInstallation::SetUpAppWithColors(
             /*theme_color=*/SK_ColorWHITE,
@@ -463,6 +460,8 @@
   }
 }
 
+#endif  // BUILDFLAG(IS_CHROMEOS_ASH)
+
 // This tests that we don't crash when launching a PWA window with an
 // autogenerated user theme set.
 IN_PROC_BROWSER_TEST_F(WebAppBrowserTest, AutoGeneratedUserThemeCrash) {
diff --git a/chrome/browser/ui/web_applications/web_app_launch_process.cc b/chrome/browser/ui/web_applications/web_app_launch_process.cc
index ce43c22..1819ced8 100644
--- a/chrome/browser/ui/web_applications/web_app_launch_process.cc
+++ b/chrome/browser/ui/web_applications/web_app_launch_process.cc
@@ -147,12 +147,12 @@
       params_.intent &&
       params_.intent->action == apps_util::kIntentActionCreateNote;
 
-  if (!params_.override_url.is_empty()) {
-    launch_url = params_.override_url;
-    is_file_handling = !params_.launch_files.empty();
-  } else if (share_target) {
+  if (share_target) {
     // Handle share_target launch.
     launch_url = share_target->action;
+  } else if (!params_.override_url.is_empty()) {
+    launch_url = params_.override_url;
+    is_file_handling = !params_.launch_files.empty();
   } else if (params_.url_handler_launch_url.has_value() &&
              params_.url_handler_launch_url->is_valid()) {
     // Handle url_handlers launch.
diff --git a/chrome/browser/ui/webui/chromeos/notification_tester/notification_tester_handler.cc b/chrome/browser/ui/webui/chromeos/notification_tester/notification_tester_handler.cc
index 74d14b6e..87554571 100644
--- a/chrome/browser/ui/webui/chromeos/notification_tester/notification_tester_handler.cc
+++ b/chrome/browser/ui/webui/chromeos/notification_tester/notification_tester_handler.cc
@@ -12,7 +12,8 @@
 #include "base/strings/string_number_conversions.h"
 #include "base/strings/utf_string_conversions.h"
 #include "chrome/app/vector_icons/vector_icons.h"
-#include "chrome/grit/notification_tester_resources.h"
+#include "chrome/grit/chrome_unscaled_resources.h"
+#include "chrome/grit/theme_resources.h"
 #include "ui/base/resource/resource_bundle.h"
 #include "ui/gfx/image/image.h"
 #include "ui/gfx/vector_icon_types.h"
@@ -98,13 +99,16 @@
   return gfx::kNoneIcon;  // Default Case
 }
 
+// TODO(crbug/1341401): Need to switch from SetNotification...() to
+// GetNotification...()
 void NotificationTesterHandler::SetNotificationImage(
     const std::string& image,
     message_center::RichNotificationData& optional_fields) {
   ui::ResourceBundle& rb = ui::ResourceBundle::GetSharedInstance();
-  if (image == "chromeos_logo_main") {
-    optional_fields.image = rb.GetNativeImageNamed(
-        IDR_NOTIFICATION_TESTER_IMAGES_CHROMEOS_LOGO_MAIN_PNG);
+  if (image == "google_logo_small_png") {
+    optional_fields.image = rb.GetImageNamed(IDR_LOGO_GOOGLE_COLOR_90);
+  } else if (image == "chromium_logo_large_png") {
+    optional_fields.image = rb.GetImageNamed(IDR_CHROME_APP_ICON_192);
   }
 }
 
diff --git a/chrome/browser/web_applications/manifest_update_manager.cc b/chrome/browser/web_applications/manifest_update_manager.cc
index 52438b6..160a02e8 100644
--- a/chrome/browser/web_applications/manifest_update_manager.cc
+++ b/chrome/browser/web_applications/manifest_update_manager.cc
@@ -73,8 +73,8 @@
     return;
   }
 
-  DCHECK(system_web_apps_delegate_map_);
-  if (IsSystemWebApp(*registrar_, *system_web_apps_delegate_map_, *app_id)) {
+  if (system_web_apps_delegate_map_ &&
+      IsSystemWebApp(*registrar_, *system_web_apps_delegate_map_, *app_id)) {
     NotifyResult(url, *app_id, ManifestUpdateResult::kAppIsSystemWebApp);
     return;
   }
diff --git a/chrome/browser/web_applications/manifest_update_manager_browsertest.cc b/chrome/browser/web_applications/manifest_update_manager_browsertest.cc
index 53c0346..f2a355a 100644
--- a/chrome/browser/web_applications/manifest_update_manager_browsertest.cc
+++ b/chrome/browser/web_applications/manifest_update_manager_browsertest.cc
@@ -1914,16 +1914,13 @@
             (LaunchHandler{LaunchHandler::RouteTo::kExistingClientNavigate}));
 }
 
+#if BUILDFLAG(IS_CHROMEOS_ASH)
 class ManifestUpdateManagerSystemAppBrowserTest
     : public ManifestUpdateManagerBrowserTest {
  public:
   ManifestUpdateManagerSystemAppBrowserTest()
       : system_app_(ash::TestSystemWebAppInstallation::
-                        SetUpStandaloneSingleWindowApp()) {
-#if BUILDFLAG(IS_CHROMEOS_LACROS)
-    EnableSystemWebAppsInLacrosForTesting();
-#endif  // BUILDFLAG(IS_CHROMEOS_LACROS)
-  }
+                        SetUpStandaloneSingleWindowApp()) {}
 
   void SetUpOnMainThread() override { system_app_->WaitForAppInstall(); }
 
@@ -1941,6 +1938,7 @@
       kUpdateHistogramName, ManifestUpdateResult::kAppIsSystemWebApp, 1);
   EXPECT_EQ(GetProvider().registrar().GetAppThemeColor(app_id), SK_ColorGREEN);
 }
+#endif  // BUILDFLAG(IS_CHROMEOS_ASH)
 
 using ManifestUpdateManagerWebAppsBrowserTest =
     ManifestUpdateManagerBrowserTest;
diff --git a/chrome/browser/web_applications/manifest_update_task.cc b/chrome/browser/web_applications/manifest_update_task.cc
index 1d73eae..1920036 100644
--- a/chrome/browser/web_applications/manifest_update_task.cc
+++ b/chrome/browser/web_applications/manifest_update_task.cc
@@ -427,6 +427,9 @@
   if (install_info_->permissions_policy != app->permissions_policy())
     return true;
 
+  // TODO(crbug.com/897314): Check changes to tab_strip field once icons are
+  // stored.
+
   // TODO(crbug.com/1212849): Handle changes to is_storage_isolated.
 
   // TODO(crbug.com/926083): Check more manifest fields.
diff --git a/chrome/browser/web_applications/proto/BUILD.gn b/chrome/browser/web_applications/proto/BUILD.gn
index bbe1860b..849bf17d 100644
--- a/chrome/browser/web_applications/proto/BUILD.gn
+++ b/chrome/browser/web_applications/proto/BUILD.gn
@@ -10,6 +10,7 @@
     "web_app.proto",
     "web_app_launch_handler.proto",
     "web_app_share_target.proto",
+    "web_app_tab_strip.proto",
     "web_app_translations.proto",
   ]
   link_deps = [
diff --git a/chrome/browser/web_applications/proto/web_app.proto b/chrome/browser/web_applications/proto/web_app.proto
index 0029718..df18dea8 100644
--- a/chrome/browser/web_applications/proto/web_app.proto
+++ b/chrome/browser/web_applications/proto/web_app.proto
@@ -8,6 +8,7 @@
 import "chrome/browser/ash/system_web_apps/types/system_web_app_data.proto";
 import "chrome/browser/web_applications/proto/web_app_launch_handler.proto";
 import "chrome/browser/web_applications/proto/web_app_share_target.proto";
+import "chrome/browser/web_applications/proto/web_app_tab_strip.proto";
 
 option optimize_for = LITE_RUNTIME;
 
@@ -340,4 +341,8 @@
 
   // If present, the URL to use to launch the app on the lock screen.
   optional string lock_screen_start_url = 56;
+
+  // Contains customisations to the web app tab strip. Only present when the
+  // display_mode is tabbed.
+  optional TabStripProto tab_strip = 57;
 }
diff --git a/chrome/browser/web_applications/proto/web_app_tab_strip.proto b/chrome/browser/web_applications/proto/web_app_tab_strip.proto
new file mode 100644
index 0000000..216a57a
--- /dev/null
+++ b/chrome/browser/web_applications/proto/web_app_tab_strip.proto
@@ -0,0 +1,33 @@
+// 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.
+
+syntax = "proto2";
+
+option optimize_for = LITE_RUNTIME;
+
+package web_app;
+
+message NewTabButtonParams {
+  optional string url = 1;
+}
+
+// A proto representing the "tab_strip" manifest field.
+// This mirrors ManifestTabStrip in:
+// third_party/blink/public/mojom/manifest/manifest.mojom
+message TabStripProto {
+  enum Visibility {
+    AUTO = 0;
+    ABSENT = 1;
+  }
+
+  oneof new_tab_button {
+    Visibility new_tab_button_visibility = 1;
+    NewTabButtonParams new_tab_button_params = 2;
+  }
+
+  oneof home_tab {
+    Visibility home_tab_visibility = 3;
+    // TODO(crbug.com/897314): Add HomeTabParams containing icons.
+  }
+}
diff --git a/chrome/browser/web_applications/test/web_app_test_utils.cc b/chrome/browser/web_applications/test/web_app_test_utils.cc
index 14c8c60..b5b5b61 100644
--- a/chrome/browser/web_applications/test/web_app_test_utils.cc
+++ b/chrome/browser/web_applications/test/web_app_test_utils.cc
@@ -574,6 +574,24 @@
   app->SetAppSizeInBytes(random.next_uint());
   app->SetDataSizeInBytes(random.next_uint());
 
+  if (random.next_bool()) {
+    blink::Manifest::TabStrip tab_strip;
+    tab_strip.home_tab =
+        random.next_enum<blink::mojom::TabStripMemberVisibility>();
+    if (random.next_bool()) {
+      blink::Manifest::NewTabButtonParams new_tab_button_params;
+      if (random.next_bool()) {
+        new_tab_button_params.url = scope.Resolve(
+            "new_tab_button_url" + base::NumberToString(random.next_uint()));
+      }
+      tab_strip.new_tab_button = new_tab_button_params;
+    } else {
+      tab_strip.new_tab_button =
+          random.next_enum<blink::mojom::TabStripMemberVisibility>();
+    }
+    app->SetTabStrip(std::move(tab_strip));
+  }
+
   return app;
 }
 
diff --git a/chrome/browser/web_applications/web_app.cc b/chrome/browser/web_applications/web_app.cc
index 63cd6f5..7232fdc 100644
--- a/chrome/browser/web_applications/web_app.cc
+++ b/chrome/browser/web_applications/web_app.cc
@@ -394,6 +394,10 @@
       std::move(management_to_external_config_map);
 }
 
+void WebApp::SetTabStrip(absl::optional<blink::Manifest::TabStrip> tab_strip) {
+  tab_strip_ = std::move(tab_strip);
+}
+
 void WebApp::AddPlaceholderInfoToManagementExternalConfigMap(
     WebAppManagement::Type type,
     bool is_placeholder) {
@@ -552,7 +556,8 @@
         app.install_source_for_metrics_,
         app.app_size_in_bytes_,
         app.data_size_in_bytes_,
-        app.management_to_external_config_map_
+        app.management_to_external_config_map_,
+        app.tab_strip_
         // clang-format on
     );
   };
@@ -832,6 +837,37 @@
   root.SetBoolKey("window_controls_overlay_enabled",
                   window_controls_overlay_enabled_);
 
+  if (tab_strip_.has_value()) {
+    base::Value& tab_strip_json =
+        *root.SetKey("tab_strip", base::Value(base::Value::Type::DICTIONARY));
+    if (absl::holds_alternative<TabStrip::Visibility>(
+            tab_strip_.value().new_tab_button)) {
+      tab_strip_json.SetStringKey(
+          "new_tab_button", ConvertToString(absl::get<TabStrip::Visibility>(
+                                tab_strip_.value().new_tab_button)));
+    } else {
+      base::Value& new_tab_button_json = *tab_strip_json.SetKey(
+          "new_tab_button", base::Value(base::Value::Type::DICTIONARY));
+      new_tab_button_json.SetStringKey(
+          "url", ConvertToString(absl::get<blink::Manifest::NewTabButtonParams>(
+                                     tab_strip_.value().new_tab_button)
+                                     .url.value_or(GURL(""))));
+    }
+
+    if (absl::holds_alternative<TabStrip::Visibility>(
+            tab_strip_.value().home_tab)) {
+      tab_strip_json.SetStringKey(
+          "home_tab", ConvertToString(absl::get<TabStrip::Visibility>(
+                          tab_strip_.value().home_tab)));
+    } else {
+      tab_strip_json.SetKey("home_tab",
+                            base::Value(base::Value::Type::DICTIONARY));
+      // TODO(crbug.com/897314): Add debug info for home tab icons.
+    }
+  } else {
+    root.SetKey("tab_strip", base::Value());
+  }
+
   return root;
 }
 
diff --git a/chrome/browser/web_applications/web_app.h b/chrome/browser/web_applications/web_app.h
index adae63c1..83c3950 100644
--- a/chrome/browser/web_applications/web_app.h
+++ b/chrome/browser/web_applications/web_app.h
@@ -294,6 +294,10 @@
     return management_to_external_config_map_;
   }
 
+  const absl::optional<blink::Manifest::TabStrip> tab_strip() const {
+    return tab_strip_;
+  }
+
   // A Web App can be installed from multiple sources simultaneously. Installs
   // add a source to the app. Uninstalls remove a source from the app.
   void AddSource(WebAppManagement::Type source);
@@ -377,6 +381,7 @@
   void SetDataSizeInBytes(absl::optional<int64_t> data_size_in_bytes);
   void SetWebAppManagementExternalConfigMap(
       ExternalConfigMap management_to_external_config_map);
+  void SetTabStrip(absl::optional<blink::Manifest::TabStrip> tab_strip);
 
   void AddPlaceholderInfoToManagementExternalConfigMap(
       WebAppManagement::Type source_type,
@@ -488,6 +493,8 @@
   // like is_placeholder and install URLs.
   ExternalConfigMap management_to_external_config_map_;
 
+  absl::optional<blink::Manifest::TabStrip> tab_strip_;
+
   // New fields must be added to:
   //  - |operator==|
   //  - AsDebugValue()
diff --git a/chrome/browser/web_applications/web_app_database.cc b/chrome/browser/web_applications/web_app_database.cc
index ce3af54..90b7ba1 100644
--- a/chrome/browser/web_applications/web_app_database.cc
+++ b/chrome/browser/web_applications/web_app_database.cc
@@ -249,6 +249,26 @@
   }
 }
 
+TabStripProto::Visibility TabStripVisibilityToProto(
+    TabStrip::Visibility visibility) {
+  switch (visibility) {
+    case TabStrip::Visibility::kAuto:
+      return TabStripProto_Visibility_AUTO;
+    case TabStrip::Visibility::kAbsent:
+      return TabStripProto_Visibility_ABSENT;
+  }
+}
+
+TabStrip::Visibility ProtoToTabStripVisibility(
+    TabStripProto::Visibility visibility) {
+  switch (visibility) {
+    case TabStripProto_Visibility_AUTO:
+      return TabStrip::Visibility::kAuto;
+    case TabStripProto_Visibility_ABSENT:
+      return TabStrip::Visibility::kAbsent;
+  }
+}
+
 }  // anonymous namespace
 
 WebAppDatabase::WebAppDatabase(AbstractWebAppDatabaseFactory* database_factory,
@@ -646,6 +666,31 @@
     }
   }
 
+  if (web_app.tab_strip()) {
+    TabStrip tab_strip = web_app.tab_strip().value();
+
+    auto* mutable_tab_strip = local_data->mutable_tab_strip();
+    if (absl::holds_alternative<TabStrip::Visibility>(tab_strip.home_tab)) {
+      mutable_tab_strip->set_home_tab_visibility(TabStripVisibilityToProto(
+          absl::get<TabStrip::Visibility>(tab_strip.home_tab)));
+    }
+
+    if (absl::holds_alternative<TabStrip::Visibility>(
+            tab_strip.new_tab_button)) {
+      mutable_tab_strip->set_new_tab_button_visibility(
+          TabStripVisibilityToProto(absl::get<TabStrip::Visibility>(
+              web_app.tab_strip().value().new_tab_button)));
+    } else {
+      auto* mutable_new_tab_button_params =
+          mutable_tab_strip->mutable_new_tab_button_params();
+      absl::optional<GURL> url = absl::get<blink::Manifest::NewTabButtonParams>(
+                                     tab_strip.new_tab_button)
+                                     .url;
+      if (url)
+        mutable_new_tab_button_params->set_url(url.value().spec());
+    }
+  }
+
   if (web_app.app_size_in_bytes().has_value())
     local_data->set_app_size_in_bytes(web_app.app_size_in_bytes().value());
 
@@ -1221,6 +1266,27 @@
   }
   web_app->SetWebAppManagementExternalConfigMap(management_to_external_config);
 
+  if (local_data.has_tab_strip()) {
+    TabStrip tab_strip;
+    if (local_data.tab_strip().has_home_tab_visibility()) {
+      tab_strip.home_tab = ProtoToTabStripVisibility(
+          local_data.tab_strip().home_tab_visibility());
+    }
+
+    if (local_data.tab_strip().has_new_tab_button_visibility()) {
+      tab_strip.new_tab_button = ProtoToTabStripVisibility(
+          local_data.tab_strip().new_tab_button_visibility());
+    } else {
+      blink::Manifest::NewTabButtonParams new_tab_button_params;
+      if (local_data.tab_strip().new_tab_button_params().has_url()) {
+        new_tab_button_params.url =
+            GURL(local_data.tab_strip().new_tab_button_params().url());
+      }
+      tab_strip.new_tab_button = new_tab_button_params;
+    }
+    web_app->SetTabStrip(std::move(tab_strip));
+  }
+
   if (local_data.has_app_size_in_bytes()) {
     web_app->SetAppSizeInBytes(local_data.app_size_in_bytes());
   }
diff --git a/chrome/browser/web_applications/web_app_install_utils.cc b/chrome/browser/web_applications/web_app_install_utils.cc
index 9a8a8af..684225e 100644
--- a/chrome/browser/web_applications/web_app_install_utils.cc
+++ b/chrome/browser/web_applications/web_app_install_utils.cc
@@ -979,6 +979,8 @@
   web_app.SetManifestUrl(web_app_info.manifest_url);
 
   web_app.SetLaunchHandler(web_app_info.launch_handler);
+
+  web_app.SetTabStrip(web_app_info.tab_strip);
 }
 
 void MaybeDisableOsIntegration(const WebAppRegistrar* app_registrar,
diff --git a/chrome/browser/web_applications/web_app_unittest.cc b/chrome/browser/web_applications/web_app_unittest.cc
index d2ec1130..020d0b9 100644
--- a/chrome/browser/web_applications/web_app_unittest.cc
+++ b/chrome/browser/web_applications/web_app_unittest.cc
@@ -230,6 +230,7 @@
       "scope": "",
       "theme_color": "none"
    },
+   "tab_strip": null,
    "theme_color": "none",
    "unhashed_app_id": "",
    "url_handlers": [  ],
@@ -526,6 +527,7 @@
       "scope": "https://example.com/scope1234/",
       "theme_color": "rgba(61,127,69,0.8431372549019608)"
    },
+   "tab_strip": null,
    "theme_color": "rgba(151,34,83,0.8823529411764706)",
    "unhashed_app_id": "https://example.com/scope1234/start1234",
    "url_handlers": [ {
diff --git a/chrome/browser/webid/federated_identity_account_keyed_permission_context.cc b/chrome/browser/webid/federated_identity_account_keyed_permission_context.cc
index 218aa6a0..5ac8ec5 100644
--- a/chrome/browser/webid/federated_identity_account_keyed_permission_context.cc
+++ b/chrome/browser/webid/federated_identity_account_keyed_permission_context.cc
@@ -33,7 +33,7 @@
 bool FederatedIdentityAccountKeyedPermissionContext::HasPermission(
     const url::Origin& relying_party,
     const url::Origin& identity_provider,
-    const absl::optional<std::string>& account_id) {
+    const std::string& account_id) {
   // TODO(crbug.com/1334019): This is currently origin-bound, but we would like
   // this grant to apply at the 'site' (aka eTLD+1) level. We should override
   // GetGrantedObject to find a grant that matches the RP's site rather
@@ -44,9 +44,6 @@
   if (!granted_object)
     return false;
 
-  if (!account_id)
-    return true;
-
   const base::Value::List* account_list =
       ExtractAccountList(granted_object->value);
   for (auto& account_id_value : *account_list) {
diff --git a/chrome/browser/webid/federated_identity_account_keyed_permission_context.h b/chrome/browser/webid/federated_identity_account_keyed_permission_context.h
index acf7f62..4a8ea6d 100644
--- a/chrome/browser/webid/federated_identity_account_keyed_permission_context.h
+++ b/chrome/browser/webid/federated_identity_account_keyed_permission_context.h
@@ -7,7 +7,6 @@
 
 #include "components/content_settings/core/common/content_settings_types.h"
 #include "components/permissions/object_permission_context_base.h"
-#include "third_party/abseil-cpp/absl/types/optional.h"
 
 #include <string>
 
@@ -36,10 +35,9 @@
 
   // Returns whether there is an existing permission for the (relying_party,
   // identity_provider, account_id) tuple.
-  // When `account_id` == absl::nullopt, all account ids are matched.
   bool HasPermission(const url::Origin& relying_party,
                      const url::Origin& identity_provider,
-                     const absl::optional<std::string>& account_id);
+                     const std::string& account_id);
 
   // Grants permission for the (relying_party, identity_provider, account_id)
   // tuple.
diff --git a/chrome/build/linux.pgo.txt b/chrome/build/linux.pgo.txt
index 6606d65..7916f05f 100644
--- a/chrome/build/linux.pgo.txt
+++ b/chrome/build/linux.pgo.txt
@@ -1 +1 @@
-chrome-linux-main-1657022349-bffae36425e502a761df100ce16ea8e8b34be36b.profdata
+chrome-linux-main-1657086937-bb62fb04fa6f19e3e562042ffc02afce68ae04c3.profdata
diff --git a/chrome/build/mac-arm.pgo.txt b/chrome/build/mac-arm.pgo.txt
index 6d7bc21a..2595d70 100644
--- a/chrome/build/mac-arm.pgo.txt
+++ b/chrome/build/mac-arm.pgo.txt
@@ -1 +1 @@
-chrome-mac-arm-main-1657022349-096312dc222be2f882e40fb94c4f51ddc3a3c0a4.profdata
+chrome-mac-arm-main-1657086937-55501ae392a4acb3e94c8fe10e870c7796e8328e.profdata
diff --git a/chrome/build/mac.pgo.txt b/chrome/build/mac.pgo.txt
index 91040d0..22e92f1 100644
--- a/chrome/build/mac.pgo.txt
+++ b/chrome/build/mac.pgo.txt
@@ -1 +1 @@
-chrome-mac-main-1657022349-b5d238b58d25cbc0137783361983ca34de273d7d.profdata
+chrome-mac-main-1657065497-80aa3306e6cf337ea173d4d88eab20509915cbb9.profdata
diff --git a/chrome/build/win32.pgo.txt b/chrome/build/win32.pgo.txt
index b7fcb1c..45f7a483 100644
--- a/chrome/build/win32.pgo.txt
+++ b/chrome/build/win32.pgo.txt
@@ -1 +1 @@
-chrome-win32-main-1657033128-31317df818ce180cb839e5a8925a9b62660a625b.profdata
+chrome-win32-main-1657065497-7bfe91e6d78329cb4125b269fc2225e21759312c.profdata
diff --git a/chrome/build/win64.pgo.txt b/chrome/build/win64.pgo.txt
index 48e9eec..90023c8 100644
--- a/chrome/build/win64.pgo.txt
+++ b/chrome/build/win64.pgo.txt
@@ -1 +1 @@
-chrome-win64-main-1657033128-9412251c0b22b3f38e4b73407fda0b88b7e90c33.profdata
+chrome-win64-main-1657075668-602afc372be7c5b3e1edc1324a09c6b9f3c5c72c.profdata
diff --git a/chrome/test/BUILD.gn b/chrome/test/BUILD.gn
index 7258a45..ccfd077 100644
--- a/chrome/test/BUILD.gn
+++ b/chrome/test/BUILD.gn
@@ -1401,6 +1401,7 @@
       "//components/segmentation_platform/internal:test_support",
       "//components/segmentation_platform/public",
       "//components/services/app_service/public/cpp:protocol_handling",
+      "//components/services/app_service/public/cpp:test_support",
       "//components/services/app_service/public/mojom",
       "//components/services/language_detection/public/cpp",
       "//components/services/language_detection/public/mojom",
@@ -2038,7 +2039,6 @@
       "../browser/sessions/session_restore_observer_browsertest.cc",
       "../browser/sessions/session_service_log_browsertest.cc",
       "../browser/sessions/tab_restore_browsertest.cc",
-      "../browser/sessions/tab_restore_service_browsertest.cc",
       "../browser/shared_highlighting/shared_highlighting_browsertest.cc",
       "../browser/signin/e2e_tests/live_sign_in_test.cc",
       "../browser/signin/e2e_tests/live_test.cc",
@@ -2368,6 +2368,10 @@
       ]
     }
 
+    if (is_chromeos_ash) {
+      sources += [ "../browser/sessions/tab_restore_service_browsertest.cc" ]
+    }
+
     # https://crbug.com/1252812 The intent picker (launch icon) actions
     # are not working on Lacros. Remove the lacros exclusion when fixed.
     if (is_chromeos && !is_chromeos_lacros) {
@@ -3262,7 +3266,6 @@
         "../browser/ui/views/frame/browser_non_client_frame_view_browsertest.cc",
         "../browser/ui/views/frame/browser_root_view_browsertest.cc",
         "../browser/ui/views/frame/browser_view_browsertest.cc",
-        "../browser/ui/views/frame/system_web_app_non_client_frame_view_browsertest.cc",
         "../browser/ui/views/hung_renderer_view_browsertest.cc",
         "../browser/ui/views/importer/import_lock_dialog_view_browsertest.cc",
         "../browser/ui/views/javascript_tab_modal_dialog_view_views_browsertest.cc",
@@ -3364,6 +3367,7 @@
       }
       if (is_chromeos_ash) {
         sources += [
+          "../browser/ui/views/frame/system_web_app_non_client_frame_view_browsertest.cc",
           "../browser/ui/views/select_file_dialog_extension_browsertest.cc",
         ]
         deps += [ "//ash/services/multidevice_setup/public/cpp:prefs" ]
@@ -4486,7 +4490,6 @@
         "../browser/apps/platform_apps/platform_app_navigation_redirector_browsertest.cc",
         "../browser/apps/platform_apps/service_worker_browsertest.cc",
         "../browser/ui/startup/startup_browser_creator_browsertest.cc",
-        "../browser/ui/views/frame/system_web_app_non_client_frame_view_browsertest.cc",
         "../browser/ui/views/web_apps/deprecated_apps_dialog_view_browsertest.cc",
         "../browser/ui/views/web_apps/force_installed_deprecated_apps_dialog_view_browsertest.cc",
         "../browser/ui/views/web_apps/frame_toolbar/web_app_frame_toolbar_browsertest.cc",
@@ -4691,6 +4694,7 @@
       "//components/proxy_config:proxy_config",
       "//components/services/app_service/public/cpp:intents",
       "//components/services/app_service/public/cpp:preferred_apps",
+      "//components/services/app_service/public/cpp:test_support",
       "//ui/gfx/codec",
       "//ui/platform_window",
     ]
@@ -9358,6 +9362,7 @@
         ]
       }
       if (is_chromeos_ash) {
+        sources += [ "../browser/ui/web_applications/test/system_web_app_interactive_uitest.cc" ]
         deps += [
           "//ash:ash",
           "//chrome/browser/ash/crosapi:crosapi",
@@ -9374,9 +9379,6 @@
           "//components/media_router/browser:test_support",
         ]
       }
-      if (!is_android) {
-        sources += [ "../browser/ui/web_applications/test/system_web_app_interactive_uitest.cc" ]
-      }
       if (use_aura) {
         sources += [ "../browser/ui/views/tooltip/tooltip_browsertest.cc" ]
       }
diff --git a/chrome/test/data/webui/chromeos/emoji_picker/emoji_picker_extension_test.js b/chrome/test/data/webui/chromeos/emoji_picker/emoji_picker_extension_test.js
index 114b3e5..3802404 100644
--- a/chrome/test/data/webui/chromeos/emoji_picker/emoji_picker_extension_test.js
+++ b/chrome/test/data/webui/chromeos/emoji_picker/emoji_picker_extension_test.js
@@ -4,7 +4,7 @@
 
 import {EmojiPicker} from 'chrome://emoji-picker/emoji_picker.js';
 import {EmojiPickerApiProxyImpl} from 'chrome://emoji-picker/emoji_picker_api_proxy.js';
-import {EMOJI_BUTTON_CLICK, V2_CONTENT_LOADED} from 'chrome://emoji-picker/events.js';
+import {EMOJI_BUTTON_CLICK, EMOJI_PICKER_READY} from 'chrome://emoji-picker/events.js';
 import {assert} from 'chrome://resources/js/assert.m.js';
 import {flush} from 'chrome://resources/polymer/v3_0/polymer/polymer_bundled.min.js';
 import {assertEquals, assertFalse, assertGT, assertTrue} from '../../chai_assert.js';
@@ -39,11 +39,18 @@
      // Set default incognito state to False.
     EmojiPickerApiProxyImpl.getInstance().isIncognitoTextField = () =>
         new Promise((resolve) => resolve({incognito: false}));
+    EmojiPicker.configs = () => ({
+      'dataUrls': {
+        'emoji': [
+            '/emoji_test_ordering_start.json',
+            '/emoji_test_ordering_remaining.json'
+        ],
+        'emoticon': ['/emoticon_test_ordering.json'],
+      },
+    });
 
     emojiPicker =
         /** @type {!EmojiPicker} */ (document.createElement('emoji-picker'));
-    emojiPicker.emojiDataUrl = '/emoji_test_ordering';
-    emojiPicker.emoticonDataUrl = '/emoticon_test_ordering.json';
 
     findInEmojiPicker = (...path) => deepQuerySelector(emojiPicker, path);
 
@@ -57,7 +64,7 @@
 
     // Wait until emoji data is loaded before executing tests.
     return new Promise((resolve) => {
-      emojiPicker.addEventListener(V2_CONTENT_LOADED, () => {
+      emojiPicker.addEventListener(EMOJI_PICKER_READY, () => {
         flush();
         resolve();
       });
diff --git a/chrome/test/data/webui/chromeos/emoji_picker/emoji_picker_search_test.js b/chrome/test/data/webui/chromeos/emoji_picker/emoji_picker_search_test.js
index 5cbe789..bd85464 100644
--- a/chrome/test/data/webui/chromeos/emoji_picker/emoji_picker_search_test.js
+++ b/chrome/test/data/webui/chromeos/emoji_picker/emoji_picker_search_test.js
@@ -3,7 +3,7 @@
 // found in the LICENSE file.
 
 import {EmojiPicker} from 'chrome://emoji-picker/emoji_picker.js';
-import {EMOJI_BUTTON_CLICK, V2_CONTENT_LOADED} from 'chrome://emoji-picker/events.js';
+import {EMOJI_BUTTON_CLICK, EMOJI_PICKER_READY} from 'chrome://emoji-picker/events.js';
 import {assert} from 'chrome://resources/js/assert.m.js';
 import {flush} from 'chrome://resources/polymer/v3_0/polymer/polymer_bundled.min.js';
 
@@ -29,16 +29,24 @@
     document.body.innerHTML = '';
     window.localStorage.clear();
 
+    EmojiPicker.configs = () => ({
+      'dataUrls': {
+        'emoji': [
+          '/emoji_test_ordering_start.json',
+          '/emoji_test_ordering_remaining.json'
+        ],
+        'emoticon': ['/emoticon_test_ordering.json'],
+      },
+    });
+
     emojiPicker =
         /** @type {!EmojiPicker} */ (document.createElement('emoji-picker'));
-    emojiPicker.emojiDataUrl = '/emoji_test_ordering';
-    emojiPicker.emoticonDataUrl = '/emoticon_test_ordering.json';
 
     findInEmojiPicker = (...path) => deepQuerySelector(emojiPicker, path);
 
     // Wait until emoji data is loaded before executing tests.
     return new Promise((resolve) => {
-      emojiPicker.addEventListener(V2_CONTENT_LOADED, () => {
+      emojiPicker.addEventListener(EMOJI_PICKER_READY, () => {
         flush();
         resolve();
       });
diff --git a/chrome/test/data/webui/chromeos/emoji_picker/emoji_picker_test.js b/chrome/test/data/webui/chromeos/emoji_picker/emoji_picker_test.js
index 7b2a8c5..8d60aa03 100644
--- a/chrome/test/data/webui/chromeos/emoji_picker/emoji_picker_test.js
+++ b/chrome/test/data/webui/chromeos/emoji_picker/emoji_picker_test.js
@@ -7,7 +7,7 @@
 import {EmojiPicker} from 'chrome://emoji-picker/emoji_picker.js';
 import {EmojiPickerApiProxyImpl} from 'chrome://emoji-picker/emoji_picker_api_proxy.js';
 import {EmojiVariants} from 'chrome://emoji-picker/emoji_variants.js';
-import {EMOJI_REMAINING_DATA_LOADED, EMOJI_VARIANTS_SHOWN} from 'chrome://emoji-picker/events.js';
+import {EMOJI_PICKER_READY, EMOJI_VARIANTS_SHOWN} from 'chrome://emoji-picker/events.js';
 import {assert} from 'chrome://resources/js/assert.m.js';
 import {flush} from 'chrome://resources/polymer/v3_0/polymer/polymer_bundled.min.js';
 
@@ -32,10 +32,17 @@
     // Set default incognito state to False.
     EmojiPickerApiProxyImpl.getInstance().isIncognitoTextField = () =>
             new Promise((resolve) => resolve({incognito: false}));
+    EmojiPicker.configs = () => ({
+      'dataUrls': {
+        'emoji': [
+          '/emoji_test_ordering_start.json',
+          '/emoji_test_ordering_remaining.json',
+        ],
+      },
+    });
 
     emojiPicker =
         /** @type {!EmojiPicker} */ (document.createElement('emoji-picker'));
-    emojiPicker.emojiDataUrl = '/emoji_test_ordering';
 
     findInEmojiPicker = (...path) => deepQuerySelector(emojiPicker, path);
 
@@ -49,7 +56,7 @@
 
     // Wait until emoji data is loaded before executing tests.
     return new Promise((resolve) => {
-      emojiPicker.addEventListener(EMOJI_REMAINING_DATA_LOADED, resolve);
+      emojiPicker.addEventListener(EMOJI_PICKER_READY, resolve);
       document.body.appendChild(emojiPicker);
       flush();
     });
diff --git a/chrome/test/enterprise/e2e/policy/cloud_management_enrollment_token/cloud_enrollment_webdriver.py b/chrome/test/enterprise/e2e/policy/cloud_management_enrollment_token/cloud_enrollment_webdriver.py
index 5a7da58..0ef11ce 100644
--- a/chrome/test/enterprise/e2e/policy/cloud_management_enrollment_token/cloud_enrollment_webdriver.py
+++ b/chrome/test/enterprise/e2e/policy/cloud_management_enrollment_token/cloud_enrollment_webdriver.py
@@ -9,6 +9,14 @@
 import test_util
 
 
+def getElementFromShadowRoot(driver, element, selector):
+  if element is None:
+    return None
+  else:
+    return driver.execute_script(
+        "return arguments[0].shadowRoot.querySelector(arguments[1])", element,
+        selector)
+
 def main(argv):
   options = webdriver.ChromeOptions()
   os.environ["CHROME_LOG_FILE"] = r"c:\temp\chrome_log.txt"
@@ -24,10 +32,13 @@
     driver.find_element_by_id('reload-policies').click
     # Give the page 2 seconds to render the legend
     time.sleep(2)
-    print(driver.find_element_by_class_name('legend').text)
-    print(driver.find_element_by_class_name('machine-enrollment-name').text)
-    print(driver.find_element_by_class_name('machine-enrollment-token').text)
-    print(driver.find_element_by_class_name('status').text)
+    status_box = driver.find_element_by_css_selector("status-box")
+    el = getElementFromShadowRoot(driver, status_box, "fieldset")
+
+    print(el.find_element_by_class_name('legend').text)
+    print(el.find_element_by_class_name('machine-enrollment-name').text)
+    print(el.find_element_by_class_name('machine-enrollment-token').text)
+    print(el.find_element_by_class_name('status').text)
   except Exception as error:
     print(error)
   finally:
diff --git a/chromeos/CHROMEOS_LKGM b/chromeos/CHROMEOS_LKGM
index 5698a63..6b1e39d 100644
--- a/chromeos/CHROMEOS_LKGM
+++ b/chromeos/CHROMEOS_LKGM
@@ -1 +1 @@
-14945.0.0
\ No newline at end of file
+14958.0.0
\ No newline at end of file
diff --git a/chromeos/ash/components/dbus/BUILD.gn b/chromeos/ash/components/dbus/BUILD.gn
index 36670ef..fe1ee92b 100644
--- a/chromeos/ash/components/dbus/BUILD.gn
+++ b/chromeos/ash/components/dbus/BUILD.gn
@@ -21,6 +21,7 @@
     "//chromeos/ash/components/dbus/hiberman",
     "//chromeos/ash/components/dbus/ip_peripheral:test_support",
     "//chromeos/ash/components/dbus/lorgnette_manager:test_support",
+    "//chromeos/ash/components/dbus/oobe_config:unit_tests",
     "//chromeos/ash/components/dbus/rmad:rmad_proto",
     "//chromeos/ash/components/dbus/rmad:test_support",
     "//chromeos/ash/components/dbus/services:unit_tests",
diff --git a/chromeos/ash/components/dbus/concierge/concierge_client.cc b/chromeos/ash/components/dbus/concierge/concierge_client.cc
index 9bc8876d2..255ddad 100644
--- a/chromeos/ash/components/dbus/concierge/concierge_client.cc
+++ b/chromeos/ash/components/dbus/concierge/concierge_client.cc
@@ -58,14 +58,6 @@
     vm_observer_list_.RemoveObserver(observer);
   }
 
-  void AddContainerObserver(ContainerObserver* observer) override {
-    container_observer_list_.AddObserver(observer);
-  }
-
-  void RemoveContainerObserver(ContainerObserver* observer) override {
-    container_observer_list_.RemoveObserver(observer);
-  }
-
   void AddDiskImageObserver(DiskImageObserver* observer) override {
     disk_image_observer_list_.AddObserver(observer);
   }
@@ -82,10 +74,6 @@
     return is_vm_stopped_signal_connected_;
   }
 
-  bool IsContainerStartupFailedSignalConnected() override {
-    return is_container_startup_failed_signal_connected_;
-  }
-
   bool IsDiskImageProgressSignalConnected() override {
     return is_disk_import_progress_signal_connected_;
   }
@@ -293,14 +281,6 @@
         base::BindOnce(&ConciergeClientImpl::OnSignalConnected,
                        weak_ptr_factory_.GetWeakPtr()));
     concierge_proxy_->ConnectToSignal(
-        concierge::kVmConciergeInterface,
-        concierge::kContainerStartupFailedSignal,
-        base::BindRepeating(
-            &ConciergeClientImpl::OnContainerStartupFailedSignal,
-            weak_ptr_factory_.GetWeakPtr()),
-        base::BindOnce(&ConciergeClientImpl::OnSignalConnected,
-                       weak_ptr_factory_.GetWeakPtr()));
-    concierge_proxy_->ConnectToSignal(
         concierge::kVmConciergeInterface, concierge::kDiskImageProgressSignal,
         base::BindRepeating(&ConciergeClientImpl::OnDiskImageProgress,
                             weak_ptr_factory_.GetWeakPtr()),
@@ -402,22 +382,6 @@
       observer.OnVmStopped(vm_stopped_signal);
   }
 
-  void OnContainerStartupFailedSignal(dbus::Signal* signal) {
-    DCHECK_EQ(signal->GetInterface(), concierge::kVmConciergeInterface);
-    DCHECK_EQ(signal->GetMember(), concierge::kContainerStartupFailedSignal);
-
-    concierge::ContainerStartedSignal container_startup_failed_signal;
-    dbus::MessageReader reader(signal);
-    if (!reader.PopArrayOfBytesAsProto(&container_startup_failed_signal)) {
-      LOG(ERROR) << "Failed to parse proto from DBus Signal";
-      return;
-    }
-
-    for (auto& observer : container_observer_list_) {
-      observer.OnContainerStartupFailed(container_startup_failed_signal);
-    }
-  }
-
   void OnDiskImageProgress(dbus::Signal* signal) {
     DCHECK_EQ(signal->GetInterface(), concierge::kVmConciergeInterface);
     DCHECK_EQ(signal->GetMember(), concierge::kDiskImageProgressSignal);
@@ -445,8 +409,6 @@
       is_vm_started_signal_connected_ = is_connected;
     } else if (signal_name == concierge::kVmStoppedSignal) {
       is_vm_stopped_signal_connected_ = is_connected;
-    } else if (signal_name == concierge::kContainerStartupFailedSignal) {
-      is_container_startup_failed_signal_connected_ = is_connected;
     } else if (signal_name == concierge::kDiskImageProgressSignal) {
       is_disk_import_progress_signal_connected_ = is_connected;
     } else {
@@ -460,14 +422,11 @@
       ConciergeClient::kObserverListPolicy};
   base::ObserverList<VmObserver>::Unchecked vm_observer_list_{
       ConciergeClient::kObserverListPolicy};
-  base::ObserverList<ContainerObserver>::Unchecked container_observer_list_{
-      ConciergeClient::kObserverListPolicy};
   base::ObserverList<DiskImageObserver>::Unchecked disk_image_observer_list_{
       ConciergeClient::kObserverListPolicy};
 
   bool is_vm_started_signal_connected_ = false;
   bool is_vm_stopped_signal_connected_ = false;
-  bool is_container_startup_failed_signal_connected_ = false;
   bool is_disk_import_progress_signal_connected_ = false;
 
   // Note: This should remain the last member so it'll be destroyed and
diff --git a/chromeos/ash/components/dbus/concierge/concierge_client.h b/chromeos/ash/components/dbus/concierge/concierge_client.h
index 1dbdfb3..96cd209 100644
--- a/chromeos/ash/components/dbus/concierge/concierge_client.h
+++ b/chromeos/ash/components/dbus/concierge/concierge_client.h
@@ -48,20 +48,6 @@
     virtual ~VmObserver() = default;
   };
 
-  // Used for observing all concierge signals related to running
-  // containers (e.g. startup).
-  class ContainerObserver {
-   public:
-    // OnContainerStartupFailed is signaled by Concierge after the long-running
-    // container startup process's failure is detected. Note the signal protocol
-    // buffer type is the same as in OnContainerStarted.
-    virtual void OnContainerStartupFailed(
-        const vm_tools::concierge::ContainerStartedSignal& signal) = 0;
-
-   protected:
-    virtual ~ContainerObserver() = default;
-  };
-
   // Used for observing all concierge signals related to VM disk image
   // operations, e.g. importing.
   class DiskImageObserver {
@@ -89,11 +75,6 @@
   // Removes an observer if added.
   virtual void RemoveVmObserver(VmObserver* observer) = 0;
 
-  // Adds an observer for container startup.
-  virtual void AddContainerObserver(ContainerObserver* observer) = 0;
-  // Removes an observer if added.
-  virtual void RemoveContainerObserver(ContainerObserver* observer) = 0;
-
   // Adds an observer for disk image operations.
   virtual void AddDiskImageObserver(DiskImageObserver* observer) = 0;
   // Adds an observer for disk image operations.
@@ -104,10 +85,6 @@
   virtual bool IsVmStartedSignalConnected() = 0;
   virtual bool IsVmStoppedSignalConnected() = 0;
 
-  // IsContainerStartupFailedSignalConnected must return true before
-  // StartContainer is called.
-  virtual bool IsContainerStartupFailedSignalConnected() = 0;
-
   // IsDiskImageProgressSignalConnected must return true before
   // ImportDiskImage is called.
   virtual bool IsDiskImageProgressSignalConnected() = 0;
diff --git a/chromeos/ash/components/dbus/concierge/fake_concierge_client.cc b/chromeos/ash/components/dbus/concierge/fake_concierge_client.cc
index 9905850..13a23f92 100644
--- a/chromeos/ash/components/dbus/concierge/fake_concierge_client.cc
+++ b/chromeos/ash/components/dbus/concierge/fake_concierge_client.cc
@@ -65,14 +65,6 @@
   vm_observer_list_.RemoveObserver(observer);
 }
 
-void FakeConciergeClient::AddContainerObserver(ContainerObserver* observer) {
-  container_observer_list_.AddObserver(observer);
-}
-
-void FakeConciergeClient::RemoveContainerObserver(ContainerObserver* observer) {
-  container_observer_list_.RemoveObserver(observer);
-}
-
 void FakeConciergeClient::AddDiskImageObserver(DiskImageObserver* observer) {
   disk_image_observer_list_.AddObserver(observer);
 }
@@ -89,10 +81,6 @@
   return is_vm_stopped_signal_connected_;
 }
 
-bool FakeConciergeClient::IsContainerStartupFailedSignalConnected() {
-  return is_container_startup_failed_signal_connected_;
-}
-
 bool FakeConciergeClient::IsDiskImageProgressSignalConnected() {
   return is_disk_image_progress_signal_connected_;
 }
diff --git a/chromeos/ash/components/dbus/concierge/fake_concierge_client.h b/chromeos/ash/components/dbus/concierge/fake_concierge_client.h
index cec671a..34a71b4 100644
--- a/chromeos/ash/components/dbus/concierge/fake_concierge_client.h
+++ b/chromeos/ash/components/dbus/concierge/fake_concierge_client.h
@@ -32,14 +32,11 @@
   void RemoveObserver(Observer* observer) override;
   void AddVmObserver(VmObserver* observer) override;
   void RemoveVmObserver(VmObserver* observer) override;
-  void AddContainerObserver(ContainerObserver* observer) override;
-  void RemoveContainerObserver(ContainerObserver* observer) override;
   void AddDiskImageObserver(DiskImageObserver* observer) override;
   void RemoveDiskImageObserver(DiskImageObserver* observer) override;
 
   bool IsVmStartedSignalConnected() override;
   bool IsVmStoppedSignalConnected() override;
-  bool IsContainerStartupFailedSignalConnected() override;
   bool IsDiskImageProgressSignalConnected() override;
   void CreateDiskImage(
       const vm_tools::concierge::CreateDiskImageRequest& request,
@@ -144,10 +141,6 @@
   const base::ObserverList<VmObserver>::Unchecked& vm_observer_list() const {
     return vm_observer_list_;
   }
-  const base::ObserverList<ContainerObserver>::Unchecked&
-  container_observer_list() const {
-    return container_observer_list_;
-  }
   const base::ObserverList<DiskImageObserver>::Unchecked&
   disk_image_observer_list() const {
     return disk_image_observer_list_;
@@ -199,9 +192,6 @@
   void set_vm_stopped_signal_connected(bool connected) {
     is_vm_stopped_signal_connected_ = connected;
   }
-  void set_container_startup_failed_signal_connected(bool connected) {
-    is_container_startup_failed_signal_connected_ = connected;
-  }
   void set_disk_image_progress_signal_connected(bool connected) {
     is_disk_image_progress_signal_connected_ = connected;
   }
@@ -370,7 +360,6 @@
 
   bool is_vm_started_signal_connected_ = true;
   bool is_vm_stopped_signal_connected_ = true;
-  bool is_container_startup_failed_signal_connected_ = true;
   bool is_disk_image_progress_signal_connected_ = true;
 
   bool wait_for_service_to_be_available_response_ = true;
@@ -424,9 +413,6 @@
   base::ObserverList<VmObserver>::Unchecked vm_observer_list_{
       ConciergeClient::kObserverListPolicy};
 
-  base::ObserverList<ContainerObserver>::Unchecked container_observer_list_{
-      ConciergeClient::kObserverListPolicy};
-
   base::ObserverList<DiskImageObserver>::Unchecked disk_image_observer_list_{
       ConciergeClient::kObserverListPolicy};
 
diff --git a/chromeos/dbus/oobe_config/BUILD.gn b/chromeos/ash/components/dbus/oobe_config/BUILD.gn
similarity index 87%
rename from chromeos/dbus/oobe_config/BUILD.gn
rename to chromeos/ash/components/dbus/oobe_config/BUILD.gn
index e18f0cf..8f03b59 100644
--- a/chromeos/dbus/oobe_config/BUILD.gn
+++ b/chromeos/ash/components/dbus/oobe_config/BUILD.gn
@@ -8,8 +8,8 @@
 assert(is_chromeos_ash, "Non-Chrome-OS builds must not depend on //chromeos")
 
 component("oobe_config") {
-  output_name = "chromeos_oobe_config"
-  defines = [ "IS_CHROMEOS_DBUS_OOBE_CONFIG_IMPL" ]
+  output_name = "ash_oobe_config"
+  defines = [ "IS_ASH_DBUS_OOBE_CONFIG_IMPL" ]
   deps = [
     ":proto",
     "//base",
@@ -44,5 +44,5 @@
   sources =
       [ "//third_party/cros_system_api/dbus/oobe_config/oobe_config.proto" ]
 
-  proto_out_dir = "chromeos/dbus/oobe_config"
+  proto_out_dir = "chromeos/ash/components/dbus/oobe_config"
 }
diff --git a/chromeos/dbus/oobe_config/fake_oobe_configuration_client.cc b/chromeos/ash/components/dbus/oobe_config/fake_oobe_configuration_client.cc
similarity index 89%
rename from chromeos/dbus/oobe_config/fake_oobe_configuration_client.cc
rename to chromeos/ash/components/dbus/oobe_config/fake_oobe_configuration_client.cc
index 18c5647..57c2acec 100644
--- a/chromeos/dbus/oobe_config/fake_oobe_configuration_client.cc
+++ b/chromeos/ash/components/dbus/oobe_config/fake_oobe_configuration_client.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 "chromeos/dbus/oobe_config/fake_oobe_configuration_client.h"
+#include "chromeos/ash/components/dbus/oobe_config/fake_oobe_configuration_client.h"
 
 #include <string>
 
@@ -26,14 +26,14 @@
 }
 
 void OnConfigurationLoaded(
-    chromeos::OobeConfigurationClient::ConfigurationCallback callback,
+    ash::OobeConfigurationClient::ConfigurationCallback callback,
     const std::string& configuration) {
   std::move(callback).Run(!configuration.empty(), configuration);
 }
 
 }  // namespace
 
-namespace chromeos {
+namespace ash {
 
 FakeOobeConfigurationClient::FakeOobeConfigurationClient() = default;
 
@@ -59,4 +59,4 @@
       base::BindOnce(&OnConfigurationLoaded, std::move(callback)));
 }
 
-}  // namespace chromeos
+}  // namespace ash
diff --git a/chromeos/dbus/oobe_config/fake_oobe_configuration_client.h b/chromeos/ash/components/dbus/oobe_config/fake_oobe_configuration_client.h
similarity index 63%
rename from chromeos/dbus/oobe_config/fake_oobe_configuration_client.h
rename to chromeos/ash/components/dbus/oobe_config/fake_oobe_configuration_client.h
index 0a8ba9e..1313e621 100644
--- a/chromeos/dbus/oobe_config/fake_oobe_configuration_client.h
+++ b/chromeos/ash/components/dbus/oobe_config/fake_oobe_configuration_client.h
@@ -2,17 +2,17 @@
 // Use of this source code is governed by a BSD-style license that can be
 // found in the LICENSE file.
 
-#ifndef CHROMEOS_DBUS_OOBE_CONFIG_FAKE_OOBE_CONFIGURATION_CLIENT_H_
-#define CHROMEOS_DBUS_OOBE_CONFIG_FAKE_OOBE_CONFIGURATION_CLIENT_H_
+#ifndef CHROMEOS_ASH_COMPONENTS_DBUS_OOBE_CONFIG_FAKE_OOBE_CONFIGURATION_CLIENT_H_
+#define CHROMEOS_ASH_COMPONENTS_DBUS_OOBE_CONFIG_FAKE_OOBE_CONFIGURATION_CLIENT_H_
 
 #include "base/component_export.h"
-#include "chromeos/dbus/oobe_config/oobe_configuration_client.h"
+#include "chromeos/ash/components/dbus/oobe_config/oobe_configuration_client.h"
 
-namespace chromeos {
+namespace ash {
 
 // A fake implementation of OobeConfigurationClient, provides configuration
 // specified via command-line flag.
-class COMPONENT_EXPORT(CHROMEOS_DBUS_OOBE_CONFIG) FakeOobeConfigurationClient
+class COMPONENT_EXPORT(ASH_DBUS_OOBE_CONFIG) FakeOobeConfigurationClient
     : public OobeConfigurationClient {
  public:
   FakeOobeConfigurationClient();
@@ -29,6 +29,6 @@
   void CheckForOobeConfiguration(ConfigurationCallback callback) override;
 };
 
-}  // namespace chromeos
+}  // namespace ash
 
-#endif  // CHROMEOS_DBUS_OOBE_CONFIG_FAKE_OOBE_CONFIGURATION_CLIENT_H_
+#endif  // CHROMEOS_ASH_COMPONENTS_DBUS_OOBE_CONFIG_FAKE_OOBE_CONFIGURATION_CLIENT_H_
diff --git a/chromeos/dbus/oobe_config/oobe_configuration_client.cc b/chromeos/ash/components/dbus/oobe_config/oobe_configuration_client.cc
similarity index 92%
rename from chromeos/dbus/oobe_config/oobe_configuration_client.cc
rename to chromeos/ash/components/dbus/oobe_config/oobe_configuration_client.cc
index bc2f081..24301e2 100644
--- a/chromeos/dbus/oobe_config/oobe_configuration_client.cc
+++ b/chromeos/ash/components/dbus/oobe_config/oobe_configuration_client.cc
@@ -2,21 +2,21 @@
 // Use of this source code is governed by a BSD-style license that can be
 // found in the LICENSE file.
 
-#include "chromeos/dbus/oobe_config/oobe_configuration_client.h"
+#include "chromeos/ash/components/dbus/oobe_config/oobe_configuration_client.h"
 
 #include <memory>
 
 #include "base/bind.h"
 #include "base/logging.h"
-#include "chromeos/dbus/oobe_config/fake_oobe_configuration_client.h"
-#include "chromeos/dbus/oobe_config/oobe_config.pb.h"
+#include "chromeos/ash/components/dbus/oobe_config/fake_oobe_configuration_client.h"
+#include "chromeos/ash/components/dbus/oobe_config/oobe_config.pb.h"
 #include "dbus/bus.h"
 #include "dbus/message.h"
 #include "dbus/object_path.h"
 #include "dbus/object_proxy.h"
 #include "third_party/cros_system_api/dbus/service_constants.h"
 
-namespace chromeos {
+namespace ash {
 namespace {
 
 OobeConfigurationClient* g_instance = nullptr;
@@ -124,4 +124,4 @@
   g_instance = nullptr;
 }
 
-}  // namespace chromeos
+}  // namespace ash
diff --git a/chromeos/dbus/oobe_config/oobe_configuration_client.h b/chromeos/ash/components/dbus/oobe_config/oobe_configuration_client.h
similarity index 82%
rename from chromeos/dbus/oobe_config/oobe_configuration_client.h
rename to chromeos/ash/components/dbus/oobe_config/oobe_configuration_client.h
index 8e14934..91f0279 100644
--- a/chromeos/dbus/oobe_config/oobe_configuration_client.h
+++ b/chromeos/ash/components/dbus/oobe_config/oobe_configuration_client.h
@@ -2,8 +2,8 @@
 // Use of this source code is governed by a BSD-style license that can be
 // found in the LICENSE file.
 
-#ifndef CHROMEOS_DBUS_OOBE_CONFIG_OOBE_CONFIGURATION_CLIENT_H_
-#define CHROMEOS_DBUS_OOBE_CONFIG_OOBE_CONFIGURATION_CLIENT_H_
+#ifndef CHROMEOS_ASH_COMPONENTS_DBUS_OOBE_CONFIG_OOBE_CONFIGURATION_CLIENT_H_
+#define CHROMEOS_ASH_COMPONENTS_DBUS_OOBE_CONFIG_OOBE_CONFIGURATION_CLIENT_H_
 
 #include <string>
 
@@ -11,13 +11,13 @@
 #include "base/component_export.h"
 #include "chromeos/dbus/common/dbus_client.h"
 
-namespace chromeos {
+namespace ash {
 
 // Client for calling OobeConfiguration dbus service. The service provides
 // verified OOBE configuration, that allows to automate out-of-box experience.
 // This configuration comes either from the state before power wash, or from
 // USB stick during USB-based enrollment flow.
-class COMPONENT_EXPORT(CHROMEOS_DBUS_OOBE_CONFIG) OobeConfigurationClient
+class COMPONENT_EXPORT(ASH_DBUS_OOBE_CONFIG) OobeConfigurationClient
     : public DBusClient {
  public:
   using ConfigurationCallback =
@@ -50,6 +50,6 @@
   ~OobeConfigurationClient() override;
 };
 
-}  // namespace chromeos
+}  // namespace ash
 
-#endif  // CHROMEOS_DBUS_OOBE_CONFIG_OOBE_CONFIGURATION_CLIENT_H_
+#endif  // CHROMEOS_ASH_COMPONENTS_DBUS_OOBE_CONFIG_OOBE_CONFIGURATION_CLIENT_H_
diff --git a/chromeos/dbus/oobe_config/oobe_configuration_client_unittest.cc b/chromeos/ash/components/dbus/oobe_config/oobe_configuration_client_unittest.cc
similarity index 97%
rename from chromeos/dbus/oobe_config/oobe_configuration_client_unittest.cc
rename to chromeos/ash/components/dbus/oobe_config/oobe_configuration_client_unittest.cc
index cef7506..214f7281 100644
--- a/chromeos/dbus/oobe_config/oobe_configuration_client_unittest.cc
+++ b/chromeos/ash/components/dbus/oobe_config/oobe_configuration_client_unittest.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 "chromeos/dbus/oobe_config/oobe_configuration_client.h"
+#include "chromeos/ash/components/dbus/oobe_config/oobe_configuration_client.h"
 
 #include <memory>
 #include <string>
@@ -10,7 +10,7 @@
 #include "base/bind.h"
 #include "base/run_loop.h"
 #include "base/test/task_environment.h"
-#include "chromeos/dbus/oobe_config/oobe_config.pb.h"
+#include "chromeos/ash/components/dbus/oobe_config/oobe_config.pb.h"
 #include "dbus/message.h"
 #include "dbus/mock_bus.h"
 #include "dbus/mock_object_proxy.h"
@@ -23,7 +23,7 @@
 using ::testing::Invoke;
 using ::testing::Return;
 
-namespace chromeos {
+namespace ash {
 
 namespace {
 
@@ -202,4 +202,4 @@
   base::RunLoop().RunUntilIdle();
 }
 
-}  // namespace chromeos
+}  // namespace ash
diff --git a/chromeos/dbus/resourced/BUILD.gn b/chromeos/ash/components/dbus/resourced/BUILD.gn
similarity index 77%
rename from chromeos/dbus/resourced/BUILD.gn
rename to chromeos/ash/components/dbus/resourced/BUILD.gn
index 34b2d8d..19d12eb4 100644
--- a/chromeos/dbus/resourced/BUILD.gn
+++ b/chromeos/ash/components/dbus/resourced/BUILD.gn
@@ -2,7 +2,9 @@
 # Use of this source code is governed by a BSD-style license that can be
 # found in the LICENSE file.
 
-assert(is_chromeos, "Non-Chrome-OS builds cannot depend on //chromeos")
+import("//build/config/chromeos/ui_mode.gni")
+
+assert(is_chromeos_ash, "Non-Chrome-OS builds cannot depend on //chromeos/ash")
 
 component("resourced") {
   defines = [ "IS_RESOURCED_IMPL" ]
diff --git a/chromeos/dbus/resourced/OWNERS b/chromeos/ash/components/dbus/resourced/OWNERS
similarity index 100%
rename from chromeos/dbus/resourced/OWNERS
rename to chromeos/ash/components/dbus/resourced/OWNERS
diff --git a/chromeos/dbus/resourced/fake_resourced_client.cc b/chromeos/ash/components/dbus/resourced/fake_resourced_client.cc
similarity index 94%
rename from chromeos/dbus/resourced/fake_resourced_client.cc
rename to chromeos/ash/components/dbus/resourced/fake_resourced_client.cc
index c00fe77..d760eb9 100644
--- a/chromeos/dbus/resourced/fake_resourced_client.cc
+++ b/chromeos/ash/components/dbus/resourced/fake_resourced_client.cc
@@ -2,12 +2,12 @@
 // Use of this source code is governed by a BSD-style license that can be
 // found in the LICENSE file.
 
-#include "chromeos/dbus/resourced/fake_resourced_client.h"
+#include "chromeos/ash/components/dbus/resourced/fake_resourced_client.h"
 
 #include "base/bind.h"
 #include "base/threading/thread_task_runner_handle.h"
 
-namespace chromeos {
+namespace ash {
 
 FakeResourcedClient::FakeResourcedClient() = default;
 FakeResourcedClient::~FakeResourcedClient() = default;
@@ -66,4 +66,4 @@
   }
 }
 
-}  // namespace chromeos
+}  // namespace ash
diff --git a/chromeos/dbus/resourced/fake_resourced_client.h b/chromeos/ash/components/dbus/resourced/fake_resourced_client.h
similarity index 86%
rename from chromeos/dbus/resourced/fake_resourced_client.h
rename to chromeos/ash/components/dbus/resourced/fake_resourced_client.h
index 2a17082..882e463 100644
--- a/chromeos/dbus/resourced/fake_resourced_client.h
+++ b/chromeos/ash/components/dbus/resourced/fake_resourced_client.h
@@ -2,14 +2,14 @@
 // Use of this source code is governed by a BSD-style license that can be
 // found in the LICENSE file.
 
-#ifndef CHROMEOS_DBUS_RESOURCED_FAKE_RESOURCED_CLIENT_H_
-#define CHROMEOS_DBUS_RESOURCED_FAKE_RESOURCED_CLIENT_H_
+#ifndef CHROMEOS_ASH_COMPONENTS_DBUS_RESOURCED_FAKE_RESOURCED_CLIENT_H_
+#define CHROMEOS_ASH_COMPONENTS_DBUS_RESOURCED_FAKE_RESOURCED_CLIENT_H_
 
 #include "base/component_export.h"
 #include "base/observer_list.h"
-#include "chromeos/dbus/resourced/resourced_client.h"
+#include "chromeos/ash/components/dbus/resourced/resourced_client.h"
 
-namespace chromeos {
+namespace ash {
 
 class COMPONENT_EXPORT(RESOURCED) FakeResourcedClient : public ResourcedClient {
  public:
@@ -70,6 +70,6 @@
   base::ObserverList<ArcVmObserver> arcvm_observers_;
 };
 
-}  // namespace chromeos
+}  // namespace ash
 
-#endif  // CHROMEOS_DBUS_RESOURCED_FAKE_RESOURCED_CLIENT_H_
+#endif  // CHROMEOS_ASH_COMPONENTS_DBUS_RESOURCED_FAKE_RESOURCED_CLIENT_H_
diff --git a/chromeos/dbus/resourced/resourced_client.cc b/chromeos/ash/components/dbus/resourced/resourced_client.cc
similarity index 98%
rename from chromeos/dbus/resourced/resourced_client.cc
rename to chromeos/ash/components/dbus/resourced/resourced_client.cc
index ed76928..7768080b 100644
--- a/chromeos/dbus/resourced/resourced_client.cc
+++ b/chromeos/ash/components/dbus/resourced/resourced_client.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 "chromeos/dbus/resourced/resourced_client.h"
+#include "chromeos/ash/components/dbus/resourced/resourced_client.h"
 
 #include "base/check_op.h"
 #include "base/logging.h"
@@ -11,13 +11,13 @@
 #include "base/task/thread_pool.h"
 #include "base/threading/sequenced_task_runner_handle.h"
 #include "base/time/time.h"
-#include "chromeos/dbus/resourced/fake_resourced_client.h"
+#include "chromeos/ash/components/dbus/resourced/fake_resourced_client.h"
 #include "dbus/bus.h"
 #include "dbus/message.h"
 #include "dbus/object_proxy.h"
 #include "third_party/cros_system_api/dbus/resource_manager/dbus-constants.h"
 
-namespace chromeos {
+namespace ash {
 namespace {
 
 // Resource manager D-Bus method calls are all simple operations and should
@@ -337,4 +337,4 @@
   return g_instance;
 }
 
-}  // namespace chromeos
+}  // namespace ash
diff --git a/chromeos/dbus/resourced/resourced_client.h b/chromeos/ash/components/dbus/resourced/resourced_client.h
similarity index 92%
rename from chromeos/dbus/resourced/resourced_client.h
rename to chromeos/ash/components/dbus/resourced/resourced_client.h
index 9bb4189..d2e2cf8 100644
--- a/chromeos/dbus/resourced/resourced_client.h
+++ b/chromeos/ash/components/dbus/resourced/resourced_client.h
@@ -2,8 +2,8 @@
 // Use of this source code is governed by a BSD-style license that can be
 // found in the LICENSE file.
 
-#ifndef CHROMEOS_DBUS_RESOURCED_RESOURCED_CLIENT_H_
-#define CHROMEOS_DBUS_RESOURCED_RESOURCED_CLIENT_H_
+#ifndef CHROMEOS_ASH_COMPONENTS_DBUS_RESOURCED_RESOURCED_CLIENT_H_
+#define CHROMEOS_ASH_COMPONENTS_DBUS_RESOURCED_RESOURCED_CLIENT_H_
 
 #include "base/component_export.h"
 #include "base/observer_list_types.h"
@@ -15,7 +15,7 @@
 class Bus;
 }
 
-namespace chromeos {
+namespace ash {
 
 // ResourcedClient is used to communicate with the org.chromium.ResourceManager
 // service. The browser uses the ResourceManager service to get resource usage
@@ -124,11 +124,6 @@
   virtual ~ResourcedClient();
 };
 
-}  // namespace chromeos
-
-// TODO(https://crbug.com/1164001): remove when moved to ash.
-namespace ash {
-using ::chromeos::ResourcedClient;
 }  // namespace ash
 
-#endif  // CHROMEOS_DBUS_RESOURCED_RESOURCED_CLIENT_H_
+#endif  // CHROMEOS_ASH_COMPONENTS_DBUS_RESOURCED_RESOURCED_CLIENT_H_
diff --git a/chromeos/ash/components/memory/BUILD.gn b/chromeos/ash/components/memory/BUILD.gn
index b912e8c..d47bcb3 100644
--- a/chromeos/ash/components/memory/BUILD.gn
+++ b/chromeos/ash/components/memory/BUILD.gn
@@ -12,9 +12,9 @@
   defines = [ "IS_ASH_MEMORY_IMPL" ]
   deps = [
     "//base",
+    "//chromeos/ash/components/dbus/resourced:resourced",
     "//chromeos/dbus",
     "//chromeos/dbus/constants",
-    "//chromeos/dbus/resourced:resourced",
     "//components/memory_pressure",
     "//crypto",
     "//services/resource_coordinator/public/cpp/memory_instrumentation",
diff --git a/chromeos/ash/components/memory/DEPS b/chromeos/ash/components/memory/DEPS
index f7828b3..41911b1 100644
--- a/chromeos/ash/components/memory/DEPS
+++ b/chromeos/ash/components/memory/DEPS
@@ -3,6 +3,7 @@
   "+third_party/zlib/google",
   "+third_party/re2",
   "+services/resource_coordinator",
+  "+chromeos/ash/components/dbus/resourced",
   "+components/memory_pressure",
   "+content/public/child",
 ]
diff --git a/chromeos/ash/components/memory/pressure/system_memory_pressure_evaluator.cc b/chromeos/ash/components/memory/pressure/system_memory_pressure_evaluator.cc
index a36922a3..8e24740 100644
--- a/chromeos/ash/components/memory/pressure/system_memory_pressure_evaluator.cc
+++ b/chromeos/ash/components/memory/pressure/system_memory_pressure_evaluator.cc
@@ -36,7 +36,7 @@
   DCHECK(g_system_evaluator == nullptr);
   g_system_evaluator = this;
 
-  chromeos::ResourcedClient* client = chromeos::ResourcedClient::Get();
+  ResourcedClient* client = ResourcedClient::Get();
   if (client) {
     client->AddObserver(this);
   }
@@ -44,7 +44,7 @@
 
 SystemMemoryPressureEvaluator::~SystemMemoryPressureEvaluator() {
   DCHECK(g_system_evaluator);
-  chromeos::ResourcedClient* client = chromeos::ResourcedClient::Get();
+  ResourcedClient* client = ResourcedClient::Get();
   if (client) {
     client->RemoveObserver(this);
   }
@@ -61,16 +61,16 @@
 }
 
 void SystemMemoryPressureEvaluator::OnMemoryPressure(
-    chromeos::ResourcedClient::PressureLevel level,
+    ResourcedClient::PressureLevel level,
     uint64_t reclaim_target_kb) {
   DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_);
 
   base::MemoryPressureListener::MemoryPressureLevel listener_level;
-  if (level == chromeos::ResourcedClient::PressureLevel::CRITICAL) {
+  if (level == ResourcedClient::PressureLevel::CRITICAL) {
     listener_level =
         base::MemoryPressureListener::MEMORY_PRESSURE_LEVEL_CRITICAL;
     cached_reclaim_target_kb_.store(reclaim_target_kb);
-  } else if (level == chromeos::ResourcedClient::PressureLevel::MODERATE) {
+  } else if (level == ResourcedClient::PressureLevel::MODERATE) {
     listener_level =
         base::MemoryPressureListener::MEMORY_PRESSURE_LEVEL_MODERATE;
     cached_reclaim_target_kb_.store(0);
diff --git a/chromeos/ash/components/memory/pressure/system_memory_pressure_evaluator.h b/chromeos/ash/components/memory/pressure/system_memory_pressure_evaluator.h
index bafba1d6..7b36d07 100644
--- a/chromeos/ash/components/memory/pressure/system_memory_pressure_evaluator.h
+++ b/chromeos/ash/components/memory/pressure/system_memory_pressure_evaluator.h
@@ -8,7 +8,7 @@
 #include "base/component_export.h"
 #include "base/memory/weak_ptr.h"
 #include "base/time/time.h"
-#include "chromeos/dbus/resourced/resourced_client.h"
+#include "chromeos/ash/components/dbus/resourced/resourced_client.h"
 #include "components/memory_pressure/memory_pressure_voter.h"
 #include "components/memory_pressure/system_memory_pressure_evaluator.h"
 
@@ -23,7 +23,7 @@
 // action to reduce memory resources accordingly.
 class COMPONENT_EXPORT(ASH_MEMORY) SystemMemoryPressureEvaluator
     : public memory_pressure::SystemMemoryPressureEvaluator,
-      public chromeos::ResourcedClient::Observer {
+      public ResourcedClient::Observer {
  public:
   explicit SystemMemoryPressureEvaluator(
       std::unique_ptr<memory_pressure::MemoryPressureVoter> voter);
@@ -46,7 +46,7 @@
       std::unique_ptr<memory_pressure::MemoryPressureVoter> voter);
 
   // Implements ResourcedClient::Observer, protected for testing.
-  void OnMemoryPressure(chromeos::ResourcedClient::PressureLevel level,
+  void OnMemoryPressure(ResourcedClient::PressureLevel level,
                         uint64_t reclaim_target_kb) override;
 
  private:
diff --git a/chromeos/ash/components/memory/pressure/system_memory_pressure_evaluator_unittest.cc b/chromeos/ash/components/memory/pressure/system_memory_pressure_evaluator_unittest.cc
index 4e3060a..466463e 100644
--- a/chromeos/ash/components/memory/pressure/system_memory_pressure_evaluator_unittest.cc
+++ b/chromeos/ash/components/memory/pressure/system_memory_pressure_evaluator_unittest.cc
@@ -20,13 +20,13 @@
 #include "base/threading/thread_task_runner_handle.h"
 #include "testing/gtest/include/gtest/gtest.h"
 
-using PressureLevel = chromeos::ResourcedClient::PressureLevel;
-
 namespace ash {
 namespace memory {
 
 namespace {
 
+using PressureLevel = ResourcedClient::PressureLevel;
+
 // Processes PressureCallback calls by just storing the sequence of events so we
 // can validate that we received the expected pressure levels as the test runs.
 void PressureCallback(
diff --git a/chromeos/ash/components/memory/swap_configuration.cc b/chromeos/ash/components/memory/swap_configuration.cc
index c940dc2..7846f12 100644
--- a/chromeos/ash/components/memory/swap_configuration.cc
+++ b/chromeos/ash/components/memory/swap_configuration.cc
@@ -8,9 +8,9 @@
 #include "base/component_export.h"
 #include "base/feature_list.h"
 #include "base/metrics/field_trial_params.h"
+#include "chromeos/ash/components/dbus/resourced/resourced_client.h"
 #include "chromeos/dbus/dbus_thread_manager.h"
 #include "chromeos/dbus/debug_daemon/debug_daemon_client.h"
-#include "chromeos/dbus/resourced/resourced_client.h"
 
 namespace ash {
 
@@ -179,7 +179,7 @@
 }
 
 void ConfigureResourcedPressureThreshold() {
-  if (!chromeos::ResourcedClient::Get()) {
+  if (!ResourcedClient::Get()) {
     return;
   }
 
@@ -204,7 +204,7 @@
     LOG(WARNING) << "Overriding memory thresholds with values "
                  << (critical_bps / 100.0) << "% and " << (moderate_bps / 100.0)
                  << "%";
-    chromeos::ResourcedClient::Get()->SetMemoryMarginsBps(
+    ResourcedClient::Get()->SetMemoryMarginsBps(
         critical_bps, moderate_bps, base::BindOnce(&OnMemoryMarginsSet));
   }
 }
diff --git a/chromeos/crosapi/mojom/launcher_search.mojom b/chromeos/crosapi/mojom/launcher_search.mojom
index 0835af4..41528743 100644
--- a/chromeos/crosapi/mojom/launcher_search.mojom
+++ b/chromeos/crosapi/mojom/launcher_search.mojom
@@ -36,7 +36,7 @@
 };
 
 // Struct represents search result.
-// Next min ID: 19
+// Next min ID: 20
 [Stable]
 struct SearchResult {
   // Type of the result. Used to distinguish between different types of result.
@@ -76,6 +76,9 @@
   // Favicon of the result.
   gfx.mojom.ImageSkia? favicon@8;
 
+  // The accessibility label to use for the second image line, if one exists.
+  [MinVersion=3] mojo_base.mojom.String16? description_a11y_label@19;
+
   // The contents of the result. Used to display the result.
   mojo_base.mojom.String16? contents@9;
   // Text type of the contents, if any.
diff --git a/chromeos/dbus/BUILD.gn b/chromeos/dbus/BUILD.gn
index c126a177..19839ab 100644
--- a/chromeos/dbus/BUILD.gn
+++ b/chromeos/dbus/BUILD.gn
@@ -35,8 +35,6 @@
     "//chromeos/dbus/gnubby",
     "//chromeos/dbus/image_burner",
     "//chromeos/dbus/image_loader",
-    "//chromeos/dbus/oobe_config",
-    "//chromeos/dbus/oobe_config:proto",
     "//chromeos/dbus/runtime_probe",
     "//chromeos/dbus/runtime_probe:proto",
     "//chromeos/dbus/util",
@@ -87,7 +85,6 @@
     "//chromeos/dbus/fwupd:test_support",
     "//chromeos/dbus/gnubby:unit_tests",
     "//chromeos/dbus/hermes:test_support",
-    "//chromeos/dbus/oobe_config:unit_tests",
     "//chromeos/dbus/power:power_manager_proto",
     "//chromeos/dbus/power:test_support",
     "//chromeos/dbus/shill:test_support",
diff --git a/components/exo/wayland/clients/explicit_synchronization.cc b/components/exo/wayland/clients/explicit_synchronization.cc
index 9c54034..8640923 100644
--- a/components/exo/wayland/clients/explicit_synchronization.cc
+++ b/components/exo/wayland/clients/explicit_synchronization.cc
@@ -18,6 +18,7 @@
 #include "third_party/skia/include/core/SkCanvas.h"
 #include "third_party/skia/include/core/SkSurface.h"
 #include "third_party/skia/include/gpu/GrDirectContext.h"
+#include "ui/gfx/gpu_fence.h"
 #include "ui/gl/gl_bindings.h"
 
 namespace exo {
diff --git a/components/exo/wayland/zwp_text_input_manager.cc b/components/exo/wayland/zwp_text_input_manager.cc
index 0d8cbb3..94a6594 100644
--- a/components/exo/wayland/zwp_text_input_manager.cc
+++ b/components/exo/wayland/zwp_text_input_manager.cc
@@ -22,6 +22,7 @@
 #include "ui/base/ime/utf_offset.h"
 #include "ui/base/wayland/wayland_server_input_types.h"
 #include "ui/events/event.h"
+#include "ui/events/keycodes/dom/dom_code.h"
 #include "ui/events/keycodes/dom/keycode_converter.h"
 #include "ui/events/ozone/layout/xkb/xkb_modifier_converter.h"
 
@@ -38,6 +39,21 @@
     XKB_MOD_NAME_NUM,   "Mod3",
     XKB_MOD_NAME_LOGO,  "Mod5",
 };
+uint32_t keyCharToKeySym(char16_t keychar) {
+  // TODO(b/237461655): Lacros fails to handle key presses properly when the
+  // key character is not present in the keyboard layout.
+  if ((keychar >= 0x20 && keychar <= 0x7e) ||
+      (keychar >= 0xa0 && keychar <= 0xff)) {
+    return keychar;
+  }
+  // The spec also requires event.GetCharacter() <= 0x10ffff but this is
+  // always true due to the type of event.GetCharacter().
+  if (keychar >= 0x100) {
+    return keychar + 0x01000000;
+  }
+  // keysym 0 is used for unidentified events
+  return 0;
+}
 
 ////////////////////////////////////////////////////////////////////////////////
 // text_input_v1 interface:
@@ -138,10 +154,24 @@
   }
 
   void SendKey(const ui::KeyEvent& event) override {
-    uint32_t keysym = xkb_tracker_->GetKeysym(
-        ui::KeycodeConverter::DomCodeToNativeKeycode(event.code()));
-    bool pressed = (event.type() == ui::ET_KEY_PRESSED);
+    uint32_t keysym =
+        event.code() != ui::DomCode::NONE
+            ? xkb_tracker_->GetKeysym(
+                  ui::KeycodeConverter::DomCodeToNativeKeycode(event.code()))
+            : 0;
+    // Some artificial key events (e.g. from virtual keyboard) do not set code,
+    // so must be handled separately.
+    // https://www.x.org/releases/X11R7.6/doc/xproto/x11protocol.html#keysym_encoding
+    // suggests that we can just directly map some parts of unicode.
+    if (keysym == 0) {
+      keysym = keyCharToKeySym(event.GetCharacter());
+    }
 
+    if (keysym == 0) {
+      VLOG(0) << "Unable to find keysym for: " << event.ToString();
+    }
+
+    bool pressed = (event.type() == ui::ET_KEY_PRESSED);
     zwp_text_input_v1_send_keysym(
         text_input_, TimeTicksToMilliseconds(event.time_stamp()),
         serial_tracker_->GetNextSerial(SerialTracker::EventType::OTHER_EVENT),
diff --git a/components/services/app_service/public/cpp/BUILD.gn b/components/services/app_service/public/cpp/BUILD.gn
index 766a893f..d4eec1b3 100644
--- a/components/services/app_service/public/cpp/BUILD.gn
+++ b/components/services/app_service/public/cpp/BUILD.gn
@@ -280,11 +280,14 @@
   sources = [
     "intent_test_util.cc",
     "intent_test_util.h",
+    "preferred_apps_test_util.cc",
+    "preferred_apps_test_util.h",
   ]
 
   deps = [
     ":app_types",
     ":intents",
+    ":preferred_apps",
     "//components/services/app_service/public/mojom",
   ]
 }
diff --git a/components/services/app_service/public/cpp/app_launch_util.cc b/components/services/app_service/public/cpp/app_launch_util.cc
index cc929fc7..2c9f9a8b 100644
--- a/components/services/app_service/public/cpp/app_launch_util.cc
+++ b/components/services/app_service/public/cpp/app_launch_util.cc
@@ -6,6 +6,74 @@
 
 namespace apps {
 
-// TODO(crbug.com/1253250): Add function for the non mojom window info struct.
+LaunchSource ConvertMojomLaunchSourceToLaunchSource(
+    apps::mojom::LaunchSource mojom_install_source) {
+  switch (mojom_install_source) {
+    case apps::mojom::LaunchSource::kUnknown:
+      return LaunchSource::kUnknown;
+    case apps::mojom::LaunchSource::kFromAppListGrid:
+      return LaunchSource::kFromAppListGrid;
+    case apps::mojom::LaunchSource::kFromAppListGridContextMenu:
+      return LaunchSource::kFromAppListGridContextMenu;
+    case apps::mojom::LaunchSource::kFromAppListQuery:
+      return LaunchSource::kFromAppListQuery;
+    case apps::mojom::LaunchSource::kFromAppListQueryContextMenu:
+      return LaunchSource::kFromAppListQueryContextMenu;
+    case apps::mojom::LaunchSource::kFromAppListRecommendation:
+      return LaunchSource::kFromAppListRecommendation;
+    case apps::mojom::LaunchSource::kFromParentalControls:
+      return LaunchSource::kFromParentalControls;
+    case apps::mojom::LaunchSource::kFromShelf:
+      return LaunchSource::kFromShelf;
+    case apps::mojom::LaunchSource::kFromFileManager:
+      return LaunchSource::kFromFileManager;
+    case apps::mojom::LaunchSource::kFromLink:
+      return LaunchSource::kFromLink;
+    case apps::mojom::LaunchSource::kFromOmnibox:
+      return LaunchSource::kFromOmnibox;
+    case apps::mojom::LaunchSource::kFromChromeInternal:
+      return LaunchSource::kFromChromeInternal;
+    case apps::mojom::LaunchSource::kFromKeyboard:
+      return LaunchSource::kFromKeyboard;
+    case apps::mojom::LaunchSource::kFromOtherApp:
+      return LaunchSource::kFromOtherApp;
+    case apps::mojom::LaunchSource::kFromMenu:
+      return LaunchSource::kFromMenu;
+    case apps::mojom::LaunchSource::kFromInstalledNotification:
+      return LaunchSource::kFromInstalledNotification;
+    case apps::mojom::LaunchSource::kFromTest:
+      return LaunchSource::kFromTest;
+    case apps::mojom::LaunchSource::kFromArc:
+      return LaunchSource::kFromArc;
+    case apps::mojom::LaunchSource::kFromSharesheet:
+      return LaunchSource::kFromSharesheet;
+    case apps::mojom::LaunchSource::kFromReleaseNotesNotification:
+      return LaunchSource::kFromReleaseNotesNotification;
+    case apps::mojom::LaunchSource::kFromFullRestore:
+      return LaunchSource::kFromFullRestore;
+    case apps::mojom::LaunchSource::kFromSmartTextContextMenu:
+      return LaunchSource::kFromSmartTextContextMenu;
+    case apps::mojom::LaunchSource::kFromDiscoverTabNotification:
+      return LaunchSource::kFromDiscoverTabNotification;
+    case apps::mojom::LaunchSource::kFromManagementApi:
+      return LaunchSource::kFromManagementApi;
+    case apps::mojom::LaunchSource::kFromKiosk:
+      return LaunchSource::kFromKiosk;
+    case apps::mojom::LaunchSource::kFromCommandLine:
+      return LaunchSource::kFromCommandLine;
+    case apps::mojom::LaunchSource::kFromBackgroundMode:
+      return LaunchSource::kFromBackgroundMode;
+    case apps::mojom::LaunchSource::kFromNewTabPage:
+      return LaunchSource::kFromNewTabPage;
+    case apps::mojom::LaunchSource::kFromIntentUrl:
+      return LaunchSource::kFromIntentUrl;
+    case apps::mojom::LaunchSource::kFromOsLogin:
+      return LaunchSource::kFromOsLogin;
+    case apps::mojom::LaunchSource::kFromProtocolHandler:
+      return LaunchSource::kFromProtocolHandler;
+    case apps::mojom::LaunchSource::kFromUrlHandler:
+      return LaunchSource::kFromUrlHandler;
+  }
+}
 
 }  // namespace apps
diff --git a/components/services/app_service/public/cpp/app_launch_util.h b/components/services/app_service/public/cpp/app_launch_util.h
index eb9fe7b..e5389fa 100644
--- a/components/services/app_service/public/cpp/app_launch_util.h
+++ b/components/services/app_service/public/cpp/app_launch_util.h
@@ -9,6 +9,53 @@
 
 namespace apps {
 
+// Enumeration of possible app launch sources.
+// This should be kept in sync with metadata/apps/histograms.xml, and
+// LaunchSource in enums.xml.
+// Note the enumeration is used in UMA histogram so entries should not be
+// re-ordered or removed. New entries should be added at the bottom.
+enum class LaunchSource {
+  kUnknown = 0,
+  kFromAppListGrid = 1,              // Grid of apps, not the search box.
+  kFromAppListGridContextMenu = 2,   // Grid of apps; context menu.
+  kFromAppListQuery = 3,             // Query-dependent results (larger icons).
+  kFromAppListQueryContextMenu = 4,  // Query-dependent results; context menu.
+  kFromAppListRecommendation = 5,    // Query-less recommendations (smaller
+                                     // icons).
+  kFromParentalControls = 6,         // Parental Controls Settings Section and
+                                     // Per App time notification.
+  kFromShelf = 7,                    // Shelf.
+  kFromFileManager = 8,              // FileManager.
+  kFromLink = 9,                     // Left-clicking on links in the browser.
+  kFromOmnibox = 10,                 // Enter URL in the Omnibox in the
+                                     // browser.
+  kFromChromeInternal = 11,          // Chrome internal call.
+  kFromKeyboard = 12,                // Keyboard shortcut for opening app.
+  kFromOtherApp = 13,                // Clicking link in another app or webui.
+  kFromMenu = 14,                    // Menu.
+  kFromInstalledNotification = 15,   // Installed notification
+  kFromTest = 16,                    // Test
+  kFromArc = 17,                     // Arc.
+  kFromSharesheet = 18,              // Sharesheet.
+  kFromReleaseNotesNotification = 19,  // Release Notes Notification.
+  kFromFullRestore = 20,               // Full restore.
+  kFromSmartTextContextMenu = 21,      // Smart text selection context menu.
+  kFromDiscoverTabNotification = 22,   // Discover Tab Notification.
+  kFromManagementApi = 23,             // Management API.
+  kFromKiosk = 24,                     // Kiosk.
+  kFromCommandLine = 25,               // Command line.
+  kFromBackgroundMode = 26,            // Background mode.
+  kFromNewTabPage = 27,                // New tab page.
+  kFromIntentUrl = 28,                 // Intent URL.
+  kFromOsLogin = 29,                   // Run on OS login.
+  kFromProtocolHandler = 30,           // Protocol handler.
+  kFromUrlHandler = 31,                // Url handler.
+
+  // Add any new values above this one, and update kMaxValue to the highest
+  // enumerator value.
+  kMaxValue = kFromUrlHandler,
+};
+
 // Don't remove items or change the order of this enum.  It's used in
 // histograms and preferences.
 enum class LaunchContainer {
@@ -24,6 +71,12 @@
   kMaxValue = kLaunchContainerNone,
 };
 
+// TODO(crbug.com/1253250): Remove these functions after migrating to non-mojo
+// AppService.
+COMPONENT_EXPORT(APP_TYPES)
+LaunchSource ConvertMojomLaunchSourceToLaunchSource(
+    apps::mojom::LaunchSource mojom_launch_source);
+
 }  // namespace apps
 
 #endif  // COMPONENTS_SERVICES_APP_SERVICE_PUBLIC_CPP_APP_LAUNCH_UTIL_H_
diff --git a/components/services/app_service/public/cpp/preferred_apps_test_util.cc b/components/services/app_service/public/cpp/preferred_apps_test_util.cc
new file mode 100644
index 0000000..485977d
--- /dev/null
+++ b/components/services/app_service/public/cpp/preferred_apps_test_util.cc
@@ -0,0 +1,38 @@
+// 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.
+
+#include "components/services/app_service/public/cpp/preferred_apps_test_util.h"
+
+#include "base/run_loop.h"
+
+namespace apps_util {
+
+PreferredAppUpdateWaiter::PreferredAppUpdateWaiter(
+    apps::PreferredAppsListHandle& handle) {
+  observation_.Observe(&handle);
+}
+
+PreferredAppUpdateWaiter::~PreferredAppUpdateWaiter() = default;
+
+void PreferredAppUpdateWaiter::WaitForPreferredAppUpdate(
+    const std::string& app_id) {
+  waiting_app_id_ = app_id;
+  run_loop_ = std::make_unique<base::RunLoop>();
+  run_loop_->Run();
+}
+
+// apps::PreferredAppsListHandle::Observer:
+void PreferredAppUpdateWaiter::OnPreferredAppChanged(const std::string& app_id,
+                                                     bool is_preferred_app) {
+  if (run_loop_ && run_loop_->running() && app_id == waiting_app_id_) {
+    run_loop_->Quit();
+  }
+}
+
+void PreferredAppUpdateWaiter::OnPreferredAppsListWillBeDestroyed(
+    apps::PreferredAppsListHandle* handle) {
+  observation_.Reset();
+}
+
+}  // namespace apps_util
diff --git a/components/services/app_service/public/cpp/preferred_apps_test_util.h b/components/services/app_service/public/cpp/preferred_apps_test_util.h
new file mode 100644
index 0000000..6c6d0b3
--- /dev/null
+++ b/components/services/app_service/public/cpp/preferred_apps_test_util.h
@@ -0,0 +1,48 @@
+// 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 COMPONENTS_SERVICES_APP_SERVICE_PUBLIC_CPP_PREFERRED_APPS_TEST_UTIL_H_
+#define COMPONENTS_SERVICES_APP_SERVICE_PUBLIC_CPP_PREFERRED_APPS_TEST_UTIL_H_
+
+#include <memory>
+#include <string>
+
+#include "base/scoped_observation.h"
+#include "components/services/app_service/public/cpp/preferred_apps_list_handle.h"
+
+namespace base {
+class RunLoop;
+}
+
+namespace apps_util {
+
+// Utility to wait for a change in preferred apps settings to be reflected in a
+// PreferredAppsList. This is useful for Lacros Crosapi tests where the
+// preferred apps settings need to be synchronized between processes.
+class PreferredAppUpdateWaiter
+    : public apps::PreferredAppsListHandle::Observer {
+ public:
+  explicit PreferredAppUpdateWaiter(apps::PreferredAppsListHandle& handle);
+  ~PreferredAppUpdateWaiter() override;
+
+  void WaitForPreferredAppUpdate(const std::string& app_id);
+
+  // apps::PreferredAppsListHandle::Observer:
+  void OnPreferredAppChanged(const std::string& app_id,
+                             bool is_preferred_app) override;
+  void OnPreferredAppsListWillBeDestroyed(
+      apps::PreferredAppsListHandle* handle) override;
+
+ private:
+  std::unique_ptr<base::RunLoop> run_loop_;
+  std::string waiting_app_id_;
+
+  base::ScopedObservation<apps::PreferredAppsListHandle,
+                          apps::PreferredAppsListHandle::Observer>
+      observation_{this};
+};
+
+}  // namespace apps_util
+
+#endif  // COMPONENTS_SERVICES_APP_SERVICE_PUBLIC_CPP_PREFERRED_APPS_TEST_UTIL_H_
diff --git a/components/services/app_service/public/cpp/types_util.cc b/components/services/app_service/public/cpp/types_util.cc
index 405251df..14ec633 100644
--- a/components/services/app_service/public/cpp/types_util.cc
+++ b/components/services/app_service/public/cpp/types_util.cc
@@ -38,41 +38,41 @@
   }
 }
 
-bool IsHumanLaunch(apps::mojom::LaunchSource launch_source) {
+bool IsHumanLaunch(apps::LaunchSource launch_source) {
   switch (launch_source) {
-    case apps::mojom::LaunchSource::kFromAppListGrid:
-    case apps::mojom::LaunchSource::kFromAppListGridContextMenu:
-    case apps::mojom::LaunchSource::kFromAppListQuery:
-    case apps::mojom::LaunchSource::kFromAppListQueryContextMenu:
-    case apps::mojom::LaunchSource::kFromAppListRecommendation:
-    case apps::mojom::LaunchSource::kFromParentalControls:
-    case apps::mojom::LaunchSource::kFromShelf:
-    case apps::mojom::LaunchSource::kFromFileManager:
-    case apps::mojom::LaunchSource::kFromLink:
-    case apps::mojom::LaunchSource::kFromOmnibox:
-    case apps::mojom::LaunchSource::kFromKeyboard:
-    case apps::mojom::LaunchSource::kFromOtherApp:
-    case apps::mojom::LaunchSource::kFromMenu:
-    case apps::mojom::LaunchSource::kFromInstalledNotification:
-    case apps::mojom::LaunchSource::kFromSharesheet:
-    case apps::mojom::LaunchSource::kFromReleaseNotesNotification:
-    case apps::mojom::LaunchSource::kFromFullRestore:
-    case apps::mojom::LaunchSource::kFromSmartTextContextMenu:
-    case apps::mojom::LaunchSource::kFromDiscoverTabNotification:
-    case apps::mojom::LaunchSource::kFromCommandLine:
+    case apps::LaunchSource::kFromAppListGrid:
+    case apps::LaunchSource::kFromAppListGridContextMenu:
+    case apps::LaunchSource::kFromAppListQuery:
+    case apps::LaunchSource::kFromAppListQueryContextMenu:
+    case apps::LaunchSource::kFromAppListRecommendation:
+    case apps::LaunchSource::kFromParentalControls:
+    case apps::LaunchSource::kFromShelf:
+    case apps::LaunchSource::kFromFileManager:
+    case apps::LaunchSource::kFromLink:
+    case apps::LaunchSource::kFromOmnibox:
+    case apps::LaunchSource::kFromKeyboard:
+    case apps::LaunchSource::kFromOtherApp:
+    case apps::LaunchSource::kFromMenu:
+    case apps::LaunchSource::kFromInstalledNotification:
+    case apps::LaunchSource::kFromSharesheet:
+    case apps::LaunchSource::kFromReleaseNotesNotification:
+    case apps::LaunchSource::kFromFullRestore:
+    case apps::LaunchSource::kFromSmartTextContextMenu:
+    case apps::LaunchSource::kFromDiscoverTabNotification:
+    case apps::LaunchSource::kFromCommandLine:
       return true;
-    case apps::mojom::LaunchSource::kUnknown:
-    case apps::mojom::LaunchSource::kFromChromeInternal:
-    case apps::mojom::LaunchSource::kFromTest:
-    case apps::mojom::LaunchSource::kFromArc:
-    case apps::mojom::LaunchSource::kFromManagementApi:
-    case apps::mojom::LaunchSource::kFromKiosk:
-    case apps::mojom::LaunchSource::kFromBackgroundMode:
-    case apps::mojom::LaunchSource::kFromNewTabPage:
-    case apps::mojom::LaunchSource::kFromIntentUrl:
-    case apps::mojom::LaunchSource::kFromOsLogin:
-    case apps::mojom::LaunchSource::kFromProtocolHandler:
-    case apps::mojom::LaunchSource::kFromUrlHandler:
+    case apps::LaunchSource::kUnknown:
+    case apps::LaunchSource::kFromChromeInternal:
+    case apps::LaunchSource::kFromTest:
+    case apps::LaunchSource::kFromArc:
+    case apps::LaunchSource::kFromManagementApi:
+    case apps::LaunchSource::kFromKiosk:
+    case apps::LaunchSource::kFromBackgroundMode:
+    case apps::LaunchSource::kFromNewTabPage:
+    case apps::LaunchSource::kFromIntentUrl:
+    case apps::LaunchSource::kFromOsLogin:
+    case apps::LaunchSource::kFromProtocolHandler:
+    case apps::LaunchSource::kFromUrlHandler:
       return false;
   }
   NOTREACHED();
diff --git a/components/services/app_service/public/cpp/types_util.h b/components/services/app_service/public/cpp/types_util.h
index 32b465b..6f75613 100644
--- a/components/services/app_service/public/cpp/types_util.h
+++ b/components/services/app_service/public/cpp/types_util.h
@@ -7,6 +7,7 @@
 
 // Utility functions for App Service types.
 
+#include "components/services/app_service/public/cpp/app_launch_util.h"
 #include "components/services/app_service/public/cpp/app_types.h"
 #include "components/services/app_service/public/mojom/types.mojom.h"
 
@@ -14,7 +15,7 @@
 
 bool IsInstalled(apps::mojom::Readiness readiness);
 bool IsInstalled(apps::Readiness readiness);
-bool IsHumanLaunch(apps::mojom::LaunchSource launch_source);
+bool IsHumanLaunch(apps::LaunchSource launch_source);
 
 // Checks if an app of |app_type| runs in Browser/WebContents (web apps, hosted
 // apps, and packaged v1 apps).
diff --git a/components/services/app_service/public/mojom/types.mojom b/components/services/app_service/public/mojom/types.mojom
index dd01e0e..e76f0de 100644
--- a/components/services/app_service/public/mojom/types.mojom
+++ b/components/services/app_service/public/mojom/types.mojom
@@ -255,6 +255,8 @@
 // LaunchSource in enums.xml.
 // Note the enumeration is used in UMA histogram so entries should not be
 // re-ordered or removed. New entries should be added at the bottom.
+// DEPRECATED. When adding new fields, please use the App struct in
+// components/services/app_service/public/cpp/app_launch_util.h.
 enum LaunchSource {
   kUnknown = 0,
   kFromAppListGrid = 1,               // Grid of apps, not the search box.
diff --git a/components/viz/service/display_embedder/image_context_impl.cc b/components/viz/service/display_embedder/image_context_impl.cc
index f214a58..6c5e61a1 100644
--- a/components/viz/service/display_embedder/image_context_impl.cc
+++ b/components/viz/service/display_embedder/image_context_impl.cc
@@ -17,6 +17,7 @@
 #include "third_party/skia/include/core/SkImageInfo.h"
 #include "third_party/skia/include/core/SkPromiseImageTexture.h"
 #include "third_party/skia/include/gpu/GrContextThreadSafeProxy.h"
+#include "ui/gl/gl_image.h"
 
 namespace viz {
 
diff --git a/components/viz/service/display_embedder/skia_output_device_buffer_queue.cc b/components/viz/service/display_embedder/skia_output_device_buffer_queue.cc
index fab5f5c1..b0b5e03 100644
--- a/components/viz/service/display_embedder/skia_output_device_buffer_queue.cc
+++ b/components/viz/service/display_embedder/skia_output_device_buffer_queue.cc
@@ -36,6 +36,7 @@
 #include "ui/gfx/gpu_fence_handle.h"
 #include "ui/gfx/swap_result.h"
 #include "ui/gl/gl_fence.h"
+#include "ui/gl/gl_image.h"
 #include "ui/gl/gl_surface.h"
 
 namespace {
diff --git a/components/viz/service/display_embedder/skia_output_device_gl.cc b/components/viz/service/display_embedder/skia_output_device_gl.cc
index 3f63127..142f75d 100644
--- a/components/viz/service/display_embedder/skia_output_device_gl.cc
+++ b/components/viz/service/display_embedder/skia_output_device_gl.cc
@@ -33,6 +33,7 @@
 #include "ui/gl/dc_renderer_layer_params.h"
 #include "ui/gl/gl_bindings.h"
 #include "ui/gl/gl_context.h"
+#include "ui/gl/gl_image.h"
 #include "ui/gl/gl_surface.h"
 #include "ui/gl/gl_utils.h"
 #include "ui/gl/gl_version_info.h"
diff --git a/content/browser/generic_sensor/sensor_provider_proxy_impl.cc b/content/browser/generic_sensor/sensor_provider_proxy_impl.cc
index e71223c..1bb63450 100644
--- a/content/browser/generic_sensor/sensor_provider_proxy_impl.cc
+++ b/content/browser/generic_sensor/sensor_provider_proxy_impl.cc
@@ -37,7 +37,7 @@
 
 SensorProviderProxyImpl::SensorProviderProxyImpl(
     RenderFrameHost* render_frame_host)
-    : render_frame_host_(render_frame_host) {
+    : DocumentUserData<SensorProviderProxyImpl>(render_frame_host) {
   DCHECK(render_frame_host);
 }
 
@@ -73,10 +73,11 @@
       GetDeviceService().BindSensorProvider(std::move(receiver));
   }
 
-  render_frame_host_->GetBrowserContext()
+  render_frame_host()
+      .GetBrowserContext()
       ->GetPermissionController()
       ->RequestPermissionFromCurrentDocument(
-          blink::PermissionType::SENSORS, render_frame_host_, false,
+          blink::PermissionType::SENSORS, &render_frame_host(), false,
           base::BindOnce(&SensorProviderProxyImpl::OnPermissionRequestCompleted,
                          weak_factory_.GetWeakPtr(), type,
                          std::move(callback)));
@@ -102,7 +103,7 @@
     case SensorType::RELATIVE_ORIENTATION_QUATERNION:
       break;
     default:
-      static_cast<RenderFrameHostImpl*>(render_frame_host_)
+      static_cast<RenderFrameHostImpl*>(&render_frame_host())
           ->OnBackForwardCacheDisablingStickyFeatureUsed(
               blink::scheduler::WebSchedulerTrackedFeature::
                   kRequestedBackForwardCacheBlockedSensors);
@@ -147,7 +148,7 @@
       SensorTypeToPermissionsPolicyFeatures(type);
   return std::all_of(features.begin(), features.end(),
                      [this](blink::mojom::PermissionsPolicyFeature feature) {
-                       return render_frame_host_->IsFeatureEnabled(feature);
+                       return render_frame_host().IsFeatureEnabled(feature);
                      });
 }
 
@@ -158,4 +159,6 @@
   sensor_provider_.reset();
 }
 
+DOCUMENT_USER_DATA_KEY_IMPL(SensorProviderProxyImpl);
+
 }  // namespace content
diff --git a/content/browser/generic_sensor/sensor_provider_proxy_impl.h b/content/browser/generic_sensor/sensor_provider_proxy_impl.h
index 754af043..a2745f6 100644
--- a/content/browser/generic_sensor/sensor_provider_proxy_impl.h
+++ b/content/browser/generic_sensor/sensor_provider_proxy_impl.h
@@ -5,9 +5,9 @@
 #ifndef CONTENT_BROWSER_GENERIC_SENSOR_SENSOR_PROVIDER_PROXY_IMPL_H_
 #define CONTENT_BROWSER_GENERIC_SENSOR_SENSOR_PROVIDER_PROXY_IMPL_H_
 
-#include "base/memory/raw_ptr.h"
 #include "base/memory/weak_ptr.h"
 #include "content/common/content_export.h"
+#include "content/public/browser/document_user_data.h"
 #include "content/public/browser/web_contents_observer.h"
 #include "mojo/public/cpp/bindings/pending_receiver.h"
 #include "mojo/public/cpp/bindings/receiver_set.h"
@@ -22,10 +22,10 @@
 // This proxy acts as a gatekeeper to the real sensor provider so that this
 // proxy can intercept sensor requests and allow or deny them based on
 // the permission statuses retrieved from a permission controller.
-class SensorProviderProxyImpl final : public device::mojom::SensorProvider {
+class SensorProviderProxyImpl final
+    : public device::mojom::SensorProvider,
+      public DocumentUserData<SensorProviderProxyImpl> {
  public:
-  explicit SensorProviderProxyImpl(RenderFrameHost* render_frame_host);
-
   SensorProviderProxyImpl(const SensorProviderProxyImpl&) = delete;
   SensorProviderProxyImpl& operator=(const SensorProviderProxyImpl&) = delete;
 
@@ -41,6 +41,8 @@
       SensorProviderBinder binder);
 
  private:
+  explicit SensorProviderProxyImpl(RenderFrameHost* render_frame_host);
+
   // SensorProvider implementation.
   void GetSensor(device::mojom::SensorType type,
                  GetSensorCallback callback) override;
@@ -56,10 +58,11 @@
   // invalidated before being discarded.
   mojo::Remote<device::mojom::SensorProvider> sensor_provider_;
   mojo::ReceiverSet<device::mojom::SensorProvider> receiver_set_;
-  // Note: |render_frame_host_| owns |this| instance.
-  const raw_ptr<RenderFrameHost> render_frame_host_;
 
   base::WeakPtrFactory<SensorProviderProxyImpl> weak_factory_{this};
+
+  friend DocumentUserData;
+  DOCUMENT_USER_DATA_KEY_DECL();
 };
 
 }  // namespace content
diff --git a/content/browser/renderer_host/browser_compositor_view_mac.h b/content/browser/renderer_host/browser_compositor_view_mac.h
index 8042c66..b216a48 100644
--- a/content/browser/renderer_host/browser_compositor_view_mac.h
+++ b/content/browser/renderer_host/browser_compositor_view_mac.h
@@ -15,7 +15,6 @@
 #include "components/viz/common/surfaces/scoped_surface_id_allocator.h"
 #include "content/browser/renderer_host/delegated_frame_host.h"
 #include "content/common/content_export.h"
-#include "third_party/blink/public/mojom/widget/record_content_to_visible_time_request.mojom-forward.h"
 #include "ui/compositor/compositor.h"
 #include "ui/compositor/compositor_observer.h"
 #include "ui/compositor/layer_observer.h"
@@ -111,13 +110,6 @@
   const viz::LocalSurfaceId& GetRendererLocalSurfaceId();
   void TransformPointToRootSurface(gfx::PointF* point);
 
-  // Sends `visible_time_request` to the DelegatedFrameHost. Use this instead of
-  // passing the request directly to DelegatedFrameHost::WasShown or
-  // DelegatedFrameHost::RequestPresentationTimeForNextFrame because it will
-  // record the right metrics for the UseParentLayerCompositor state.
-  void RequestPresentationTimeForNextFrame(
-      blink::mojom::RecordContentToVisibleTimeRequestPtr visible_time_request);
-
   // Indicate that the recyclable compositor should be destroyed, and no future
   // compositors should be recycled.
   static void DisableRecyclingForShutdown();
diff --git a/content/browser/renderer_host/browser_compositor_view_mac.mm b/content/browser/renderer_host/browser_compositor_view_mac.mm
index 3c459969..6effccf4 100644
--- a/content/browser/renderer_host/browser_compositor_view_mac.mm
+++ b/content/browser/renderer_host/browser_compositor_view_mac.mm
@@ -20,7 +20,6 @@
 #include "content/public/browser/browser_thread.h"
 #include "content/public/browser/context_factory.h"
 #include "third_party/abseil-cpp/absl/types/optional.h"
-#include "third_party/blink/public/mojom/widget/record_content_to_visible_time_request.mojom.h"
 #include "ui/accelerated_widget_mac/accelerated_widget_mac.h"
 #include "ui/accelerated_widget_mac/window_resize_helper_mac.h"
 #include "ui/base/layout.h"
@@ -267,10 +266,6 @@
     parent_ui_layer_->Add(root_layer_.get());
     parent_ui_layer_->AddObserver(this);
     state_ = UseParentLayerCompositor;
-
-    // Any ongoing presentation time request can no longer be handled because
-    // the parent layer compositor won't present a frame that can be measured.
-    delegated_frame_host_->UnhandledPresentationTimeRequest();
   }
   if (new_state == HasOwnCompositor) {
     recyclable_compositor_ =
@@ -293,18 +288,6 @@
                                   {} /* record_tab_switch_time_request */);
 }
 
-void BrowserCompositorMac::RequestPresentationTimeForNextFrame(
-    blink::mojom::RecordContentToVisibleTimeRequestPtr visible_time_request) {
-  DCHECK(visible_time_request);
-  delegated_frame_host_->RequestPresentationTimeForNextFrame(
-      std::move(visible_time_request));
-  if (state_ == UseParentLayerCompositor) {
-    // Immediately cancel the request since the parent layer compositor won't
-    // present a frame that can be measured.
-    delegated_frame_host_->UnhandledPresentationTimeRequest();
-  }
-}
-
 // static
 void BrowserCompositorMac::DisableRecyclingForShutdown() {
   // Ensure that the client has destroyed its BrowserCompositorViewMac before
diff --git a/content/browser/renderer_host/delegated_frame_host.cc b/content/browser/renderer_host/delegated_frame_host.cc
index c3423ea..95b7b86e 100644
--- a/content/browser/renderer_host/delegated_frame_host.cc
+++ b/content/browser/renderer_host/delegated_frame_host.cc
@@ -124,12 +124,6 @@
   tab_switch_time_recorder_.TabWasHidden();
 }
 
-void DelegatedFrameHost::UnhandledPresentationTimeRequest() {
-  // Tab was hidden while widget keeps painting, eg. due to being captured.
-  tab_switch_time_recorder_.TabMeasurementWasInterrupted(
-      blink::ContentToVisibleTimeReporter::TabSwitchResult::kUnhandled);
-}
-
 bool DelegatedFrameHost::HasSavedFrame() const {
   return frame_evictor_->has_surface();
 }
diff --git a/content/browser/renderer_host/delegated_frame_host.h b/content/browser/renderer_host/delegated_frame_host.h
index 517d89a..403ce1dc 100644
--- a/content/browser/renderer_host/delegated_frame_host.h
+++ b/content/browser/renderer_host/delegated_frame_host.h
@@ -127,9 +127,6 @@
       blink::mojom::RecordContentToVisibleTimeRequestPtr visible_time_request);
   void CancelPresentationTimeRequest();
 
-  // Cancel a presentation time request using the kUnhandled result code.
-  void UnhandledPresentationTimeRequest();
-
   void EmbedSurface(const viz::LocalSurfaceId& local_surface_id,
                     const gfx::Size& dip_size,
                     cc::DeadlinePolicy deadline_policy);
diff --git a/content/browser/renderer_host/render_frame_host_impl.cc b/content/browser/renderer_host/render_frame_host_impl.cc
index 61c4302..4477e52 100644
--- a/content/browser/renderer_host/render_frame_host_impl.cc
+++ b/content/browser/renderer_host/render_frame_host_impl.cc
@@ -4447,9 +4447,13 @@
   // tricky to support because the NavigationRequest would change its
   // NavigationController in the course of the activation, and while that may be
   // safe for a normal navigation, it has more implications for a history
-  // navigation. Fortunately, for prerendering, we do not expect there to be any
-  // ongoing history navigations in a subframe, because we maintain a trivial
-  // session history, so check that nav_entry_id() is 0 here.
+  // navigation as it already has an associated NavigationEntry and we do not
+  // transfer pending NavigationEntries during activation. Fortunately, for
+  // prerendering, we do not expect there to be any ongoing history navigations
+  // in a subframe, because we maintain a trivial session history, so check that
+  // nav_entry_id() is 0 here. Reloading subframes are considered
+  // renderer-initiated navigations and do not create a new navigation entry
+  // when NavigationRequest is created.
   //
   // Note that due to PrerenderCommitDeferringCondition, the main frame should
   // have no ongoing NavigationRequest at all, so it is not checked here.
@@ -9253,10 +9257,9 @@
 }
 
 void RenderFrameHostImpl::TearDownMojoConnection() {
-  // While not directly Mojo endpoints, both `geolocation_service_` and
-  // `sensor_provider_proxy_` may attempt to cancel permission requests.
+  // While not directly a Mojo endpoint, |geolocation_service_| may attempt to
+  // cancel permission requests.
   geolocation_service_.reset();
-  sensor_provider_proxy_.reset();
 
   associated_registry_.reset();
 
@@ -10499,10 +10502,8 @@
 
 void RenderFrameHostImpl::GetSensorProvider(
     mojo::PendingReceiver<device::mojom::SensorProvider> receiver) {
-  if (!sensor_provider_proxy_) {
-    sensor_provider_proxy_ = std::make_unique<SensorProviderProxyImpl>(this);
-  }
-  sensor_provider_proxy_->Bind(std::move(receiver));
+  SensorProviderProxyImpl::GetOrCreateForCurrentDocument(this)->Bind(
+      std::move(receiver));
 }
 
 void RenderFrameHostImpl::BindCacheStorage(
diff --git a/content/browser/renderer_host/render_frame_host_impl.h b/content/browser/renderer_host/render_frame_host_impl.h
index a88f4da..cf1ebb2e 100644
--- a/content/browser/renderer_host/render_frame_host_impl.h
+++ b/content/browser/renderer_host/render_frame_host_impl.h
@@ -239,7 +239,6 @@
 class RenderViewHostImpl;
 class RenderWidgetHostView;
 class RenderWidgetHostViewBase;
-class SensorProviderProxyImpl;
 class ServiceWorkerContainerHost;
 class SiteInfo;
 class SpeechSynthesisImpl;
@@ -3652,9 +3651,6 @@
   // IdleManager which provides Idle status.
   std::unique_ptr<IdleManagerImpl> idle_manager_;
 
-  // SensorProvider proxy which acts as a gatekeeper to the real SensorProvider.
-  std::unique_ptr<SensorProviderProxyImpl> sensor_provider_proxy_;
-
   std::unique_ptr<blink::AssociatedInterfaceRegistry> associated_registry_;
 
   std::unique_ptr<service_manager::InterfaceProvider> remote_interfaces_;
diff --git a/content/browser/renderer_host/render_widget_host_view_browsertest.cc b/content/browser/renderer_host/render_widget_host_view_browsertest.cc
index 32e30b4..89c2381 100644
--- a/content/browser/renderer_host/render_widget_host_view_browsertest.cc
+++ b/content/browser/renderer_host/render_widget_host_view_browsertest.cc
@@ -1226,22 +1226,6 @@
   BrowserCompositorMac* GetBrowserCompositor() const {
     return GetBrowserCompositorMacForTesting(GetRenderWidgetHostView());
   }
-
-  // Waits for presentation feedback, then expects that it includes a specific
-  // WithSavedFrame result value.
-  void WaitForUnhandledSavedFrameFeedback() {
-    ASSERT_TRUE(WaitForPresentationFeedback(
-        HistogramToExpect::kTotalIncompleteSwitchDuration));
-    // If ExpectUniqueSample fails, include all related histograms for easier
-    // debugging.
-    SCOPED_TRACE(::testing::Message()
-                 << "All histograms: "
-                 << PrintToString(histogram_tester_.GetTotalCountsForPrefix(
-                        "Browser.Tabs.")));
-    histogram_tester_.ExpectUniqueSample(
-        "Browser.Tabs.TabSwitchResult2.WithSavedFrames",
-        blink::ContentToVisibleTimeReporter::TabSwitchResult::kUnhandled, 1);
-  }
 #endif
 
   base::test::ScopedFeatureList features_;
@@ -1343,38 +1327,46 @@
 // The default tests do not set a parent UI layer, so the BrowserCompositorMac
 // state is always HasNoCompositor when the RWHV is hidden, or HasOwnCompositor
 // when the RWHV is visible. These tests add a parent layer to make sure that
-// presentation feedback is logged as Unhandled when the state is
-// UseParentLayerCompositor, instead of being silently dropped.
+// presentation feedback is logged when the state is UseParentLayerCompositor.
+
+// TODO(https://crbug.com/1164477): These tests don't match the behaviour of the
+// browser. In production the kTotalSwitchDuration histograms are logged but in
+// this test, the presentation time request is swallowed during the
+// UseParentLayerCompositor state. Need to find out what's wrong with the test
+// setup.
 
 IN_PROC_BROWSER_TEST_P(
     RenderWidgetHostViewPresentationFeedbackMetrics2BrowserTest,
-    ShowWithParentLayer) {
+    DISABLED_ShowWithParentLayer) {
   ASSERT_TRUE(CreateVisibleTimeRequest());
   ScopedParentLayer parent_layer(GetBrowserCompositor());
   GetBrowserCompositor()->SetParentUiLayer(parent_layer.layer());
   GetRenderWidgetHostView()->ShowWithVisibility(PageVisibilityState::kVisible);
-  WaitForUnhandledSavedFrameFeedback();
+  EXPECT_TRUE(
+      WaitForPresentationFeedback(HistogramToExpect::kTotalSwitchDuration));
 }
 
 IN_PROC_BROWSER_TEST_P(
     RenderWidgetHostViewPresentationFeedbackMetrics2BrowserTest,
-    ShowThenAddParentLayer) {
+    DISABLED_ShowThenAddParentLayer) {
   ASSERT_TRUE(CreateVisibleTimeRequest());
   GetRenderWidgetHostView()->ShowWithVisibility(PageVisibilityState::kVisible);
   ScopedParentLayer parent_layer(GetBrowserCompositor());
   GetBrowserCompositor()->SetParentUiLayer(parent_layer.layer());
-  WaitForUnhandledSavedFrameFeedback();
+  EXPECT_TRUE(
+      WaitForPresentationFeedback(HistogramToExpect::kTotalSwitchDuration));
 }
 
 IN_PROC_BROWSER_TEST_P(
     RenderWidgetHostViewPresentationFeedbackMetrics2BrowserTest,
-    ShowThenRemoveParentLayer) {
+    DISABLED_ShowThenRemoveParentLayer) {
   ASSERT_TRUE(CreateVisibleTimeRequest());
   ScopedParentLayer parent_layer(GetBrowserCompositor());
   GetBrowserCompositor()->SetParentUiLayer(parent_layer.layer());
   GetRenderWidgetHostView()->ShowWithVisibility(PageVisibilityState::kVisible);
   GetBrowserCompositor()->SetParentUiLayer(nullptr);
-  WaitForUnhandledSavedFrameFeedback();
+  EXPECT_TRUE(
+      WaitForPresentationFeedback(HistogramToExpect::kTotalSwitchDuration));
 }
 
 #endif  // BUILDFLAG(IS_MAC)
diff --git a/content/browser/renderer_host/render_widget_host_view_mac.mm b/content/browser/renderer_host/render_widget_host_view_mac.mm
index c3aff789..fdb0e82 100644
--- a/content/browser/renderer_host/render_widget_host_view_mac.mm
+++ b/content/browser/renderer_host/render_widget_host_view_mac.mm
@@ -473,9 +473,12 @@
 
   // If the frame for the renderer is already available, then the
   // tab-switching time is the presentation time for the browser-compositor.
+  // SetRenderWidgetHostIsHidden above will show the DelegatedFrameHost
+  // in this state, but doesn't include the presentation time request.
   if (has_saved_frame && tab_switch_start_state) {
-    browser_compositor_->RequestPresentationTimeForNextFrame(
-        std::move(tab_switch_start_state));
+    browser_compositor_->GetDelegatedFrameHost()
+        ->RequestPresentationTimeForNextFrame(
+            std::move(tab_switch_start_state));
   }
 }
 
@@ -489,8 +492,8 @@
   if (browser_compositor_->GetDelegatedFrameHost()->HasSavedFrame()) {
     // If the frame for the renderer is already available, then the
     // tab-switching time is the presentation time for the browser-compositor.
-    browser_compositor_->RequestPresentationTimeForNextFrame(
-        std::move(visible_time_request));
+    browser_compositor_->GetDelegatedFrameHost()
+        ->RequestPresentationTimeForNextFrame(std::move(visible_time_request));
   } else {
     host()->RequestPresentationTimeForNextFrame(
         std::move(visible_time_request));
diff --git a/gpu/command_buffer/service/shared_image_representation_dawn_egl_image.cc b/gpu/command_buffer/service/shared_image_representation_dawn_egl_image.cc
index 698543ee..9b5e691 100644
--- a/gpu/command_buffer/service/shared_image_representation_dawn_egl_image.cc
+++ b/gpu/command_buffer/service/shared_image_representation_dawn_egl_image.cc
@@ -7,6 +7,7 @@
 #include "build/build_config.h"
 #include "components/viz/common/resources/resource_format_utils.h"
 #include "gpu/command_buffer/service/texture_manager.h"
+#include "ui/gl/gl_image.h"
 
 #include <dawn/native/OpenGLBackend.h>
 
diff --git a/gpu/command_buffer/service/texture_manager.cc b/gpu/command_buffer/service/texture_manager.cc
index b20b875..f9869c4 100644
--- a/gpu/command_buffer/service/texture_manager.cc
+++ b/gpu/command_buffer/service/texture_manager.cc
@@ -30,6 +30,7 @@
 #include "gpu/command_buffer/service/service_discardable_manager.h"
 #include "ui/gl/gl_context.h"
 #include "ui/gl/gl_enums.h"
+#include "ui/gl/gl_image.h"
 #include "ui/gl/gl_implementation.h"
 #include "ui/gl/gl_state_restorer.h"
 #include "ui/gl/gl_version_info.h"
diff --git a/gpu/command_buffer/service/texture_manager.h b/gpu/command_buffer/service/texture_manager.h
index c78c914c..9c64c78c 100644
--- a/gpu/command_buffer/service/texture_manager.h
+++ b/gpu/command_buffer/service/texture_manager.h
@@ -28,9 +28,9 @@
 #include "gpu/command_buffer/service/texture_base.h"
 #include "gpu/gpu_gles2_export.h"
 #include "ui/gfx/geometry/rect.h"
-#include "ui/gl/gl_image.h"
 
 namespace gl {
+class GLImage;
 class ProgressReporter;
 }
 
diff --git a/gpu/command_buffer/service/validating_abstract_texture_impl.cc b/gpu/command_buffer/service/validating_abstract_texture_impl.cc
index 380a895..b371c43 100644
--- a/gpu/command_buffer/service/validating_abstract_texture_impl.cc
+++ b/gpu/command_buffer/service/validating_abstract_texture_impl.cc
@@ -8,6 +8,7 @@
 #include "gpu/command_buffer/service/error_state.h"
 #include "gpu/command_buffer/service/texture_manager.h"
 #include "ui/gl/gl_context.h"
+#include "ui/gl/gl_image.h"
 #include "ui/gl/scoped_binders.h"
 #include "ui/gl/scoped_make_current.h"
 
diff --git a/gpu/config/gpu_finch_features.cc b/gpu/config/gpu_finch_features.cc
index dbcdfc2..03fc091 100644
--- a/gpu/config/gpu_finch_features.cc
+++ b/gpu/config/gpu_finch_features.cc
@@ -263,6 +263,7 @@
 const base::FeatureParam<std::string> kVulkanBlockListByAndroidBuildFP{
     &kVulkan, "BlockListByAndroidBuildFP", ""};
 
+// Blocklists meant for DrDc.
 // crbug.com/1294648
 const base::FeatureParam<std::string> kDrDcBlockListByDevice{
     &kEnableDrDc, "BlockListByDevice", "LF9810_2GB"};
@@ -271,6 +272,24 @@
 const base::FeatureParam<std::string> kDrDcBlockListByModel{
     &kEnableDrDc, "BlockListByModel",
     "SM-J400M|SM-J415F|ONEPLUS A3003|OCTAStream*"};
+
+const base::FeatureParam<std::string> kDrDcBlockListByHardware{
+    &kEnableDrDc, "BlockListByHardware", ""};
+
+const base::FeatureParam<std::string> kDrDcBlockListByBrand{
+    &kEnableDrDc, "BlockListByBrand", "HONOR"};
+
+const base::FeatureParam<std::string> kDrDcBlockListByAndroidBuildId{
+    &kEnableDrDc, "BlockListByAndroidBuildId", ""};
+
+const base::FeatureParam<std::string> kDrDcBlockListByManufacturer{
+    &kEnableDrDc, "BlockListByManufacturer", ""};
+
+const base::FeatureParam<std::string> kDrDcBlockListByBoard{
+    &kEnableDrDc, "BlockListByBoard", ""};
+
+const base::FeatureParam<std::string> kDrDcBlockListByAndroidBuildFP{
+    &kEnableDrDc, "BlockListByAndroidBuildFP", ""};
 #endif  // BUILDFLAG(IS_ANDROID)
 
 // Enable SkiaRenderer Dawn graphics backend. On Windows this will use D3D12,
@@ -380,6 +399,22 @@
     return false;
   if (IsDeviceBlocked(build_info->model(), kDrDcBlockListByModel.Get()))
     return false;
+  if (IsDeviceBlocked(build_info->hardware(), kDrDcBlockListByHardware.Get()))
+    return false;
+  if (IsDeviceBlocked(build_info->brand(), kDrDcBlockListByBrand.Get()))
+    return false;
+  if (IsDeviceBlocked(build_info->android_build_id(),
+                      kDrDcBlockListByAndroidBuildId.Get()))
+    return false;
+  if (IsDeviceBlocked(build_info->manufacturer(),
+                      kDrDcBlockListByManufacturer.Get()))
+    return false;
+  if (IsDeviceBlocked(build_info->board(), kDrDcBlockListByBoard.Get()))
+    return false;
+  if (IsDeviceBlocked(build_info->android_build_fp(),
+                      kDrDcBlockListByAndroidBuildFP.Get()))
+    return false;
+
   if (!base::FeatureList::IsEnabled(kEnableDrDc))
     return false;
   return IsUsingVulkan() ? base::FeatureList::IsEnabled(kEnableDrDcVulkan)
diff --git a/ios/chrome/browser/ui/icons/item_icon.mm b/ios/chrome/browser/ui/icons/item_icon.mm
index 424edafe..75ebc8a6 100644
--- a/ios/chrome/browser/ui/icons/item_icon.mm
+++ b/ios/chrome/browser/ui/icons/item_icon.mm
@@ -8,7 +8,7 @@
 #error "This file requires ARC support."
 #endif
 
-const CGFloat kSymbolAccessoryPointSize = 22.;
+const CGFloat kSymbolAccessoryPointSize = 18.;
 
 NSString* const kExternalLinkSmbol = @"arrow.up.forward.square";
 NSString* const kChevronForwardSymbol = @"chevron.forward";
diff --git a/ios/google_internal/frameworks/chrome_internal_dynamic_framework.ios.zip.sha1 b/ios/google_internal/frameworks/chrome_internal_dynamic_framework.ios.zip.sha1
index 650773f..ac047a8 100644
--- a/ios/google_internal/frameworks/chrome_internal_dynamic_framework.ios.zip.sha1
+++ b/ios/google_internal/frameworks/chrome_internal_dynamic_framework.ios.zip.sha1
@@ -1 +1 @@
-bc05f8f44551dde018befa3bf64e0e8498d08749
\ No newline at end of file
+e2e3b506d8b0935d151fffb7b14077c0e2203ab5
\ No newline at end of file
diff --git a/ios/google_internal/frameworks/chrome_internal_dynamic_framework.iossimulator.zip.sha1 b/ios/google_internal/frameworks/chrome_internal_dynamic_framework.iossimulator.zip.sha1
index f6ebe9b..df6fc95 100644
--- a/ios/google_internal/frameworks/chrome_internal_dynamic_framework.iossimulator.zip.sha1
+++ b/ios/google_internal/frameworks/chrome_internal_dynamic_framework.iossimulator.zip.sha1
@@ -1 +1 @@
-b32cc23b2e4395b2e151e8f4dcd560d44b5be449
\ No newline at end of file
+36d9ce0b66bc23683e43e02657c889a0dfb02050
\ No newline at end of file
diff --git a/ios/google_internal/frameworks/chrome_sso_internal_dynamic_framework.ios.zip.sha1 b/ios/google_internal/frameworks/chrome_sso_internal_dynamic_framework.ios.zip.sha1
index b1ca7f12..8674cd8 100644
--- a/ios/google_internal/frameworks/chrome_sso_internal_dynamic_framework.ios.zip.sha1
+++ b/ios/google_internal/frameworks/chrome_sso_internal_dynamic_framework.ios.zip.sha1
@@ -1 +1 @@
-ad19c1c649bac4d7edca3863afadf896b8fce896
\ No newline at end of file
+478ae5f1340e0273c11ed068272c38cac2facaa8
\ No newline at end of file
diff --git a/ios/google_internal/frameworks/chrome_sso_internal_dynamic_framework.iossimulator.zip.sha1 b/ios/google_internal/frameworks/chrome_sso_internal_dynamic_framework.iossimulator.zip.sha1
index 7ff547a..20d600f 100644
--- a/ios/google_internal/frameworks/chrome_sso_internal_dynamic_framework.iossimulator.zip.sha1
+++ b/ios/google_internal/frameworks/chrome_sso_internal_dynamic_framework.iossimulator.zip.sha1
@@ -1 +1 @@
-f04943706edc0c2a214d18cb177fdd4dfae61186
\ No newline at end of file
+9f070c240844f724693d13946ec1d28d6926d879
\ No newline at end of file
diff --git a/ios/google_internal/frameworks/remoting_dogfood_internal_dynamic_framework.ios.zip.sha1 b/ios/google_internal/frameworks/remoting_dogfood_internal_dynamic_framework.ios.zip.sha1
index 58e155e..bc37b8e1 100644
--- a/ios/google_internal/frameworks/remoting_dogfood_internal_dynamic_framework.ios.zip.sha1
+++ b/ios/google_internal/frameworks/remoting_dogfood_internal_dynamic_framework.ios.zip.sha1
@@ -1 +1 @@
-a5714521362716cd2aa82d9f2fb16962dc8a3ef3
\ No newline at end of file
+751460866fe0befd0be6b87b508ae5c847b91dd7
\ No newline at end of file
diff --git a/ios/google_internal/frameworks/remoting_dogfood_internal_dynamic_framework.iossimulator.zip.sha1 b/ios/google_internal/frameworks/remoting_dogfood_internal_dynamic_framework.iossimulator.zip.sha1
index ef06dbf4..9ff4e102 100644
--- a/ios/google_internal/frameworks/remoting_dogfood_internal_dynamic_framework.iossimulator.zip.sha1
+++ b/ios/google_internal/frameworks/remoting_dogfood_internal_dynamic_framework.iossimulator.zip.sha1
@@ -1 +1 @@
-ba43f2ca8aac48cefd981a0a0952b0e5566b5eb2
\ No newline at end of file
+32a57567387e7ea79b9078b89da9ee2afae87a41
\ No newline at end of file
diff --git a/ios/google_internal/frameworks/remoting_internal_dynamic_framework.ios.zip.sha1 b/ios/google_internal/frameworks/remoting_internal_dynamic_framework.ios.zip.sha1
index 5e46ce2..098a88c 100644
--- a/ios/google_internal/frameworks/remoting_internal_dynamic_framework.ios.zip.sha1
+++ b/ios/google_internal/frameworks/remoting_internal_dynamic_framework.ios.zip.sha1
@@ -1 +1 @@
-2e592fbdc6ba177c1b1ff606223d131c8e959c52
\ No newline at end of file
+66146e1e02c308195346a2d1ad5680eb8419c58c
\ No newline at end of file
diff --git a/ios/google_internal/frameworks/remoting_internal_dynamic_framework.iossimulator.zip.sha1 b/ios/google_internal/frameworks/remoting_internal_dynamic_framework.iossimulator.zip.sha1
index 5e96741..f5ea44d7 100644
--- a/ios/google_internal/frameworks/remoting_internal_dynamic_framework.iossimulator.zip.sha1
+++ b/ios/google_internal/frameworks/remoting_internal_dynamic_framework.iossimulator.zip.sha1
@@ -1 +1 @@
-e1b673d25b7fbe93ff0d39904e84f202ec9fa399
\ No newline at end of file
+ff63a8b6cf80bfb7ec9b752158a48d938313337d
\ No newline at end of file
diff --git a/ios/google_internal/frameworks/web_view_shell_internal_dynamic_framework.ios.zip.sha1 b/ios/google_internal/frameworks/web_view_shell_internal_dynamic_framework.ios.zip.sha1
index 268ade0..4ca365f 100644
--- a/ios/google_internal/frameworks/web_view_shell_internal_dynamic_framework.ios.zip.sha1
+++ b/ios/google_internal/frameworks/web_view_shell_internal_dynamic_framework.ios.zip.sha1
@@ -1 +1 @@
-98e70b016736bf50682917995525d5ff8916db88
\ No newline at end of file
+e6466d776a866cc8233ac6adc485a55ebc82a8bc
\ No newline at end of file
diff --git a/ios/google_internal/frameworks/web_view_shell_internal_dynamic_framework.iossimulator.zip.sha1 b/ios/google_internal/frameworks/web_view_shell_internal_dynamic_framework.iossimulator.zip.sha1
index 1f50430..474cc4c 100644
--- a/ios/google_internal/frameworks/web_view_shell_internal_dynamic_framework.iossimulator.zip.sha1
+++ b/ios/google_internal/frameworks/web_view_shell_internal_dynamic_framework.iossimulator.zip.sha1
@@ -1 +1 @@
-ebf4db35291f19e39ddae2a7f25d5fd07a90f89f
\ No newline at end of file
+f02ae0d827bd9c59f140c64a66657789be6d02c4
\ No newline at end of file
diff --git a/net/android/network_change_notifier_android_unittest.cc b/net/android/network_change_notifier_android_unittest.cc
index 694b05c..4b8c98f 100644
--- a/net/android/network_change_notifier_android_unittest.cc
+++ b/net/android/network_change_notifier_android_unittest.cc
@@ -301,8 +301,8 @@
             delegate_.GetCurrentConnectionType());
   // Instantiate another delegate to validate that it uses the actual
   // connection type at construction.
-  std::unique_ptr<NetworkChangeNotifierDelegateAndroid> other_delegate(
-      new NetworkChangeNotifierDelegateAndroid());
+  auto other_delegate =
+      std::make_unique<NetworkChangeNotifierDelegateAndroid>();
   EXPECT_EQ(NetworkChangeNotifier::CONNECTION_NONE,
             other_delegate->GetCurrentConnectionType());
 
diff --git a/net/base/backoff_entry_serializer.cc b/net/base/backoff_entry_serializer.cc
index 76015d29..dd31a2a 100644
--- a/net/base/backoff_entry_serializer.cc
+++ b/net/base/backoff_entry_serializer.cc
@@ -134,7 +134,7 @@
     return nullptr;
   }
 
-  std::unique_ptr<BackoffEntry> entry(new BackoffEntry(policy, tick_clock));
+  auto entry = std::make_unique<BackoffEntry>(policy, tick_clock);
 
   for (int n = 0; n < failure_count; n++)
     entry->InformOfRequest(false);
diff --git a/net/base/chunked_upload_data_stream_unittest.cc b/net/base/chunked_upload_data_stream_unittest.cc
index 85a5352..37e8f3ed 100644
--- a/net/base/chunked_upload_data_stream_unittest.cc
+++ b/net/base/chunked_upload_data_stream_unittest.cc
@@ -339,8 +339,7 @@
 
 // Check the behavior of ChunkedUploadDataStream::Writer.
 TEST(ChunkedUploadDataStreamTest, ChunkedUploadDataStreamWriter) {
-  std::unique_ptr<ChunkedUploadDataStream> stream(
-      new ChunkedUploadDataStream(0));
+  auto stream = std::make_unique<ChunkedUploadDataStream>(0);
   std::unique_ptr<ChunkedUploadDataStream::Writer> writer(
       stream->CreateWriter());
 
diff --git a/net/base/datagram_buffer.cc b/net/base/datagram_buffer.cc
index 21b2f41..255fabbc 100644
--- a/net/base/datagram_buffer.cc
+++ b/net/base/datagram_buffer.cc
@@ -38,7 +38,7 @@
 }
 
 DatagramBuffer::DatagramBuffer(size_t max_buffer_size)
-    : data_(new char[max_buffer_size]) {}
+    : data_(std::make_unique<char[]>(max_buffer_size)) {}
 
 DatagramBuffer::~DatagramBuffer() = default;
 
diff --git a/net/base/directory_lister.cc b/net/base/directory_lister.cc
index 0882163..b606f7d 100644
--- a/net/base/directory_lister.cc
+++ b/net/base/directory_lister.cc
@@ -71,7 +71,7 @@
                                  ListingType type,
                                  DirectoryListerDelegate* delegate)
     : delegate_(delegate) {
-  core_ = new Core(dir, type, this);
+  core_ = base::MakeRefCounted<Core>(dir, type, this);
   DCHECK(delegate_);
   DCHECK(!dir.value().empty());
 }
@@ -114,7 +114,7 @@
 }
 
 void DirectoryLister::Core::Start() {
-  std::unique_ptr<DirectoryList> directory_list(new DirectoryList());
+  auto directory_list = std::make_unique<DirectoryList>();
 
   if (!base::DirectoryExists(dir_)) {
     origin_task_runner_->PostTask(
diff --git a/net/base/elements_upload_data_stream.cc b/net/base/elements_upload_data_stream.cc
index 1f5d616..6d91c8b 100644
--- a/net/base/elements_upload_data_stream.cc
+++ b/net/base/elements_upload_data_stream.cc
@@ -28,8 +28,8 @@
     int64_t identifier) {
   std::vector<std::unique_ptr<UploadElementReader>> readers;
   readers.push_back(std::move(reader));
-  return std::unique_ptr<UploadDataStream>(
-      new ElementsUploadDataStream(std::move(readers), identifier));
+  return std::make_unique<ElementsUploadDataStream>(std::move(readers),
+                                                    identifier);
 }
 
 int ElementsUploadDataStream::InitInternal(const NetLogWithSource& net_log) {
diff --git a/net/base/elements_upload_data_stream_unittest.cc b/net/base/elements_upload_data_stream_unittest.cc
index b586bf0..6516c28 100644
--- a/net/base/elements_upload_data_stream_unittest.cc
+++ b/net/base/elements_upload_data_stream_unittest.cc
@@ -162,7 +162,8 @@
 
 TEST_F(ElementsUploadDataStreamTest, EmptyUploadData) {
   std::unique_ptr<UploadDataStream> stream(
-      new ElementsUploadDataStream(std::move(element_readers_), 0));
+      std::make_unique<ElementsUploadDataStream>(std::move(element_readers_),
+                                                 0));
   ASSERT_THAT(stream->Init(CompletionOnceCallback(), NetLogWithSource()),
               IsOk());
   EXPECT_TRUE(stream->IsInMemory());
@@ -175,7 +176,8 @@
   element_readers_.push_back(
       std::make_unique<UploadBytesElementReader>(kTestData, kTestDataSize));
   std::unique_ptr<UploadDataStream> stream(
-      new ElementsUploadDataStream(std::move(element_readers_), 0));
+      std::make_unique<ElementsUploadDataStream>(std::move(element_readers_),
+                                                 0));
   ASSERT_THAT(stream->Init(CompletionOnceCallback(), NetLogWithSource()),
               IsOk());
   EXPECT_TRUE(stream->IsInMemory());
@@ -205,7 +207,8 @@
 
   TestCompletionCallback init_callback;
   std::unique_ptr<UploadDataStream> stream(
-      new ElementsUploadDataStream(std::move(element_readers_), 0));
+      std::make_unique<ElementsUploadDataStream>(std::move(element_readers_),
+                                                 0));
   ASSERT_THAT(stream->Init(init_callback.callback(), NetLogWithSource()),
               IsError(ERR_IO_PENDING));
   ASSERT_THAT(init_callback.WaitForResult(), IsOk());
@@ -242,7 +245,8 @@
 
   TestCompletionCallback init_callback;
   std::unique_ptr<UploadDataStream> stream(
-      new ElementsUploadDataStream(std::move(element_readers_), 0));
+      std::make_unique<ElementsUploadDataStream>(std::move(element_readers_),
+                                                 0));
   ASSERT_THAT(stream->Init(init_callback.callback(), NetLogWithSource()),
               IsError(ERR_IO_PENDING));
   ASSERT_THAT(init_callback.WaitForResult(), IsOk());
@@ -271,8 +275,7 @@
 
 TEST_F(ElementsUploadDataStreamTest, ReadErrorSync) {
   // This element cannot be read.
-  std::unique_ptr<MockUploadElementReader> reader(
-      new MockUploadElementReader(kTestDataSize, true));
+  auto reader = std::make_unique<MockUploadElementReader>(kTestDataSize, true);
   EXPECT_CALL(*reader, Init(_)).WillOnce(Return(OK));
   reader->SetReadExpectation(ERR_FAILED);
   element_readers_.push_back(std::move(reader));
@@ -282,7 +285,8 @@
       std::make_unique<UploadBytesElementReader>(kTestData, kTestDataSize));
 
   std::unique_ptr<UploadDataStream> stream(
-      new ElementsUploadDataStream(std::move(element_readers_), 0));
+      std::make_unique<ElementsUploadDataStream>(std::move(element_readers_),
+                                                 0));
 
   // Run Init().
   ASSERT_THAT(stream->Init(CompletionOnceCallback(), NetLogWithSource()),
@@ -307,8 +311,7 @@
 
 TEST_F(ElementsUploadDataStreamTest, ReadErrorAsync) {
   // This element cannot be read.
-  std::unique_ptr<MockUploadElementReader> reader(
-      new MockUploadElementReader(kTestDataSize, false));
+  auto reader = std::make_unique<MockUploadElementReader>(kTestDataSize, false);
   reader->SetAsyncInitExpectation(OK);
   reader->SetReadExpectation(ERR_FAILED);
   element_readers_.push_back(std::move(reader));
@@ -318,7 +321,8 @@
       std::make_unique<UploadBytesElementReader>(kTestData, kTestDataSize));
 
   std::unique_ptr<UploadDataStream> stream(
-      new ElementsUploadDataStream(std::move(element_readers_), 0));
+      std::make_unique<ElementsUploadDataStream>(std::move(element_readers_),
+                                                 0));
 
   // Run Init().
   TestCompletionCallback init_callback;
@@ -364,7 +368,8 @@
   const uint64_t kStreamSize = kTestDataSize + kFileRangeLength;
   TestCompletionCallback init_callback;
   std::unique_ptr<UploadDataStream> stream(
-      new ElementsUploadDataStream(std::move(element_readers_), 0));
+      std::make_unique<ElementsUploadDataStream>(std::move(element_readers_),
+                                                 0));
   ASSERT_THAT(stream->Init(init_callback.callback(), NetLogWithSource()),
               IsError(ERR_IO_PENDING));
   ASSERT_THAT(init_callback.WaitForResult(), IsOk());
@@ -388,33 +393,31 @@
 // Init() with on-memory and not-on-memory readers.
 TEST_F(ElementsUploadDataStreamTest, InitAsync) {
   // Create UploadDataStream with mock readers.
-  std::unique_ptr<MockUploadElementReader> reader(
-      new MockUploadElementReader(kTestDataSize, true));
+  auto reader = std::make_unique<MockUploadElementReader>(kTestDataSize, true);
   EXPECT_CALL(*reader, Init(_)).WillOnce(Return(OK));
   element_readers_.push_back(std::move(reader));
 
-  std::unique_ptr<MockUploadElementReader> reader2(
-      new MockUploadElementReader(kTestDataSize, true));
+  auto reader2 = std::make_unique<MockUploadElementReader>(kTestDataSize, true);
   EXPECT_CALL(*reader2, Init(_)).WillOnce(Return(OK));
   element_readers_.push_back(std::move(reader2));
 
-  std::unique_ptr<MockUploadElementReader> reader3(
-      new MockUploadElementReader(kTestDataSize, false));
+  auto reader3 =
+      std::make_unique<MockUploadElementReader>(kTestDataSize, false);
   reader3->SetAsyncInitExpectation(OK);
   element_readers_.push_back(std::move(reader3));
 
-  std::unique_ptr<MockUploadElementReader> reader4(
-      new MockUploadElementReader(kTestDataSize, false));
+  auto reader4 =
+      std::make_unique<MockUploadElementReader>(kTestDataSize, false);
   reader4->SetAsyncInitExpectation(OK);
   element_readers_.push_back(std::move(reader4));
 
-  std::unique_ptr<MockUploadElementReader> reader5(
-      new MockUploadElementReader(kTestDataSize, true));
+  auto reader5 = std::make_unique<MockUploadElementReader>(kTestDataSize, true);
   EXPECT_CALL(*reader5, Init(_)).WillOnce(Return(OK));
   element_readers_.push_back(std::move(reader5));
 
   std::unique_ptr<UploadDataStream> stream(
-      new ElementsUploadDataStream(std::move(element_readers_), 0));
+      std::make_unique<ElementsUploadDataStream>(std::move(element_readers_),
+                                                 0));
 
   // Run Init().
   TestCompletionCallback callback;
@@ -426,13 +429,13 @@
 // Init() of a reader fails asynchronously.
 TEST_F(ElementsUploadDataStreamTest, InitAsyncFailureAsync) {
   // Create UploadDataStream with a mock reader.
-  std::unique_ptr<MockUploadElementReader> reader(
-      new MockUploadElementReader(kTestDataSize, false));
+  auto reader = std::make_unique<MockUploadElementReader>(kTestDataSize, false);
   reader->SetAsyncInitExpectation(ERR_FAILED);
   element_readers_.push_back(std::move(reader));
 
   std::unique_ptr<UploadDataStream> stream(
-      new ElementsUploadDataStream(std::move(element_readers_), 0));
+      std::make_unique<ElementsUploadDataStream>(std::move(element_readers_),
+                                                 0));
 
   // Run Init().
   TestCompletionCallback callback;
@@ -444,18 +447,17 @@
 // Init() of a reader fails synchronously.
 TEST_F(ElementsUploadDataStreamTest, InitAsyncFailureSync) {
   // Create UploadDataStream with mock readers.
-  std::unique_ptr<MockUploadElementReader> reader(
-      new MockUploadElementReader(kTestDataSize, false));
+  auto reader = std::make_unique<MockUploadElementReader>(kTestDataSize, false);
   reader->SetAsyncInitExpectation(OK);
   element_readers_.push_back(std::move(reader));
 
-  std::unique_ptr<MockUploadElementReader> reader2(
-      new MockUploadElementReader(kTestDataSize, true));
+  auto reader2 = std::make_unique<MockUploadElementReader>(kTestDataSize, true);
   EXPECT_CALL(*reader2, Init(_)).WillOnce(Return(ERR_FAILED));
   element_readers_.push_back(std::move(reader2));
 
   std::unique_ptr<UploadDataStream> stream(
-      new ElementsUploadDataStream(std::move(element_readers_), 0));
+      std::make_unique<ElementsUploadDataStream>(std::move(element_readers_),
+                                                 0));
 
   // Run Init().
   TestCompletionCallback callback;
@@ -469,7 +471,8 @@
   element_readers_.push_back(
       std::make_unique<UploadBytesElementReader>(kTestData, kTestDataSize));
   std::unique_ptr<UploadDataStream> stream(
-      new ElementsUploadDataStream(std::move(element_readers_), 0));
+      std::make_unique<ElementsUploadDataStream>(std::move(element_readers_),
+                                                 0));
 
   ASSERT_THAT(stream->Init(CompletionOnceCallback(), NetLogWithSource()),
               IsOk());
@@ -488,32 +491,31 @@
 // Async Read() with on-memory and not-on-memory readers.
 TEST_F(ElementsUploadDataStreamTest, ReadAsync) {
   // Create UploadDataStream with mock readers.
-  std::unique_ptr<MockUploadElementReader> reader(
-      new MockUploadElementReader(kTestDataSize, true));
+  auto reader = std::make_unique<MockUploadElementReader>(kTestDataSize, true);
   EXPECT_CALL(*reader, Init(_)).WillOnce(Return(OK));
   reader->SetReadExpectation(kTestDataSize);
   element_readers_.push_back(std::move(reader));
 
-  std::unique_ptr<MockUploadElementReader> reader2(
-      new MockUploadElementReader(kTestDataSize, false));
+  auto reader2 =
+      std::make_unique<MockUploadElementReader>(kTestDataSize, false);
   reader2->SetAsyncInitExpectation(OK);
   reader2->SetReadExpectation(kTestDataSize);
   element_readers_.push_back(std::move(reader2));
 
-  std::unique_ptr<MockUploadElementReader> reader3(
-      new MockUploadElementReader(kTestDataSize, true));
+  auto reader3 = std::make_unique<MockUploadElementReader>(kTestDataSize, true);
   EXPECT_CALL(*reader3, Init(_)).WillOnce(Return(OK));
   reader3->SetReadExpectation(kTestDataSize);
   element_readers_.push_back(std::move(reader3));
 
-  std::unique_ptr<MockUploadElementReader> reader4(
-      new MockUploadElementReader(kTestDataSize, false));
+  auto reader4 =
+      std::make_unique<MockUploadElementReader>(kTestDataSize, false);
   reader4->SetAsyncInitExpectation(OK);
   reader4->SetReadExpectation(kTestDataSize);
   element_readers_.push_back(std::move(reader4));
 
   std::unique_ptr<UploadDataStream> stream(
-      new ElementsUploadDataStream(std::move(element_readers_), 0));
+      std::make_unique<ElementsUploadDataStream>(std::move(element_readers_),
+                                                 0));
 
   // Run Init().
   TestCompletionCallback init_callback;
@@ -556,7 +558,8 @@
 
   TestCompletionCallback init_callback;
   std::unique_ptr<UploadDataStream> stream(
-      new ElementsUploadDataStream(std::move(element_readers), 0));
+      std::make_unique<ElementsUploadDataStream>(std::move(element_readers),
+                                                 0));
   ASSERT_THAT(stream->Init(init_callback.callback(), NetLogWithSource()),
               IsError(ERR_IO_PENDING));
   int error_code = init_callback.WaitForResult();
@@ -598,7 +601,8 @@
       base::ThreadTaskRunnerHandle::Get().get(), temp_file_path, 0,
       std::numeric_limits<uint64_t>::max(), base::Time()));
   std::unique_ptr<UploadDataStream> stream(
-      new ElementsUploadDataStream(std::move(element_readers_), 0));
+      std::make_unique<ElementsUploadDataStream>(std::move(element_readers_),
+                                                 0));
 
   std::string expected_data(kTestData, kTestData + kTestDataSize);
   expected_data += expected_data;
@@ -643,7 +647,8 @@
       base::ThreadTaskRunnerHandle::Get().get(), temp_file_path, 0,
       std::numeric_limits<uint64_t>::max(), base::Time()));
   std::unique_ptr<UploadDataStream> stream(
-      new ElementsUploadDataStream(std::move(element_readers_), 0));
+      std::make_unique<ElementsUploadDataStream>(std::move(element_readers_),
+                                                 0));
 
   std::string expected_data(kTestData, kTestData + kTestDataSize);
   expected_data += expected_data;
@@ -685,7 +690,8 @@
       base::ThreadTaskRunnerHandle::Get().get(), temp_file_path, 0,
       std::numeric_limits<uint64_t>::max(), base::Time()));
   std::unique_ptr<UploadDataStream> stream(
-      new ElementsUploadDataStream(std::move(element_readers_), 0));
+      std::make_unique<ElementsUploadDataStream>(std::move(element_readers_),
+                                                 0));
 
   std::vector<char> expected_data(kTestData, kTestData + kTestDataSize);
   expected_data.insert(expected_data.end(), kTestData,
@@ -745,7 +751,8 @@
       base::ThreadTaskRunnerHandle::Get().get(), temp_file_path, 0,
       std::numeric_limits<uint64_t>::max(), base::Time()));
   std::unique_ptr<UploadDataStream> stream(
-      new ElementsUploadDataStream(std::move(element_readers_), 0));
+      std::make_unique<ElementsUploadDataStream>(std::move(element_readers_),
+                                                 0));
 
   std::vector<char> expected_data(kTestData, kTestData + kTestDataSize);
   expected_data.insert(expected_data.end(), kTestData,
@@ -794,7 +801,8 @@
       base::ThreadTaskRunnerHandle::Get().get(), temp_file_path, 0,
       std::numeric_limits<uint64_t>::max(), base::Time()));
   std::unique_ptr<UploadDataStream> stream(
-      new ElementsUploadDataStream(std::move(element_readers_), 0));
+      std::make_unique<ElementsUploadDataStream>(std::move(element_readers_),
+                                                 0));
 
   std::vector<char> expected_data(kTestData, kTestData + kTestDataSize);
   expected_data.insert(expected_data.end(), kTestData,
diff --git a/net/base/file_stream_unittest.cc b/net/base/file_stream_unittest.cc
index 59194e81..11b672ce 100644
--- a/net/base/file_stream_unittest.cc
+++ b/net/base/file_stream_unittest.cc
@@ -98,8 +98,8 @@
 
 TEST_F(FileStreamTest, OpenExplicitCloseOrphaned) {
   TestCompletionCallback callback;
-  std::unique_ptr<FileStream> stream(
-      new FileStream(base::ThreadTaskRunnerHandle::Get()));
+  auto stream =
+      std::make_unique<FileStream>(base::ThreadTaskRunnerHandle::Get());
   int flags = base::File::FLAG_OPEN | base::File::FLAG_READ |
               base::File::FLAG_ASYNC;
   int rv = stream->Open(temp_file_path(), flags, callback.callback());
@@ -124,11 +124,11 @@
             base::WriteFile(temp_file_path(), kTestData, kTestDataSize));
   int flags = base::File::FLAG_OPEN_ALWAYS | base::File::FLAG_READ |
               base::File::FLAG_ASYNC;
-  base::File file(temp_file_path(), flags);
+  base::File file1(temp_file_path(), flags);
 
   // Seek to the beginning of the file and read.
-  std::unique_ptr<FileStream> read_stream(
-      new FileStream(std::move(file), base::ThreadTaskRunnerHandle::Get()));
+  auto read_stream = std::make_unique<FileStream>(
+      std::move(file1), base::ThreadTaskRunnerHandle::Get());
   ASSERT_THAT(read_stream->Seek(0, callback64.callback()),
               IsError(ERR_IO_PENDING));
   ASSERT_EQ(0, callback64.WaitForResult());
@@ -144,10 +144,10 @@
   base::DeleteFile(temp_file_path());
   flags = base::File::FLAG_OPEN_ALWAYS | base::File::FLAG_WRITE |
           base::File::FLAG_ASYNC;
-  file.Initialize(temp_file_path(), flags);
+  base::File file2(temp_file_path(), flags);
 
-  std::unique_ptr<FileStream> write_stream(
-      new FileStream(std::move(file), base::ThreadTaskRunnerHandle::Get()));
+  auto write_stream = std::make_unique<FileStream>(
+      std::move(file2), base::ThreadTaskRunnerHandle::Get());
   ASSERT_THAT(write_stream->Seek(0, callback64.callback()),
               IsError(ERR_IO_PENDING));
   ASSERT_EQ(0, callback64.WaitForResult());
@@ -217,8 +217,8 @@
   int64_t file_size;
   EXPECT_TRUE(base::GetFileSize(temp_file_path(), &file_size));
 
-  std::unique_ptr<FileStream> stream(
-      new FileStream(base::ThreadTaskRunnerHandle::Get()));
+  auto stream =
+      std::make_unique<FileStream>(base::ThreadTaskRunnerHandle::Get());
   int flags = base::File::FLAG_OPEN | base::File::FLAG_READ |
               base::File::FLAG_ASYNC;
   TestCompletionCallback callback;
@@ -304,8 +304,8 @@
 }
 
 TEST_F(FileStreamTest, Write_EarlyDelete) {
-  std::unique_ptr<FileStream> stream(
-      new FileStream(base::ThreadTaskRunnerHandle::Get()));
+  auto stream =
+      std::make_unique<FileStream>(base::ThreadTaskRunnerHandle::Get());
   int flags = base::File::FLAG_CREATE_ALWAYS | base::File::FLAG_WRITE |
               base::File::FLAG_ASYNC;
   TestCompletionCallback callback;
@@ -375,8 +375,8 @@
   int64_t file_size;
   EXPECT_TRUE(base::GetFileSize(temp_file_path(), &file_size));
 
-  std::unique_ptr<FileStream> stream(
-      new FileStream(base::ThreadTaskRunnerHandle::Get()));
+  auto stream =
+      std::make_unique<FileStream>(base::ThreadTaskRunnerHandle::Get());
   int flags = base::File::FLAG_OPEN | base::File::FLAG_READ |
               base::File::FLAG_WRITE | base::File::FLAG_ASYNC;
   TestCompletionCallback callback;
@@ -430,8 +430,8 @@
   int64_t file_size;
   EXPECT_TRUE(base::GetFileSize(temp_file_path(), &file_size));
 
-  std::unique_ptr<FileStream> stream(
-      new FileStream(base::ThreadTaskRunnerHandle::Get()));
+  auto stream =
+      std::make_unique<FileStream>(base::ThreadTaskRunnerHandle::Get());
   int flags = base::File::FLAG_OPEN | base::File::FLAG_READ |
               base::File::FLAG_WRITE | base::File::FLAG_ASYNC;
   TestCompletionCallback callback;
@@ -599,8 +599,8 @@
   int64_t file_size;
   EXPECT_TRUE(base::GetFileSize(temp_file_path(), &file_size));
 
-  std::unique_ptr<FileStream> stream(
-      new FileStream(base::ThreadTaskRunnerHandle::Get()));
+  auto stream =
+      std::make_unique<FileStream>(base::ThreadTaskRunnerHandle::Get());
   int flags = base::File::FLAG_OPEN | base::File::FLAG_READ |
               base::File::FLAG_WRITE | base::File::FLAG_ASYNC;
   TestCompletionCallback open_callback;
@@ -705,8 +705,8 @@
   int64_t file_size;
   EXPECT_TRUE(base::GetFileSize(temp_file_path(), &file_size));
 
-  std::unique_ptr<FileStream> stream(
-      new FileStream(base::ThreadTaskRunnerHandle::Get()));
+  auto stream =
+      std::make_unique<FileStream>(base::ThreadTaskRunnerHandle::Get());
   int flags = base::File::FLAG_OPEN | base::File::FLAG_READ |
               base::File::FLAG_WRITE | base::File::FLAG_ASYNC;
   TestCompletionCallback open_callback;
@@ -740,8 +740,7 @@
   ASSERT_TRUE(worker_thread.Start());
 
   base::ScopedDisallowBlocking disallow_blocking;
-  std::unique_ptr<FileStream> stream(
-      new FileStream(worker_thread.task_runner()));
+  auto stream = std::make_unique<FileStream>(worker_thread.task_runner());
   int flags = base::File::FLAG_OPEN | base::File::FLAG_WRITE |
               base::File::FLAG_ASYNC;
   TestCompletionCallback open_callback;
@@ -753,8 +752,7 @@
   stream.reset();
 
   // Force an operation through the worker.
-  std::unique_ptr<FileStream> stream2(
-      new FileStream(worker_thread.task_runner()));
+  auto stream2 = std::make_unique<FileStream>(worker_thread.task_runner());
   TestCompletionCallback open_callback2;
   rv = stream2->Open(temp_file_path(), flags, open_callback2.callback());
   EXPECT_THAT(open_callback2.GetResult(rv), IsOk());
@@ -774,8 +772,8 @@
   base::File file(temp_file_path(), flags);
   ASSERT_TRUE(file.IsValid());
 
-  std::unique_ptr<FileStream> stream(
-      new FileStream(std::move(file), base::ThreadTaskRunnerHandle::Get()));
+  auto stream = std::make_unique<FileStream>(
+      std::move(file), base::ThreadTaskRunnerHandle::Get());
 
   scoped_refptr<IOBuffer> buf = base::MakeRefCounted<IOBuffer>(1);
   buf->data()[0] = 0;
@@ -799,8 +797,8 @@
   base::File file(temp_file_path(), flags);
   ASSERT_TRUE(file.IsValid());
 
-  std::unique_ptr<FileStream> stream(
-      new FileStream(std::move(file), base::ThreadTaskRunnerHandle::Get()));
+  auto stream = std::make_unique<FileStream>(
+      std::move(file), base::ThreadTaskRunnerHandle::Get());
 
   scoped_refptr<IOBuffer> buf = base::MakeRefCounted<IOBuffer>(1);
   TestCompletionCallback callback;
diff --git a/net/base/mock_network_change_notifier.cc b/net/base/mock_network_change_notifier.cc
index 47f595a..7ac2529 100644
--- a/net/base/mock_network_change_notifier.cc
+++ b/net/base/mock_network_change_notifier.cc
@@ -107,7 +107,7 @@
 
 ScopedMockNetworkChangeNotifier::ScopedMockNetworkChangeNotifier()
     : disable_network_change_notifier_for_tests_(
-          new NetworkChangeNotifier::DisableForTest()),
+          std::make_unique<NetworkChangeNotifier::DisableForTest>()),
       mock_network_change_notifier_(MockNetworkChangeNotifier::Create()) {}
 
 ScopedMockNetworkChangeNotifier::~ScopedMockNetworkChangeNotifier() = default;
diff --git a/net/base/network_change_notifier.cc b/net/base/network_change_notifier.cc
index e3b43ff..7842adf 100644
--- a/net/base/network_change_notifier.cc
+++ b/net/base/network_change_notifier.cc
@@ -192,33 +192,37 @@
 class NetworkChangeNotifier::ObserverList {
  public:
   ObserverList()
-      : ip_address_observer_list_(new base::ObserverListThreadSafe<
-                                  NetworkChangeNotifier::IPAddressObserver>(
-            base::ObserverListPolicy::EXISTING_ONLY)),
-        connection_type_observer_list_(
-            new base::ObserverListThreadSafe<
-                NetworkChangeNotifier::ConnectionTypeObserver>(
+      : ip_address_observer_list_(
+            base::MakeRefCounted<base::ObserverListThreadSafe<
+                NetworkChangeNotifier::IPAddressObserver>>(
                 base::ObserverListPolicy::EXISTING_ONLY)),
-        resolver_state_observer_list_(new base::ObserverListThreadSafe<
-                                      NetworkChangeNotifier::DNSObserver>(
-            base::ObserverListPolicy::EXISTING_ONLY)),
+        connection_type_observer_list_(
+            base::MakeRefCounted<base::ObserverListThreadSafe<
+                NetworkChangeNotifier::ConnectionTypeObserver>>(
+                base::ObserverListPolicy::EXISTING_ONLY)),
+        resolver_state_observer_list_(
+            base::MakeRefCounted<base::ObserverListThreadSafe<
+                NetworkChangeNotifier::DNSObserver>>(
+                base::ObserverListPolicy::EXISTING_ONLY)),
         network_change_observer_list_(
-            new base::ObserverListThreadSafe<
-                NetworkChangeNotifier::NetworkChangeObserver>(
+            base::MakeRefCounted<base::ObserverListThreadSafe<
+                NetworkChangeNotifier::NetworkChangeObserver>>(
                 base::ObserverListPolicy::EXISTING_ONLY)),
         max_bandwidth_observer_list_(
-            new base::ObserverListThreadSafe<
-                NetworkChangeNotifier::MaxBandwidthObserver>(
+            base::MakeRefCounted<base::ObserverListThreadSafe<
+                NetworkChangeNotifier::MaxBandwidthObserver>>(
                 base::ObserverListPolicy::EXISTING_ONLY)),
-        network_observer_list_(new base::ObserverListThreadSafe<
-                               NetworkChangeNotifier::NetworkObserver>(
-            base::ObserverListPolicy::EXISTING_ONLY)),
+        network_observer_list_(
+            base::MakeRefCounted<base::ObserverListThreadSafe<
+                NetworkChangeNotifier::NetworkObserver>>(
+                base::ObserverListPolicy::EXISTING_ONLY)),
         connection_cost_observer_list_(
-            new base::ObserverListThreadSafe<
-                NetworkChangeNotifier::ConnectionCostObserver>(
+            base::MakeRefCounted<base::ObserverListThreadSafe<
+                NetworkChangeNotifier::ConnectionCostObserver>>(
                 base::ObserverListPolicy::EXISTING_ONLY)),
         default_network_active_observer_list_(
-            new base::ObserverListThreadSafe<DefaultNetworkActiveObserver>(
+            base::MakeRefCounted<
+                base::ObserverListThreadSafe<DefaultNetworkActiveObserver>>(
                 base::ObserverListPolicy::EXISTING_ONLY)) {}
 
   ObserverList(const ObserverList&) = delete;
diff --git a/net/base/network_config_watcher_mac.cc b/net/base/network_config_watcher_mac.cc
index 1103f64..efa7481d 100644
--- a/net/base/network_config_watcher_mac.cc
+++ b/net/base/network_config_watcher_mac.cc
@@ -259,7 +259,8 @@
 }
 
 NetworkConfigWatcherMac::NetworkConfigWatcherMac(Delegate* delegate)
-    : notifier_thread_(new NetworkConfigWatcherMacThread(delegate)) {
+    : notifier_thread_(
+          std::make_unique<NetworkConfigWatcherMacThread>(delegate)) {
   // We create this notifier thread because the notification implementation
   // needs a thread with a CFRunLoop, and there's no guarantee that
   // CurrentThread::Get() meets that criterion.
diff --git a/net/base/network_interfaces_win.cc b/net/base/network_interfaces_win.cc
index badc5656..68f44585 100644
--- a/net/base/network_interfaces_win.cc
+++ b/net/base/network_interfaces_win.cc
@@ -230,7 +230,7 @@
     for (int tries = 1; result == ERROR_BUFFER_OVERFLOW &&
                         tries < MAX_GETADAPTERSADDRESSES_TRIES;
          ++tries) {
-      buf.reset(new char[len]);
+      buf = std::make_unique<char[]>(len);
       adapters = reinterpret_cast<IP_ADAPTER_ADDRESSES*>(buf.get());
       result = GetAdaptersAddresses(AF_UNSPEC, flags, nullptr, adapters, &len);
     }
@@ -326,7 +326,7 @@
 };
 
 std::unique_ptr<ScopedWifiOptions> SetWifiOptions(int options) {
-  return std::unique_ptr<ScopedWifiOptions>(new WifiOptionSetter(options));
+  return std::make_unique<WifiOptionSetter>(options);
 }
 
 std::string GetWifiSSID() {
diff --git a/net/base/prioritized_dispatcher_unittest.cc b/net/base/prioritized_dispatcher_unittest.cc
index 0f5ba3e..419be5d 100644
--- a/net/base/prioritized_dispatcher_unittest.cc
+++ b/net/base/prioritized_dispatcher_unittest.cc
@@ -141,15 +141,15 @@
   }
 
   std::unique_ptr<TestJob> AddJob(char data, Priority priority) {
-    std::unique_ptr<TestJob> job(
-        new TestJob(dispatcher_.get(), data, priority, &log_));
+    auto job =
+        std::make_unique<TestJob>(dispatcher_.get(), data, priority, &log_);
     job->Add(false);
     return job;
   }
 
   std::unique_ptr<TestJob> AddJobAtHead(char data, Priority priority) {
-    std::unique_ptr<TestJob> job(
-        new TestJob(dispatcher_.get(), data, priority, &log_));
+    auto job =
+        std::make_unique<TestJob>(dispatcher_.get(), data, priority, &log_);
     job->Add(true);
     return job;
   }
diff --git a/net/base/test_completion_callback_unittest.cc b/net/base/test_completion_callback_unittest.cc
index 68b6f73..0ba7462 100644
--- a/net/base/test_completion_callback_unittest.cc
+++ b/net/base/test_completion_callback_unittest.cc
@@ -98,7 +98,7 @@
 bool ExampleEmployer::DoSomething(CompletionOnceCallback callback) {
   DCHECK(!request_.get()) << "already in use";
 
-  request_ = new ExampleWorker(this, std::move(callback));
+  request_ = base::MakeRefCounted<ExampleWorker>(this, std::move(callback));
 
   if (!base::ThreadTaskRunnerHandle::Get()->PostTask(
           FROM_HERE, base::BindOnce(&ExampleWorker::DoWork, request_))) {
diff --git a/net/base/upload_bytes_element_reader.cc b/net/base/upload_bytes_element_reader.cc
index 9dd22c8..312b006 100644
--- a/net/base/upload_bytes_element_reader.cc
+++ b/net/base/upload_bytes_element_reader.cc
@@ -64,10 +64,10 @@
 
 UploadOwnedBytesElementReader::~UploadOwnedBytesElementReader() = default;
 
-UploadOwnedBytesElementReader*
+std::unique_ptr<UploadOwnedBytesElementReader>
 UploadOwnedBytesElementReader::CreateWithString(const std::string& string) {
   std::vector<char> data(string.begin(), string.end());
-  return new UploadOwnedBytesElementReader(&data);
+  return std::make_unique<UploadOwnedBytesElementReader>(&data);
 }
 
 }  // namespace net
diff --git a/net/base/upload_bytes_element_reader.h b/net/base/upload_bytes_element_reader.h
index dd39f580..71c5a4b 100644
--- a/net/base/upload_bytes_element_reader.h
+++ b/net/base/upload_bytes_element_reader.h
@@ -56,7 +56,7 @@
   ~UploadOwnedBytesElementReader() override;
 
   // Creates UploadOwnedBytesElementReader with a string.
-  static UploadOwnedBytesElementReader* CreateWithString(
+  static std::unique_ptr<UploadOwnedBytesElementReader> CreateWithString(
       const std::string& string);
 
  private:
diff --git a/net/cert/cert_database.cc b/net/cert/cert_database.cc
index 99f5dea..7e8220b4 100644
--- a/net/cert/cert_database.cc
+++ b/net/cert/cert_database.cc
@@ -39,7 +39,8 @@
 }
 
 CertDatabase::CertDatabase()
-    : observer_list_(new base::ObserverListThreadSafe<Observer>) {}
+    : observer_list_(
+          base::MakeRefCounted<base::ObserverListThreadSafe<Observer>>()) {}
 
 CertDatabase::~CertDatabase() {
 #if BUILDFLAG(IS_MAC)
diff --git a/net/cert/cert_verify_proc.cc b/net/cert/cert_verify_proc.cc
index 755d330..ca06237 100644
--- a/net/cert/cert_verify_proc.cc
+++ b/net/cert/cert_verify_proc.cc
@@ -532,13 +532,14 @@
 scoped_refptr<CertVerifyProc> CertVerifyProc::CreateSystemVerifyProc(
     scoped_refptr<CertNetFetcher> cert_net_fetcher) {
 #if BUILDFLAG(IS_ANDROID)
-  return new CertVerifyProcAndroid(std::move(cert_net_fetcher));
+  return base::MakeRefCounted<CertVerifyProcAndroid>(
+      std::move(cert_net_fetcher));
 #elif BUILDFLAG(IS_IOS)
-  return new CertVerifyProcIOS();
+  return base::MakeRefCounted<CertVerifyProcIOS>();
 #elif BUILDFLAG(IS_MAC)
-  return new CertVerifyProcMac();
+  return base::MakeRefCounted<CertVerifyProcMac>();
 #elif BUILDFLAG(IS_WIN)
-  return new CertVerifyProcWin();
+  return base::MakeRefCounted<CertVerifyProcWin>();
 #else
 #error Unsupported platform
 #endif
diff --git a/net/cert/cert_verify_proc_unittest.cc b/net/cert/cert_verify_proc_unittest.cc
index 165f6fc..6d4b677 100644
--- a/net/cert/cert_verify_proc_unittest.cc
+++ b/net/cert/cert_verify_proc_unittest.cc
@@ -191,16 +191,17 @@
   switch (type) {
 #if BUILDFLAG(IS_ANDROID)
     case CERT_VERIFY_PROC_ANDROID:
-      return new CertVerifyProcAndroid(std::move(cert_net_fetcher));
+      return base::MakeRefCounted<CertVerifyProcAndroid>(
+          std::move(cert_net_fetcher));
 #elif BUILDFLAG(IS_IOS)
     case CERT_VERIFY_PROC_IOS:
-      return new CertVerifyProcIOS();
+      return base::MakeRefCounted<CertVerifyProcIOS>();
 #elif BUILDFLAG(IS_MAC)
     case CERT_VERIFY_PROC_MAC:
-      return new CertVerifyProcMac();
+      return base::MakeRefCounted<CertVerifyProcMac>();
 #elif BUILDFLAG(IS_WIN)
     case CERT_VERIFY_PROC_WIN:
-      return new CertVerifyProcWin();
+      return base::MakeRefCounted<CertVerifyProcWin>();
 #endif
     case CERT_VERIFY_PROC_BUILTIN:
       return CreateCertVerifyProcBuiltin(std::move(cert_net_fetcher),
@@ -1193,8 +1194,7 @@
     CertVerifyResult dummy_result;
     CertVerifyResult verify_result;
 
-    scoped_refptr<CertVerifyProc> verify_proc =
-        new MockCertVerifyProc(dummy_result);
+    auto verify_proc = base::MakeRefCounted<MockCertVerifyProc>(dummy_result);
 
     return verify_proc->Verify(
         chain.get(), "test.example.com", /*ocsp_response=*/std::string(),
@@ -1849,8 +1849,7 @@
   // Intranet names for public CAs should be flagged:
   CertVerifyResult dummy_result;
   dummy_result.is_issued_by_known_root = true;
-  scoped_refptr<CertVerifyProc> verify_proc =
-      new MockCertVerifyProc(dummy_result);
+  auto verify_proc = base::MakeRefCounted<MockCertVerifyProc>(dummy_result);
   error = verify_proc->Verify(
       cert.get(), "webmail", /*ocsp_response=*/std::string(),
       /*sct_list=*/std::string(), 0, CRLSet::BuiltinCRLSet().get(),
@@ -4292,7 +4291,7 @@
   result.has_sha1 = true;
   result.has_sha1_leaf = true;
   result.is_issued_by_known_root = true;
-  scoped_refptr<CertVerifyProc> verify_proc = new MockCertVerifyProc(result);
+  auto verify_proc = base::MakeRefCounted<MockCertVerifyProc>(result);
 
   int flags = 0;
   CertVerifyResult verify_result;
@@ -4313,7 +4312,7 @@
   result.has_sha1 = true;
   result.has_sha1_leaf = false;
   result.is_issued_by_known_root = true;
-  scoped_refptr<CertVerifyProc> verify_proc = new MockCertVerifyProc(result);
+  auto verify_proc = base::MakeRefCounted<MockCertVerifyProc>(result);
 
   int flags = 0;
   CertVerifyResult verify_result;
@@ -4340,7 +4339,7 @@
   result.has_sha1 = true;
   result.has_sha1_leaf = true;
   result.is_issued_by_known_root = false;
-  scoped_refptr<CertVerifyProc> verify_proc = new MockCertVerifyProc(result);
+  auto verify_proc = base::MakeRefCounted<MockCertVerifyProc>(result);
 
   // SHA-1 should be rejected by default for private roots...
   int flags = 0;
@@ -4439,8 +4438,7 @@
   //
   // This is sufficient for the purposes of this test, as the checking for weak
   // hash algorithms is done by CertVerifyProc::Verify().
-  scoped_refptr<CertVerifyProc> proc =
-      new MockCertVerifyProc(CertVerifyResult());
+  auto proc = base::MakeRefCounted<MockCertVerifyProc>(CertVerifyResult());
   int error = proc->Verify(ee_chain.get(), "127.0.0.1",
                            /*ocsp_response=*/std::string(),
                            /*sct_list=*/std::string(), flags,
@@ -4570,7 +4568,7 @@
     ASSERT_TRUE(cert);
     CertVerifyResult result;
     result.is_issued_by_known_root = false;
-    scoped_refptr<CertVerifyProc> verify_proc = new MockCertVerifyProc(result);
+    auto verify_proc = base::MakeRefCounted<MockCertVerifyProc>(result);
 
     CertVerifyResult verify_result;
     int error = verify_proc->Verify(
@@ -4679,7 +4677,7 @@
 
   const base::HistogramBase::Sample kGTSRootR4HistogramID = 486;
 
-  scoped_refptr<CertVerifyProc> verify_proc = new MockCertVerifyProc(result);
+  auto verify_proc = base::MakeRefCounted<MockCertVerifyProc>(result);
 
   histograms.ExpectTotalCount(kTrustAnchorVerifyHistogram, 0);
 
@@ -4727,7 +4725,7 @@
 
   const base::HistogramBase::Sample kGTSRootR3HistogramID = 485;
 
-  scoped_refptr<CertVerifyProc> verify_proc = new MockCertVerifyProc(result);
+  auto verify_proc = base::MakeRefCounted<MockCertVerifyProc>(result);
 
   histograms.ExpectTotalCount(kTrustAnchorVerifyHistogram, 0);
 
@@ -4765,7 +4763,7 @@
   result.public_key_hashes.push_back(HashValue(root_hash));
   result.is_issued_by_known_root = true;
 
-  scoped_refptr<CertVerifyProc> verify_proc = new MockCertVerifyProc(result);
+  auto verify_proc = base::MakeRefCounted<MockCertVerifyProc>(result);
 
   histograms.ExpectTotalCount(kTrustAnchorVerifyHistogram, 0);
   histograms.ExpectTotalCount(kTrustAnchorVerifyOutOfDateHistogram, 0);
@@ -4798,7 +4796,7 @@
   result.ocsp_result.response_status = OCSPVerifyResult::PROVIDED;
   result.ocsp_result.revocation_status = OCSPRevocationStatus::GOOD;
 
-  scoped_refptr<CertVerifyProc> verify_proc = new MockCertVerifyProc(result);
+  auto verify_proc = base::MakeRefCounted<MockCertVerifyProc>(result);
 
   int flags = 0;
   CertVerifyResult verify_result;
@@ -4829,7 +4827,7 @@
   EXPECT_EQ(OCSPRevocationStatus::UNKNOWN,
             result.ocsp_result.revocation_status);
 
-  scoped_refptr<CertVerifyProc> verify_proc = new MockCertVerifyProc(result);
+  auto verify_proc = base::MakeRefCounted<MockCertVerifyProc>(result);
 
   int flags = 0;
   CertVerifyResult verify_result;
diff --git a/net/cert/cert_verify_proc_win.cc b/net/cert/cert_verify_proc_win.cc
index 04fefb9..1c73418 100644
--- a/net/cert/cert_verify_proc_win.cc
+++ b/net/cert/cert_verify_proc_win.cc
@@ -453,7 +453,7 @@
   // Compute the subject's serial.
   const CRYPT_INTEGER_BLOB* serial_blob =
       &subject_cert->pCertInfo->SerialNumber;
-  std::unique_ptr<uint8_t[]> serial_bytes(new uint8_t[serial_blob->cbData]);
+  auto serial_bytes = std::make_unique<uint8_t[]>(serial_blob->cbData);
   // The bytes of the serial number are stored little-endian.
   // Note: While MSDN implies that bytes are stripped from this serial,
   // they are not - only CertCompareIntegerBlob actually removes bytes.
diff --git a/net/cert/crl_set.cc b/net/cert/crl_set.cc
index 42ae3b9..d60b386 100644
--- a/net/cert/crl_set.cc
+++ b/net/cert/crl_set.cc
@@ -236,7 +236,7 @@
   if (not_after < 0)
     return false;
 
-  scoped_refptr<CRLSet> crl_set(new CRLSet());
+  auto crl_set = base::WrapRefCounted(new CRLSet());
   crl_set->sequence_ = static_cast<uint32_t>(*sequence);
   crl_set->not_after_ = static_cast<uint64_t>(not_after);
   crl_set->crls_.reserve(64);  // Value observed experimentally.
@@ -435,7 +435,7 @@
     OPENSSL_free(x501_data);
   }
 
-  scoped_refptr<CRLSet> crl_set(new CRLSet);
+  auto crl_set = base::WrapRefCounted(new CRLSet());
   crl_set->sequence_ = 0;
   if (is_expired)
     crl_set->not_after_ = 1;
diff --git a/net/cert/ct_log_verifier.cc b/net/cert/ct_log_verifier.cc
index 7d6fcca..34d1080 100644
--- a/net/cert/ct_log_verifier.cc
+++ b/net/cert/ct_log_verifier.cc
@@ -59,8 +59,7 @@
 scoped_refptr<const CTLogVerifier> CTLogVerifier::Create(
     const base::StringPiece& public_key,
     std::string description) {
-  scoped_refptr<CTLogVerifier> result(
-      new CTLogVerifier(std::move(description)));
+  auto result = base::WrapRefCounted(new CTLogVerifier(std::move(description)));
   if (!result->Init(public_key))
     return nullptr;
   return result;
diff --git a/net/cert/ct_serialization.cc b/net/cert/ct_serialization.cc
index e1600b1..1147a378 100644
--- a/net/cert/ct_serialization.cc
+++ b/net/cert/ct_serialization.cc
@@ -318,8 +318,7 @@
 bool DecodeSignedCertificateTimestamp(
     base::StringPiece* input,
     scoped_refptr<SignedCertificateTimestamp>* output) {
-  scoped_refptr<SignedCertificateTimestamp> result(
-      new SignedCertificateTimestamp());
+  auto result = base::MakeRefCounted<SignedCertificateTimestamp>();
   uint8_t version;
   CBS input_cbs;
   CBS_init(&input_cbs, reinterpret_cast<const uint8_t*>(input->data()),
diff --git a/net/cert/internal/cert_issuer_source_aia.cc b/net/cert/internal/cert_issuer_source_aia.cc
index d7c07c1..d7e95d5 100644
--- a/net/cert/internal/cert_issuer_source_aia.cc
+++ b/net/cert/internal/cert_issuer_source_aia.cc
@@ -195,7 +195,7 @@
   if (urls.empty())
     return;
 
-  std::unique_ptr<AiaRequest> aia_request(new AiaRequest());
+  auto aia_request = std::make_unique<AiaRequest>();
 
   for (const auto& url : urls) {
     // TODO(mattm): add synchronous failure mode to FetchCaIssuers interface so
diff --git a/net/cert/internal/cert_issuer_source_aia_unittest.cc b/net/cert/internal/cert_issuer_source_aia_unittest.cc
index 67d7eeee..5c73cbb0 100644
--- a/net/cert/internal/cert_issuer_source_aia_unittest.cc
+++ b/net/cert/internal/cert_issuer_source_aia_unittest.cc
@@ -194,8 +194,7 @@
   scoped_refptr<ParsedCertificate> intermediate_cert;
   ASSERT_TRUE(ReadTestCert("i2.pem", &intermediate_cert));
 
-  scoped_refptr<StrictMock<MockCertNetFetcher>> mock_fetcher(
-      new StrictMock<MockCertNetFetcher>());
+  auto mock_fetcher = base::MakeRefCounted<StrictMock<MockCertNetFetcher>>();
 
   EXPECT_CALL(*mock_fetcher,
               FetchCaIssuers(GURL("http://url-for-aia2/I2.foo"), _, _))
@@ -229,8 +228,7 @@
   scoped_refptr<ParsedCertificate> intermediate_cert2;
   ASSERT_TRUE(ReadTestCert("i2.pem", &intermediate_cert2));
 
-  scoped_refptr<StrictMock<MockCertNetFetcher>> mock_fetcher(
-      new StrictMock<MockCertNetFetcher>());
+  auto mock_fetcher = base::MakeRefCounted<StrictMock<MockCertNetFetcher>>();
 
   EXPECT_CALL(*mock_fetcher,
               FetchCaIssuers(GURL("http://url-for-aia/I.cer"), _, _))
@@ -271,8 +269,7 @@
   scoped_refptr<ParsedCertificate> cert;
   ASSERT_TRUE(ReadTestCert("target_one_aia.pem", &cert));
 
-  scoped_refptr<StrictMock<MockCertNetFetcher>> mock_fetcher(
-      new StrictMock<MockCertNetFetcher>());
+  auto mock_fetcher = base::MakeRefCounted<StrictMock<MockCertNetFetcher>>();
 
   // HTTP request returns with an error.
   EXPECT_CALL(*mock_fetcher,
@@ -296,8 +293,7 @@
   scoped_refptr<ParsedCertificate> cert;
   ASSERT_TRUE(ReadTestCert("target_one_aia.pem", &cert));
 
-  scoped_refptr<StrictMock<MockCertNetFetcher>> mock_fetcher(
-      new StrictMock<MockCertNetFetcher>());
+  auto mock_fetcher = base::MakeRefCounted<StrictMock<MockCertNetFetcher>>();
 
   // HTTP request returns invalid certificate data.
   EXPECT_CALL(*mock_fetcher,
@@ -324,8 +320,7 @@
   scoped_refptr<ParsedCertificate> intermediate_cert2;
   ASSERT_TRUE(ReadTestCert("i2.pem", &intermediate_cert2));
 
-  scoped_refptr<StrictMock<MockCertNetFetcher>> mock_fetcher(
-      new StrictMock<MockCertNetFetcher>());
+  auto mock_fetcher = base::MakeRefCounted<StrictMock<MockCertNetFetcher>>();
 
   // Request for I.cer completes first, but fails.
   EXPECT_CALL(*mock_fetcher,
@@ -364,8 +359,7 @@
   scoped_refptr<ParsedCertificate> intermediate_cert;
   ASSERT_TRUE(ReadTestCert("i.pem", &intermediate_cert));
 
-  scoped_refptr<StrictMock<MockCertNetFetcher>> mock_fetcher(
-      new StrictMock<MockCertNetFetcher>());
+  auto mock_fetcher = base::MakeRefCounted<StrictMock<MockCertNetFetcher>>();
 
   // Request for I.cer completes first.
   EXPECT_CALL(*mock_fetcher,
@@ -402,8 +396,7 @@
   scoped_refptr<ParsedCertificate> cert;
   ASSERT_TRUE(ReadTestCert("target_six_aia.pem", &cert));
 
-  scoped_refptr<StrictMock<MockCertNetFetcher>> mock_fetcher(
-      new StrictMock<MockCertNetFetcher>());
+  auto mock_fetcher = base::MakeRefCounted<StrictMock<MockCertNetFetcher>>();
 
   std::vector<uint8_t> bad_der({1, 2, 3, 4, 5});
 
diff --git a/net/cert/internal/general_names.cc b/net/cert/internal/general_names.cc
index cfce5a1..6e4c57a 100644
--- a/net/cert/internal/general_names.cc
+++ b/net/cert/internal/general_names.cc
@@ -85,7 +85,7 @@
     CertErrors* errors) {
   DCHECK(errors);
 
-  std::unique_ptr<GeneralNames> general_names(new GeneralNames());
+  auto general_names = std::make_unique<GeneralNames>();
 
   der::Parser sequence_parser(general_names_value);
   // The GeneralNames sequence should have at least 1 element.
diff --git a/net/cert/internal/parsed_certificate.cc b/net/cert/internal/parsed_certificate.cc
index 5253a7d..c288b52 100644
--- a/net/cert/internal/parsed_certificate.cc
+++ b/net/cert/internal/parsed_certificate.cc
@@ -87,7 +87,7 @@
   if (!errors)
     errors = &unused_errors;
 
-  scoped_refptr<ParsedCertificate> result(new ParsedCertificate);
+  auto result = base::WrapRefCounted(new ParsedCertificate);
   result->cert_data_ = std::move(backing_data);
   result->cert_ = der::Input(CRYPTO_BUFFER_data(result->cert_data_.get()),
                              CRYPTO_BUFFER_len(result->cert_data_.get()));
diff --git a/net/cert/internal/path_builder.cc b/net/cert/internal/path_builder.cc
index 8270275..3b847d6 100644
--- a/net/cert/internal/path_builder.cc
+++ b/net/cert/internal/path_builder.cc
@@ -715,9 +715,10 @@
     const std::set<der::Input>& user_initial_policy_set,
     InitialPolicyMappingInhibit initial_policy_mapping_inhibit,
     InitialAnyPolicyInhibit initial_any_policy_inhibit)
-    : cert_path_iter_(new CertPathIter(std::move(cert),
-                                       trust_store,
-                                       /*debug_data=*/&out_result_)),
+    : cert_path_iter_(
+          std::make_unique<CertPathIter>(std::move(cert),
+                                         trust_store,
+                                         /*debug_data=*/&out_result_)),
       delegate_(delegate),
       time_(time),
       key_purpose_(key_purpose),
diff --git a/net/cert/internal/path_builder_unittest.cc b/net/cert/internal/path_builder_unittest.cc
index 61096bbf..8f5d471 100644
--- a/net/cert/internal/path_builder_unittest.cc
+++ b/net/cert/internal/path_builder_unittest.cc
@@ -93,8 +93,7 @@
     num_async_gets_++;
     ParsedCertificateList issuers;
     static_cert_issuer_source_.SyncGetIssuersOf(cert, &issuers);
-    std::unique_ptr<StaticAsyncRequest> req(
-        new StaticAsyncRequest(std::move(issuers)));
+    auto req = std::make_unique<StaticAsyncRequest>(std::move(issuers));
     *out_req = std::move(req);
     if (!async_get_callback_.is_null())
       async_get_callback_.Run();
@@ -1662,8 +1661,8 @@
   path_builder.AddCertIssuerSource(&cert_issuer_source);
 
   // Create the mock CertIssuerSource::Request...
-  std::unique_ptr<StrictMock<MockCertIssuerSourceRequest>>
-      target_issuers_req_owner(new StrictMock<MockCertIssuerSourceRequest>());
+  auto target_issuers_req_owner =
+      std::make_unique<StrictMock<MockCertIssuerSourceRequest>>();
   // Keep a raw pointer to the Request...
   StrictMock<MockCertIssuerSourceRequest>* target_issuers_req =
       target_issuers_req_owner.get();
@@ -1742,8 +1741,8 @@
   path_builder.AddCertIssuerSource(&cert_issuer_source);
 
   // Create the mock CertIssuerSource::Request...
-  std::unique_ptr<StrictMock<MockCertIssuerSourceRequest>>
-      target_issuers_req_owner(new StrictMock<MockCertIssuerSourceRequest>());
+  auto target_issuers_req_owner =
+      std::make_unique<StrictMock<MockCertIssuerSourceRequest>>();
   // Keep a raw pointer to the Request...
   StrictMock<MockCertIssuerSourceRequest>* target_issuers_req =
       target_issuers_req_owner.get();
diff --git a/net/cert/nss_cert_database.cc b/net/cert/nss_cert_database.cc
index 766203d6..7f1c1290 100644
--- a/net/cert/nss_cert_database.cc
+++ b/net/cert/nss_cert_database.cc
@@ -91,7 +91,8 @@
                                  crypto::ScopedPK11Slot private_slot)
     : public_slot_(std::move(public_slot)),
       private_slot_(std::move(private_slot)),
-      observer_list_(new base::ObserverListThreadSafe<Observer>) {
+      observer_list_(
+          base::MakeRefCounted<base::ObserverListThreadSafe<Observer>>()) {
   CHECK(public_slot_);
 
   CertDatabase* cert_db = CertDatabase::GetInstance();
diff --git a/net/cert/signed_certificate_timestamp.cc b/net/cert/signed_certificate_timestamp.cc
index 21e7fe2f..da6e2c9 100644
--- a/net/cert/signed_certificate_timestamp.cc
+++ b/net/cert/signed_certificate_timestamp.cc
@@ -49,8 +49,7 @@
   int64_t timestamp;
   int hash_algorithm;
   int sig_algorithm;
-  scoped_refptr<SignedCertificateTimestamp> sct(
-      new SignedCertificateTimestamp());
+  auto sct = base::MakeRefCounted<SignedCertificateTimestamp>();
   int origin;
   // string values are set directly
   if (!(iter->ReadInt(&version) &&
diff --git a/net/cert/x509_certificate.cc b/net/cert/x509_certificate.cc
index 5acf25b..c04dd56 100644
--- a/net/cert/x509_certificate.cc
+++ b/net/cert/x509_certificate.cc
@@ -118,7 +118,7 @@
     bssl::UniquePtr<CRYPTO_BUFFER> cert_buffer,
     std::vector<bssl::UniquePtr<CRYPTO_BUFFER>> intermediates) {
   DCHECK(cert_buffer);
-  scoped_refptr<X509Certificate> cert(
+  auto cert = base::WrapRefCounted(
       new X509Certificate(std::move(cert_buffer), std::move(intermediates)));
   if (!cert->cert_buffer())
     return nullptr;  // Initialize() failed.
@@ -131,7 +131,7 @@
     std::vector<bssl::UniquePtr<CRYPTO_BUFFER>> intermediates,
     UnsafeCreateOptions options) {
   DCHECK(cert_buffer);
-  scoped_refptr<X509Certificate> cert(new X509Certificate(
+  auto cert = base::WrapRefCounted(new X509Certificate(
       std::move(cert_buffer), std::move(intermediates), options));
   if (!cert->cert_buffer())
     return nullptr;  // Initialize() failed.
diff --git a/net/cert_net/cert_net_fetcher_url_request.cc b/net/cert_net/cert_net_fetcher_url_request.cc
index e570758..b9ed740 100644
--- a/net/cert_net/cert_net_fetcher_url_request.cc
+++ b/net/cert_net/cert_net_fetcher_url_request.cc
@@ -803,7 +803,7 @@
 CertNetFetcherURLRequest::FetchCaIssuers(const GURL& url,
                                          int timeout_milliseconds,
                                          int max_response_bytes) {
-  std::unique_ptr<RequestParams> request_params(new RequestParams);
+  auto request_params = std::make_unique<RequestParams>();
 
   request_params->url = url;
   request_params->http_method = HTTP_METHOD_GET;
@@ -818,7 +818,7 @@
     const GURL& url,
     int timeout_milliseconds,
     int max_response_bytes) {
-  std::unique_ptr<RequestParams> request_params(new RequestParams);
+  auto request_params = std::make_unique<RequestParams>();
 
   request_params->url = url;
   request_params->http_method = HTTP_METHOD_GET;
@@ -833,7 +833,7 @@
     const GURL& url,
     int timeout_milliseconds,
     int max_response_bytes) {
-  std::unique_ptr<RequestParams> request_params(new RequestParams);
+  auto request_params = std::make_unique<RequestParams>();
 
   request_params->url = url;
   request_params->http_method = HTTP_METHOD_GET;
@@ -867,7 +867,7 @@
 std::unique_ptr<CertNetFetcherURLRequest::Request>
 CertNetFetcherURLRequest::DoFetch(
     std::unique_ptr<RequestParams> request_params) {
-  scoped_refptr<RequestCore> request_core = new RequestCore(task_runner_);
+  auto request_core = base::MakeRefCounted<RequestCore>(task_runner_);
 
   // If the fetcher has already been shutdown, DoFetchOnNetworkSequence will
   // signal the request with an error. However, if the fetcher shuts down
diff --git a/net/cookies/cookie_monster_perftest.cc b/net/cookies/cookie_monster_perftest.cc
index 3839ddb..6ad5922 100644
--- a/net/cookies/cookie_monster_perftest.cc
+++ b/net/cookies/cookie_monster_perftest.cc
@@ -356,7 +356,7 @@
 }
 
 TEST_F(CookieMonsterTest, TestImport) {
-  scoped_refptr<MockPersistentCookieStore> store(new MockPersistentCookieStore);
+  auto store = base::MakeRefCounted<MockPersistentCookieStore>();
   std::vector<std::unique_ptr<CanonicalCookie>> initial_cookies;
   GetCookieListCallback getCookieListCallback;
 
@@ -377,8 +377,8 @@
 
   store->SetLoadExpectation(true, std::move(initial_cookies));
 
-  std::unique_ptr<CookieMonster> cm(
-      new CookieMonster(store.get(), nullptr, kFirstPartySetsEnabled));
+  auto cm = std::make_unique<CookieMonster>(store.get(), nullptr,
+                                            kFirstPartySetsEnabled);
 
   // Import will happen on first access.
   GURL gurl("www.foo.com");
@@ -394,8 +394,8 @@
 }
 
 TEST_F(CookieMonsterTest, TestGetKey) {
-  std::unique_ptr<CookieMonster> cm(
-      new CookieMonster(nullptr, nullptr, kFirstPartySetsEnabled));
+  auto cm =
+      std::make_unique<CookieMonster>(nullptr, nullptr, kFirstPartySetsEnabled);
   auto reporter = SetUpCookieMonsterReporter("baseline_story");
   base::ElapsedTimer get_key_timer;
   for (int i = 0; i < kNumCookies; i++)
diff --git a/net/cookies/cookie_monster_store_test.cc b/net/cookies/cookie_monster_store_test.cc
index 0bf3379..38bce0b9 100644
--- a/net/cookies/cookie_monster_store_test.cc
+++ b/net/cookies/cookie_monster_store_test.cc
@@ -205,8 +205,7 @@
     int days_old) {
   base::Time current(base::Time::Now());
   base::Time past_creation(base::Time::Now() - base::Days(100));
-  scoped_refptr<MockSimplePersistentCookieStore> store(
-      new MockSimplePersistentCookieStore);
+  auto store = base::MakeRefCounted<MockSimplePersistentCookieStore>();
   int total_cookies = num_secure_cookies + num_non_secure_cookies;
   int base = 0;
   // Must expire to be persistent
diff --git a/net/cookies/cookie_monster_unittest.cc b/net/cookies/cookie_monster_unittest.cc
index 0df373f..2d0595e1 100644
--- a/net/cookies/cookie_monster_unittest.cc
+++ b/net/cookies/cookie_monster_unittest.cc
@@ -957,9 +957,9 @@
 
   // Function for creating a CM with a number of cookies in it,
   // no store (and hence no ability to affect access time).
-  CookieMonster* CreateMonsterForGC(int num_cookies) {
-    CookieMonster* cm(
-        new CookieMonster(nullptr, net::NetLog::Get(), kFirstPartySetsDefault));
+  std::unique_ptr<CookieMonster> CreateMonsterForGC(int num_cookies) {
+    auto cm = std::make_unique<CookieMonster>(nullptr, net::NetLog::Get(),
+                                              kFirstPartySetsDefault);
     base::Time creation_time = base::Time::Now();
     for (int i = 0; i < num_cookies; i++) {
       std::unique_ptr<CanonicalCookie> cc(
@@ -1443,9 +1443,9 @@
 }
 
 TEST_F(CookieMonsterTest, TestCookieDeleteAll) {
-  scoped_refptr<MockPersistentCookieStore> store(new MockPersistentCookieStore);
-  std::unique_ptr<CookieMonster> cm(new CookieMonster(
-      store.get(), net::NetLog::Get(), kFirstPartySetsDefault));
+  auto store = base::MakeRefCounted<MockPersistentCookieStore>();
+  auto cm = std::make_unique<CookieMonster>(store.get(), net::NetLog::Get(),
+                                            kFirstPartySetsDefault);
   CookieOptions options = CookieOptions::MakeAllInclusive();
 
   EXPECT_TRUE(SetCookie(cm.get(), http_www_foo_.url(), kValidCookieLine));
@@ -1740,9 +1740,9 @@
     kLastAccessThreshold + base::Milliseconds(20);
 
 TEST_F(CookieMonsterTest, TestLastAccess) {
-  std::unique_ptr<CookieMonster> cm(
-      new CookieMonster(nullptr, kLastAccessThreshold, net::NetLog::Get(),
-                        kFirstPartySetsDefault));
+  auto cm = std::make_unique<CookieMonster>(nullptr, kLastAccessThreshold,
+                                            net::NetLog::Get(),
+                                            kFirstPartySetsDefault);
 
   EXPECT_TRUE(SetCookie(cm.get(), http_www_foo_.url(), "A=B"));
   const Time last_access_date(GetFirstCookieAccessDate(cm.get()));
@@ -1803,8 +1803,8 @@
   auto cm = std::make_unique<CookieMonster>(nullptr, net::NetLog::Get(),
                                             kFirstPartySetsDefault);
 
-  std::unique_ptr<CookieMonster> cm_foo(
-      new CookieMonster(nullptr, net::NetLog::Get(), kFirstPartySetsDefault));
+  auto cm_foo = std::make_unique<CookieMonster>(nullptr, net::NetLog::Get(),
+                                                kFirstPartySetsDefault);
 
   // Only cm_foo should allow foo:// cookies.
   std::vector<std::string> schemes;
@@ -1865,9 +1865,9 @@
 }
 
 TEST_F(CookieMonsterTest, GetAllCookiesForURL) {
-  std::unique_ptr<CookieMonster> cm(
-      new CookieMonster(nullptr, kLastAccessThreshold, net::NetLog::Get(),
-                        kFirstPartySetsDefault));
+  auto cm = std::make_unique<CookieMonster>(nullptr, kLastAccessThreshold,
+                                            net::NetLog::Get(),
+                                            kFirstPartySetsDefault);
 
   // Create an httponly cookie.
   CookieOptions options = CookieOptions::MakeAllInclusive();
@@ -1983,9 +1983,9 @@
 }
 
 TEST_F(CookieMonsterTest, GetExcludedCookiesForURL) {
-  std::unique_ptr<CookieMonster> cm(
-      new CookieMonster(nullptr, kLastAccessThreshold, net::NetLog::Get(),
-                        kFirstPartySetsDefault));
+  auto cm = std::make_unique<CookieMonster>(nullptr, kLastAccessThreshold,
+                                            net::NetLog::Get(),
+                                            kFirstPartySetsDefault);
 
   // Create an httponly cookie.
   CookieOptions options = CookieOptions::MakeAllInclusive();
@@ -2254,7 +2254,7 @@
 //
 // This is a regression test for: http://crbug.com/17855.
 TEST_F(CookieMonsterTest, DontImportDuplicateCookies) {
-  scoped_refptr<MockPersistentCookieStore> store(new MockPersistentCookieStore);
+  auto store = base::MakeRefCounted<MockPersistentCookieStore>();
 
   // We will fill some initial cookies into the PersistentCookieStore,
   // to simulate a database with 4 duplicates.  Note that we need to
@@ -2304,8 +2304,8 @@
   // Inject our initial cookies into the mock PersistentCookieStore.
   store->SetLoadExpectation(true, std::move(initial_cookies));
 
-  std::unique_ptr<CookieMonster> cm(new CookieMonster(
-      store.get(), net::NetLog::Get(), kFirstPartySetsDefault));
+  auto cm = std::make_unique<CookieMonster>(store.get(), net::NetLog::Get(),
+                                            kFirstPartySetsDefault);
 
   // Verify that duplicates were not imported for path "/".
   // (If this had failed, GetCookies() would have also returned X=1, X=2, X=4).
@@ -2349,9 +2349,9 @@
       Time::Now() + base::Days(1), absl::nullopt, cookie_partition_key);
   initial_cookies.push_back(std::move(cc));
 
-  scoped_refptr<MockPersistentCookieStore> store(new MockPersistentCookieStore);
-  std::unique_ptr<CookieMonster> cm(new CookieMonster(
-      store.get(), net::NetLog::Get(), kFirstPartySetsDefault));
+  auto store = base::MakeRefCounted<MockPersistentCookieStore>();
+  auto cm = std::make_unique<CookieMonster>(store.get(), net::NetLog::Get(),
+                                            kFirstPartySetsDefault);
 
   store->SetLoadExpectation(true, std::move(initial_cookies));
 
@@ -2372,7 +2372,7 @@
 //
 // This is a regression test for: http://crbug.com/43188.
 TEST_F(CookieMonsterTest, ImportDuplicateCreationTimes) {
-  scoped_refptr<MockPersistentCookieStore> store(new MockPersistentCookieStore);
+  auto store = base::MakeRefCounted<MockPersistentCookieStore>();
 
   Time now(Time::Now());
   Time earlier(now - base::Days(1));
@@ -2403,8 +2403,8 @@
   // Inject our initial cookies into the mock PersistentCookieStore.
   store->SetLoadExpectation(true, std::move(initial_cookies));
 
-  std::unique_ptr<CookieMonster> cm(new CookieMonster(
-      store.get(), net::NetLog::Get(), kFirstPartySetsDefault));
+  auto cm = std::make_unique<CookieMonster>(store.get(), net::NetLog::Get(),
+                                            kFirstPartySetsDefault);
 
   CookieList list(GetAllCookies(cm.get()));
   EXPECT_EQ(2U, list.size());
@@ -2417,7 +2417,7 @@
 }
 
 TEST_F(CookieMonsterTest, ImportDuplicateCreationTimes_PartitionedCookies) {
-  scoped_refptr<MockPersistentCookieStore> store(new MockPersistentCookieStore);
+  auto store = base::MakeRefCounted<MockPersistentCookieStore>();
 
   Time now(Time::Now());
   Time earlier(now - base::Days(1));
@@ -2461,8 +2461,8 @@
   // Inject our initial cookies into the mock PersistentCookieStore.
   store->SetLoadExpectation(true, std::move(initial_cookies));
 
-  std::unique_ptr<CookieMonster> cm(new CookieMonster(
-      store.get(), net::NetLog::Get(), kFirstPartySetsDefault));
+  auto cm = std::make_unique<CookieMonster>(store.get(), net::NetLog::Get(),
+                                            kFirstPartySetsDefault);
 
   CookieList list(GetAllCookies(cm.get()));
   EXPECT_EQ(2U, list.size());
@@ -2533,8 +2533,7 @@
   // Store details for cookies transforming through the backing store interface.
 
   base::Time current(base::Time::Now());
-  scoped_refptr<MockSimplePersistentCookieStore> store(
-      new MockSimplePersistentCookieStore);
+  auto store = base::MakeRefCounted<MockSimplePersistentCookieStore>();
   base::Time expires(base::Time::Now() + base::Seconds(100));
 
   const CookiesInputInfo input_info[] = {
@@ -2551,8 +2550,8 @@
 
   // Create new cookies and flush them to the store.
   {
-    std::unique_ptr<CookieMonster> cmout(new CookieMonster(
-        store.get(), net::NetLog::Get(), kFirstPartySetsDefault));
+    auto cmout = std::make_unique<CookieMonster>(
+        store.get(), net::NetLog::Get(), kFirstPartySetsDefault);
     for (const auto& cookie : input_info) {
       EXPECT_TRUE(SetCanonicalCookie(
           cmout.get(),
@@ -2571,8 +2570,8 @@
 
   // Create a new cookie monster and make sure that everything is correct
   {
-    std::unique_ptr<CookieMonster> cmin(new CookieMonster(
-        store.get(), net::NetLog::Get(), kFirstPartySetsDefault));
+    auto cmin = std::make_unique<CookieMonster>(store.get(), net::NetLog::Get(),
+                                                kFirstPartySetsDefault);
     CookieList cookies(GetAllCookies(cmin.get()));
     ASSERT_EQ(2u, cookies.size());
     // Ordering is path length, then creation time.  So second cookie
@@ -2777,10 +2776,10 @@
 TEST_F(CookieMonsterTest, WhileLoadingLoadCompletesBeforeKeyLoadCompletes) {
   const GURL kUrl = GURL(kTopLevelDomainPlus1);
 
-  scoped_refptr<MockPersistentCookieStore> store(new MockPersistentCookieStore);
+  auto store = base::MakeRefCounted<MockPersistentCookieStore>();
   store->set_store_load_commands(true);
-  std::unique_ptr<CookieMonster> cm(new CookieMonster(
-      store.get(), net::NetLog::Get(), kFirstPartySetsDefault));
+  auto cm = std::make_unique<CookieMonster>(store.get(), net::NetLog::Get(),
+                                            kFirstPartySetsDefault);
 
   auto cookie = CanonicalCookie::Create(
       kUrl, "a=b", base::Time::Now(), absl::nullopt /* server_time */,
@@ -2827,10 +2826,10 @@
 TEST_F(CookieMonsterTest, WhileLoadingDeleteAllGetForURL) {
   const GURL kUrl = GURL(kTopLevelDomainPlus1);
 
-  scoped_refptr<MockPersistentCookieStore> store(new MockPersistentCookieStore);
+  auto store = base::MakeRefCounted<MockPersistentCookieStore>();
   store->set_store_load_commands(true);
-  std::unique_ptr<CookieMonster> cm(new CookieMonster(
-      store.get(), net::NetLog::Get(), kFirstPartySetsDefault));
+  auto cm = std::make_unique<CookieMonster>(store.get(), net::NetLog::Get(),
+                                            kFirstPartySetsDefault);
 
   ResultSavingCookieCallback<uint32_t> delete_callback;
   cm->DeleteAllAsync(delete_callback.MakeCallback());
@@ -2867,10 +2866,10 @@
 TEST_F(CookieMonsterTest, WhileLoadingGetAllSetGetAll) {
   const GURL kUrl = GURL(kTopLevelDomainPlus1);
 
-  scoped_refptr<MockPersistentCookieStore> store(new MockPersistentCookieStore);
+  auto store = base::MakeRefCounted<MockPersistentCookieStore>();
   store->set_store_load_commands(true);
-  std::unique_ptr<CookieMonster> cm(new CookieMonster(
-      store.get(), net::NetLog::Get(), kFirstPartySetsDefault));
+  auto cm = std::make_unique<CookieMonster>(store.get(), net::NetLog::Get(),
+                                            kFirstPartySetsDefault);
 
   GetAllCookiesCallback get_cookies_callback1;
   cm->GetAllCookiesAsync(get_cookies_callback1.MakeCallback());
@@ -2918,10 +2917,10 @@
 TEST_F(CookieMonsterTest, CheckOrderOfCookieTaskQueueWhenLoadingCompletes) {
   const GURL kUrl = GURL(kTopLevelDomainPlus1);
 
-  scoped_refptr<MockPersistentCookieStore> store(new MockPersistentCookieStore);
+  auto store = base::MakeRefCounted<MockPersistentCookieStore>();
   store->set_store_load_commands(true);
-  std::unique_ptr<CookieMonster> cm(new CookieMonster(
-      store.get(), net::NetLog::Get(), kFirstPartySetsDefault));
+  auto cm = std::make_unique<CookieMonster>(store.get(), net::NetLog::Get(),
+                                            kFirstPartySetsDefault);
 
   // Get all cookies task that queues a task to set a cookie when executed.
   auto cookie = CanonicalCookie::Create(
@@ -3016,7 +3015,7 @@
 }
 
 TEST_F(CookieMonsterTest, SetAllCookies) {
-  scoped_refptr<FlushablePersistentStore> store(new FlushablePersistentStore());
+  auto store = base::MakeRefCounted<FlushablePersistentStore>();
   auto cm = std::make_unique<CookieMonster>(store.get(), net::NetLog::Get(),
                                             kFirstPartySetsDefault);
   cm->SetPersistSessionCookies(true);
@@ -3088,7 +3087,7 @@
 
 // Check that DeleteAll does flush (as a quick check that flush_count() works).
 TEST_F(CookieMonsterTest, DeleteAll) {
-  scoped_refptr<FlushablePersistentStore> store(new FlushablePersistentStore());
+  auto store = base::MakeRefCounted<FlushablePersistentStore>();
   auto cm = std::make_unique<CookieMonster>(store.get(), net::NetLog::Get(),
                                             kFirstPartySetsDefault);
   cm->SetPersistSessionCookies(true);
@@ -3162,9 +3161,9 @@
 // Test that CookieMonster writes session cookies into the underlying
 // CookieStore if the "persist session cookies" option is on.
 TEST_F(CookieMonsterTest, PersistSessionCookies) {
-  scoped_refptr<MockPersistentCookieStore> store(new MockPersistentCookieStore);
-  std::unique_ptr<CookieMonster> cm(new CookieMonster(
-      store.get(), net::NetLog::Get(), kFirstPartySetsDefault));
+  auto store = base::MakeRefCounted<MockPersistentCookieStore>();
+  auto cm = std::make_unique<CookieMonster>(store.get(), net::NetLog::Get(),
+                                            kFirstPartySetsDefault);
   cm->SetPersistSessionCookies(true);
 
   // All cookies set with SetCookie are session cookies.
@@ -3200,9 +3199,9 @@
 
 // Test the commands sent to the persistent cookie store.
 TEST_F(CookieMonsterTest, PersisentCookieStorageTest) {
-  scoped_refptr<MockPersistentCookieStore> store(new MockPersistentCookieStore);
-  std::unique_ptr<CookieMonster> cm(new CookieMonster(
-      store.get(), net::NetLog::Get(), kFirstPartySetsDefault));
+  auto store = base::MakeRefCounted<MockPersistentCookieStore>();
+  auto cm = std::make_unique<CookieMonster>(store.get(), net::NetLog::Get(),
+                                            kFirstPartySetsDefault);
 
   // Add a cookie.
   EXPECT_TRUE(SetCookie(cm.get(), http_www_foo_.url(),
@@ -3251,7 +3250,7 @@
   const std::string domain("host");
   const std::string path("/path");
 
-  scoped_refptr<MockPersistentCookieStore> store(new MockPersistentCookieStore);
+  auto store = base::MakeRefCounted<MockPersistentCookieStore>();
 
   std::vector<std::unique_ptr<CanonicalCookie>> initial_cookies;
 
@@ -3300,8 +3299,8 @@
   // Inject our initial cookies into the mock PersistentCookieStore.
   store->SetLoadExpectation(true, std::move(initial_cookies));
 
-  std::unique_ptr<CookieMonster> cm(new CookieMonster(
-      store.get(), net::NetLog::Get(), kFirstPartySetsDefault));
+  auto cm = std::make_unique<CookieMonster>(store.get(), net::NetLog::Get(),
+                                            kFirstPartySetsDefault);
 
   EXPECT_EQ("foo=bar; hello=world",
             GetCookies(cm.get(), url,
@@ -3313,9 +3312,9 @@
   base::HistogramTester histograms;
   const std::string cookie_source_histogram = "Cookie.CookieSourceScheme";
 
-  scoped_refptr<MockPersistentCookieStore> store(new MockPersistentCookieStore);
-  std::unique_ptr<CookieMonster> cm(new CookieMonster(
-      store.get(), net::NetLog::Get(), kFirstPartySetsDefault));
+  auto store = base::MakeRefCounted<MockPersistentCookieStore>();
+  auto cm = std::make_unique<CookieMonster>(store.get(), net::NetLog::Get(),
+                                            kFirstPartySetsDefault);
 
   histograms.ExpectTotalCount(cookie_source_histogram, 0);
 
@@ -3377,7 +3376,7 @@
   const char kHistogramName[] = "Cookie.NumKeys";
 
   // Test loading cookies from store.
-  scoped_refptr<MockPersistentCookieStore> store(new MockPersistentCookieStore);
+  auto store = base::MakeRefCounted<MockPersistentCookieStore>();
   std::vector<std::unique_ptr<CanonicalCookie>> initial_cookies;
   initial_cookies.push_back(CanonicalCookie::Create(
       GURL("http://domain1.test"), "A=1", base::Time::Now(),
@@ -3547,9 +3546,9 @@
 }
 
 TEST_F(CookieMonsterTest, MaybeDeleteEquivalentCookieAndUpdateStatus) {
-  scoped_refptr<MockPersistentCookieStore> store(new MockPersistentCookieStore);
-  std::unique_ptr<CookieMonster> cm(new CookieMonster(
-      store.get(), net::NetLog::Get(), kFirstPartySetsDefault));
+  auto store = base::MakeRefCounted<MockPersistentCookieStore>();
+  auto cm = std::make_unique<CookieMonster>(store.get(), net::NetLog::Get(),
+                                            kFirstPartySetsDefault);
 
   // Set a secure, httponly cookie from a secure origin
   auto preexisting_cookie = CanonicalCookie::Create(
@@ -3654,9 +3653,9 @@
 
 TEST_F(CookieMonsterTest,
        MaybeDeleteEquivalentCookieAndUpdateStatus_PartitionedCookies) {
-  scoped_refptr<MockPersistentCookieStore> store(new MockPersistentCookieStore);
-  std::unique_ptr<CookieMonster> cm(new CookieMonster(
-      store.get(), net::NetLog::Get(), kFirstPartySetsDefault));
+  auto store = base::MakeRefCounted<MockPersistentCookieStore>();
+  auto cm = std::make_unique<CookieMonster>(store.get(), net::NetLog::Get(),
+                                            kFirstPartySetsDefault);
 
   // Test adding two cookies with the same name, domain, and path but different
   // partition keys.
@@ -3698,9 +3697,9 @@
 // Test skipping a cookie in MaybeDeleteEquivalentCookieAndUpdateStatus for
 // multiple reasons (Secure and HttpOnly).
 TEST_F(CookieMonsterTest, SkipDontOverwriteForMultipleReasons) {
-  scoped_refptr<MockPersistentCookieStore> store(new MockPersistentCookieStore);
-  std::unique_ptr<CookieMonster> cm(new CookieMonster(
-      store.get(), net::NetLog::Get(), kFirstPartySetsDefault));
+  auto store = base::MakeRefCounted<MockPersistentCookieStore>();
+  auto cm = std::make_unique<CookieMonster>(store.get(), net::NetLog::Get(),
+                                            kFirstPartySetsDefault);
 
   // Set a secure, httponly cookie from a secure origin
   auto preexisting_cookie = CanonicalCookie::Create(
@@ -3737,9 +3736,9 @@
 // Test that when we check for equivalent cookies, we don't remove any if the
 // cookie should not be set.
 TEST_F(CookieMonsterTest, DontDeleteEquivalentCookieIfSetIsRejected) {
-  scoped_refptr<MockPersistentCookieStore> store(new MockPersistentCookieStore);
-  std::unique_ptr<CookieMonster> cm(new CookieMonster(
-      store.get(), net::NetLog::Get(), kFirstPartySetsDefault));
+  auto store = base::MakeRefCounted<MockPersistentCookieStore>();
+  auto cm = std::make_unique<CookieMonster>(store.get(), net::NetLog::Get(),
+                                            kFirstPartySetsDefault);
 
   auto preexisting_cookie = CanonicalCookie::Create(
       http_www_foo_.url(), "cookie=foo", base::Time::Now(),
@@ -4387,8 +4386,8 @@
 // Tests that strict secure cookies doesn't trip equivalent cookie checks
 // accidentally. Regression test for https://crbug.com/569943.
 TEST_F(CookieMonsterTest, EquivalentCookies) {
-  std::unique_ptr<CookieMonster> cm(
-      new CookieMonster(nullptr, nullptr, kFirstPartySetsDefault));
+  auto cm =
+      std::make_unique<CookieMonster>(nullptr, nullptr, kFirstPartySetsDefault);
   GURL http_url("http://www.foo.com");
   GURL http_superdomain_url("http://foo.com");
   GURL https_url("https://www.foo.com");
@@ -4699,9 +4698,10 @@
  public:
   CookieMonsterNotificationTest()
       : test_url_("http://www.foo.com/foo"),
-        store_(new MockPersistentCookieStore),
-        monster_(
-            new CookieMonster(store_.get(), nullptr, kFirstPartySetsDefault)) {}
+        store_(base::MakeRefCounted<MockPersistentCookieStore>()),
+        monster_(std::make_unique<CookieMonster>(store_.get(),
+                                                 nullptr,
+                                                 kFirstPartySetsDefault)) {}
 
   ~CookieMonsterNotificationTest() override = default;
 
@@ -4729,7 +4729,7 @@
 TEST_F(CookieMonsterNotificationTest, NoNotificationOnLoad) {
   // Create a persistent store that will not synchronously satisfy the
   // loading requirement.
-  scoped_refptr<MockPersistentCookieStore> store(new MockPersistentCookieStore);
+  auto store = base::MakeRefCounted<MockPersistentCookieStore>();
   store->set_store_load_commands(true);
 
   // Bind it to a CookieMonster
@@ -4983,9 +4983,9 @@
   base::HistogramTester histograms;
   const char kHistogramName[] = "Cookie.DomainSet";
 
-  scoped_refptr<MockPersistentCookieStore> store(new MockPersistentCookieStore);
-  std::unique_ptr<CookieMonster> cm(new CookieMonster(
-      store.get(), net::NetLog::Get(), kFirstPartySetsDefault));
+  auto store = base::MakeRefCounted<MockPersistentCookieStore>();
+  auto cm = std::make_unique<CookieMonster>(store.get(), net::NetLog::Get(),
+                                            kFirstPartySetsDefault);
 
   histograms.ExpectTotalCount(kHistogramName, 0);
 
@@ -5012,9 +5012,9 @@
   const char kHistogramName[] = "Cookie.Port.Read.RemoteHost";
   const char kHistogramNameLocal[] = "Cookie.Port.Read.Localhost";
 
-  scoped_refptr<MockPersistentCookieStore> store(new MockPersistentCookieStore);
-  std::unique_ptr<CookieMonster> cm(new CookieMonster(
-      store.get(), net::NetLog::Get(), kFirstPartySetsDefault));
+  auto store = base::MakeRefCounted<MockPersistentCookieStore>();
+  auto cm = std::make_unique<CookieMonster>(store.get(), net::NetLog::Get(),
+                                            kFirstPartySetsDefault);
 
   histograms.ExpectTotalCount(kHistogramName, 0);
 
@@ -5066,9 +5066,9 @@
   const char kHistogramName[] = "Cookie.Port.Set.RemoteHost";
   const char kHistogramNameLocal[] = "Cookie.Port.Set.Localhost";
 
-  scoped_refptr<MockPersistentCookieStore> store(new MockPersistentCookieStore);
-  std::unique_ptr<CookieMonster> cm(new CookieMonster(
-      store.get(), net::NetLog::Get(), kFirstPartySetsDefault));
+  auto store = base::MakeRefCounted<MockPersistentCookieStore>();
+  auto cm = std::make_unique<CookieMonster>(store.get(), net::NetLog::Get(),
+                                            kFirstPartySetsDefault);
 
   histograms.ExpectTotalCount(kHistogramName, 0);
 
@@ -5121,9 +5121,9 @@
   const char kHistogramNameDomainSet[] =
       "Cookie.Port.ReadDiffersFromSet.DomainSet";
 
-  scoped_refptr<MockPersistentCookieStore> store(new MockPersistentCookieStore);
-  std::unique_ptr<CookieMonster> cm(new CookieMonster(
-      store.get(), net::NetLog::Get(), kFirstPartySetsDefault));
+  auto store = base::MakeRefCounted<MockPersistentCookieStore>();
+  auto cm = std::make_unique<CookieMonster>(store.get(), net::NetLog::Get(),
+                                            kFirstPartySetsDefault);
 
   histograms.ExpectTotalCount(kHistogramName, 0);
 
@@ -5221,9 +5221,9 @@
   base::HistogramTester histograms;
   const char kHistogramName[] = "Cookie.CookieSourceSchemeName";
 
-  scoped_refptr<MockPersistentCookieStore> store(new MockPersistentCookieStore);
-  std::unique_ptr<CookieMonster> cm(new CookieMonster(
-      store.get(), net::NetLog::Get(), kFirstPartySetsDefault));
+  auto store = base::MakeRefCounted<MockPersistentCookieStore>();
+  auto cm = std::make_unique<CookieMonster>(store.get(), net::NetLog::Get(),
+                                            kFirstPartySetsDefault);
 
   histograms.ExpectTotalCount(kHistogramName, 0);
 
@@ -5599,7 +5599,7 @@
 // creation and expiry dates expected given whether or not clamping is on.
 TEST_P(CookieMonsterWithClampingTest,
        FromStorageCookieCreated300DaysAgoThenUpdatedNow) {
-  scoped_refptr<FlushablePersistentStore> store(new FlushablePersistentStore());
+  auto store = base::MakeRefCounted<FlushablePersistentStore>();
   auto cookie_monster = std::make_unique<CookieMonster>(
       store.get(), net::NetLog::Get(), kFirstPartySetsDefault);
   cookie_monster->SetPersistSessionCookies(true);
@@ -5654,7 +5654,7 @@
 // creation and expiry dates expected given whether or not clamping is on.
 TEST_P(CookieMonsterWithClampingTest,
        FromStorageCookieCreated500DaysAgoThenUpdatedNow) {
-  scoped_refptr<FlushablePersistentStore> store(new FlushablePersistentStore());
+  auto store = base::MakeRefCounted<FlushablePersistentStore>();
   auto cookie_monster = std::make_unique<CookieMonster>(
       store.get(), net::NetLog::Get(), kFirstPartySetsDefault);
   cookie_monster->SetPersistSessionCookies(true);
@@ -5709,7 +5709,7 @@
 // expected given whether or not clamping is on.
 TEST_P(CookieMonsterWithClampingTest,
        SanitizedCookieCreated300DaysAgoThenUpdatedNow) {
-  scoped_refptr<FlushablePersistentStore> store(new FlushablePersistentStore());
+  auto store = base::MakeRefCounted<FlushablePersistentStore>();
   auto cookie_monster = std::make_unique<CookieMonster>(
       store.get(), net::NetLog::Get(), kFirstPartySetsDefault);
   cookie_monster->SetPersistSessionCookies(true);
@@ -5774,7 +5774,7 @@
 // expected given whether or not clamping is on.
 TEST_P(CookieMonsterWithClampingTest,
        SanitizedCookieCreated500DaysAgoThenUpdatedNow) {
-  scoped_refptr<FlushablePersistentStore> store(new FlushablePersistentStore());
+  auto store = base::MakeRefCounted<FlushablePersistentStore>();
   auto cookie_monster = std::make_unique<CookieMonster>(
       store.get(), net::NetLog::Get(), kFirstPartySetsDefault);
   cookie_monster->SetPersistSessionCookies(true);
diff --git a/net/cookies/cookie_store_test_helpers.cc b/net/cookies/cookie_store_test_helpers.cc
index 31c9538..3e7e5c4f 100644
--- a/net/cookies/cookie_store_test_helpers.cc
+++ b/net/cookies/cookie_store_test_helpers.cc
@@ -72,9 +72,10 @@
 }
 
 DelayedCookieMonster::DelayedCookieMonster()
-    : cookie_monster_(new CookieMonster(nullptr /* store */,
-                                        nullptr /* netlog */,
-                                        false /* first_party_sets_enabled */)),
+    : cookie_monster_(std::make_unique<CookieMonster>(
+          nullptr /* store */,
+          nullptr /* netlog */,
+          false /* first_party_sets_enabled */)),
       result_(CookieAccessResult(CookieInclusionStatus(
           CookieInclusionStatus::EXCLUDE_FAILURE_TO_STORE))) {}
 
diff --git a/net/disk_cache/backend_unittest.cc b/net/disk_cache/backend_unittest.cc
index a926b57..e7c8ba9 100644
--- a/net/disk_cache/backend_unittest.cc
+++ b/net/disk_cache/backend_unittest.cc
@@ -3896,7 +3896,7 @@
   base::FilePath name = cache_impl_->GetFileName(address);
 
   {
-    scoped_refptr<disk_cache::File> file(new disk_cache::File(false));
+    auto file = base::MakeRefCounted<disk_cache::File>(false);
     file->Init(name);
 
 #if BUILDFLAG(IS_WIN)
@@ -4168,13 +4168,13 @@
   cache_.reset();
 
   // Check that the |BackendImpl| does not favor this structure.
-  disk_cache::BackendImpl* cache = new disk_cache::BackendImpl(
+  auto cache = std::make_unique<disk_cache::BackendImpl>(
       cache_path_, nullptr, nullptr, net::DISK_CACHE, nullptr);
   cache->SetUnitTestMode();
   net::TestCompletionCallback cb;
   cache->Init(cb.callback());
   EXPECT_NE(net::OK, cb.WaitForResult());
-  delete cache;
+  cache.reset();
   DisableIntegrityCheck();
 }
 
diff --git a/net/disk_cache/blockfile/backend_impl.cc b/net/disk_cache/blockfile/backend_impl.cc
index f23ed04..a0f9d6d 100644
--- a/net/disk_cache/blockfile/backend_impl.cc
+++ b/net/disk_cache/blockfile/backend_impl.cc
@@ -411,7 +411,7 @@
     return net::ERR_FAILED;
 
   scoped_refptr<EntryImpl> node;
-  std::unique_ptr<Rankings::Iterator> iterator(new Rankings::Iterator());
+  auto iterator = std::make_unique<Rankings::Iterator>();
   scoped_refptr<EntryImpl> next = OpenNextEntryImpl(iterator.get());
   if (!next)
     return net::OK;
@@ -453,7 +453,7 @@
 
   stats_.OnEvent(Stats::DOOM_RECENT);
   for (;;) {
-    std::unique_ptr<Rankings::Iterator> iterator(new Rankings::Iterator());
+    auto iterator = std::make_unique<Rankings::Iterator>();
     scoped_refptr<EntryImpl> entry = OpenNextEntryImpl(iterator.get());
     if (!entry)
       return net::OK;
@@ -593,8 +593,8 @@
     return nullptr;
   }
 
-  scoped_refptr<EntryImpl> cache_entry(
-      new EntryImpl(this, entry_address, false));
+  auto cache_entry =
+      base::MakeRefCounted<EntryImpl>(this, entry_address, false);
   IncreaseNumRefs();
 
   if (!cache_entry->CreateEntry(node_address, key, hash)) {
@@ -1296,8 +1296,7 @@
  public:
   explicit IteratorImpl(base::WeakPtr<InFlightBackendIO> background_queue)
       : background_queue_(background_queue),
-        iterator_(new Rankings::Iterator()) {
-  }
+        iterator_(std::make_unique<Rankings::Iterator>()) {}
 
   ~IteratorImpl() override {
     if (background_queue_)
@@ -1317,8 +1316,7 @@
 };
 
 std::unique_ptr<Backend::Iterator> BackendImpl::CreateIterator() {
-  return std::unique_ptr<Backend::Iterator>(
-      new IteratorImpl(GetBackgroundQueue()));
+  return std::make_unique<IteratorImpl>(GetBackgroundQueue());
 }
 
 void BackendImpl::GetStats(StatsItems* stats) {
@@ -1389,7 +1387,7 @@
   static_assert(sizeof(disk_cache::IndexHeader) < kPageSize,
                 "Code below assumes it wouldn't overwrite header by starting "
                 "at kPageSize");
-  std::unique_ptr<char[]> page(new char[kPageSize]);
+  auto page = std::make_unique<char[]>(kPageSize);
   memset(page.get(), 0, kPageSize);
 
   for (size_t offset = kPageSize; offset < size; offset += kPageSize) {
@@ -1416,8 +1414,7 @@
   bool ret = true;
   *file_created = base_file.created();
 
-  scoped_refptr<disk_cache::File> file(
-      new disk_cache::File(std::move(base_file)));
+  auto file = base::MakeRefCounted<disk_cache::File>(std::move(base_file));
   if (*file_created)
     ret = CreateBackingStore(file.get());
 
@@ -1425,7 +1422,7 @@
   if (!ret)
     return false;
 
-  index_ = new MappedFile();
+  index_ = base::MakeRefCounted<MappedFile>();
   data_ = static_cast<Index*>(index_->Init(index_name, 0));
   if (!data_) {
     LOG(ERROR) << "Unable to map Index file";
@@ -1497,7 +1494,7 @@
   if (!file)
     return false;
 
-  std::unique_ptr<char[]> data(new char[size]);
+  auto data = std::make_unique<char[]>(size);
   size_t offset = address.start_block() * address.BlockSize() +
                   kBlockHeaderSize;
   if (!file->Read(data.get(), size, offset))
@@ -1512,7 +1509,7 @@
 
 void BackendImpl::StoreStats() {
   int size = stats_.StorageSize();
-  std::unique_ptr<char[]> data(new char[size]);
+  auto data = std::make_unique<char[]>(size);
   Addr address;
   size = stats_.SerializeStats(data.get(), size, &address);
   DCHECK(size);
@@ -1592,8 +1589,7 @@
     return ERR_INVALID_ADDRESS;
   }
 
-  scoped_refptr<EntryImpl> cache_entry(
-      new EntryImpl(this, address, read_only_));
+  auto cache_entry = base::MakeRefCounted<EntryImpl>(this, address, read_only_);
   IncreaseNumRefs();
   *entry = nullptr;
 
diff --git a/net/disk_cache/blockfile/block_files.cc b/net/disk_cache/blockfile/block_files.cc
index 0297e67e..afb9a5f 100644
--- a/net/disk_cache/blockfile/block_files.cc
+++ b/net/disk_cache/blockfile/block_files.cc
@@ -394,8 +394,8 @@
 
   static bool read_contents = false;
   if (read_contents) {
-    std::unique_ptr<char[]> buffer;
-    buffer.reset(new char[Addr::BlockSizeForFileType(BLOCK_4K) * 4]);
+    auto buffer =
+        std::make_unique<char[]>(Addr::BlockSizeForFileType(BLOCK_4K) * 4);
     size_t size = address.BlockSize() * address.num_blocks();
     size_t offset = address.start_block() * address.BlockSize() +
                     kBlockHeaderSize;
@@ -412,7 +412,7 @@
   int flags = force ? base::File::FLAG_CREATE_ALWAYS : base::File::FLAG_CREATE;
   flags |= base::File::FLAG_WRITE | base::File::FLAG_WIN_EXCLUSIVE_WRITE;
 
-  scoped_refptr<File> file(new File(base::File(name, flags)));
+  auto file = base::MakeRefCounted<File>(base::File(name, flags));
   if (!file->IsValid())
     return false;
 
@@ -435,7 +435,7 @@
   }
 
   base::FilePath name = Name(index);
-  scoped_refptr<MappedFile> file(new MappedFile());
+  auto file = base::MakeRefCounted<MappedFile>();
 
   if (!file->Init(name, kBlockHeaderSize)) {
     LOG(ERROR) << "Failed to open " << name.value();
@@ -593,7 +593,7 @@
       // We get a new handle to the file and release the old one so that the
       // file gets unmmaped... so we can delete it.
       base::FilePath name = Name(file_index);
-      scoped_refptr<File> this_file(new File(false));
+      auto this_file = base::MakeRefCounted<File>(false);
       this_file->Init(name);
       block_files_[file_index] = nullptr;
 
diff --git a/net/disk_cache/blockfile/block_files_unittest.cc b/net/disk_cache/blockfile/block_files_unittest.cc
index 119a477..a2168ea9 100644
--- a/net/disk_cache/blockfile/block_files_unittest.cc
+++ b/net/disk_cache/blockfile/block_files_unittest.cc
@@ -173,7 +173,7 @@
   files.CloseFiles();
   // Truncate one of the files.
   {
-    scoped_refptr<File> file(new File);
+    auto file = base::MakeRefCounted<File>();
     ASSERT_TRUE(file->Init(filename));
     EXPECT_TRUE(file->SetLength(0));
   }
@@ -196,7 +196,7 @@
   files.CloseFiles();
   // Truncate one of the files.
   {
-    scoped_refptr<File> file(new File);
+    auto file = base::MakeRefCounted<File>();
     ASSERT_TRUE(file->Init(filename));
     EXPECT_TRUE(file->SetLength(15000));
   }
diff --git a/net/disk_cache/blockfile/entry_impl.cc b/net/disk_cache/blockfile/entry_impl.cc
index 1912a7d..339075fa 100644
--- a/net/disk_cache/blockfile/entry_impl.cc
+++ b/net/disk_cache/blockfile/entry_impl.cc
@@ -1304,7 +1304,7 @@
   DCHECK(index >= 0 && index <= kKeyFileIndex);
   if (!files_[index].get()) {
     // For a key file, use mixed mode IO.
-    scoped_refptr<File> file(new File(kKeyFileIndex == index));
+    auto file = base::MakeRefCounted<File>(kKeyFileIndex == index);
     if (file->Init(backend_->GetFileName(address)))
       files_[index].swap(file);
   }
@@ -1560,7 +1560,7 @@
     return net::OK;
 
   // Use a local variable so that sparse_ never goes from 'valid' to NULL.
-  std::unique_ptr<SparseControl> sparse(new SparseControl(this));
+  auto sparse = std::make_unique<SparseControl>(this);
   int result = sparse->Init();
   if (net::OK == result)
     sparse_.swap(sparse);
diff --git a/net/disk_cache/blockfile/file_ios.cc b/net/disk_cache/blockfile/file_ios.cc
index 74739efa..c910da3 100644
--- a/net/disk_cache/blockfile/file_ios.cc
+++ b/net/disk_cache/blockfile/file_ios.cc
@@ -118,8 +118,8 @@
 
 void FileInFlightIO::PostRead(disk_cache::File *file, void* buf, size_t buf_len,
                           size_t offset, disk_cache::FileIOCallback *callback) {
-  scoped_refptr<FileBackgroundIO> operation(
-      new FileBackgroundIO(file, buf, buf_len, offset, callback, this));
+  auto operation = base::MakeRefCounted<FileBackgroundIO>(
+      file, buf, buf_len, offset, callback, this);
   file->AddRef();  // Balanced on OnOperationComplete()
 
   base::ThreadPool::PostTask(
@@ -132,8 +132,8 @@
 void FileInFlightIO::PostWrite(disk_cache::File* file, const void* buf,
                            size_t buf_len, size_t offset,
                            disk_cache::FileIOCallback* callback) {
-  scoped_refptr<FileBackgroundIO> operation(
-      new FileBackgroundIO(file, buf, buf_len, offset, callback, this));
+  auto operation = base::MakeRefCounted<FileBackgroundIO>(
+      file, buf, buf_len, offset, callback, this);
   file->AddRef();  // Balanced on OnOperationComplete()
 
   base::ThreadPool::PostTask(
diff --git a/net/disk_cache/blockfile/file_win.cc b/net/disk_cache/blockfile/file_win.cc
index 7985c44f..61c98814 100644
--- a/net/disk_cache/blockfile/file_win.cc
+++ b/net/disk_cache/blockfile/file_win.cc
@@ -63,7 +63,8 @@
 
 class CompletionHandlerHolder {
  public:
-  CompletionHandlerHolder() { completion_handler_ = new CompletionHandler; }
+  CompletionHandlerHolder()
+      : completion_handler_(base::MakeRefCounted<CompletionHandler>()) {}
 
   CompletionHandler* completion_handler() { return completion_handler_.get(); }
 
diff --git a/net/disk_cache/blockfile/in_flight_backend_io.cc b/net/disk_cache/blockfile/in_flight_backend_io.cc
index 0f18911..48e1845 100644
--- a/net/disk_cache/blockfile/in_flight_backend_io.cc
+++ b/net/disk_cache/blockfile/in_flight_backend_io.cc
@@ -407,47 +407,47 @@
 InFlightBackendIO::~InFlightBackendIO() = default;
 
 void InFlightBackendIO::Init(net::CompletionOnceCallback callback) {
-  scoped_refptr<BackendIO> operation(
-      new BackendIO(this, backend_, std::move(callback)));
+  auto operation =
+      base::MakeRefCounted<BackendIO>(this, backend_, std::move(callback));
   operation->Init();
   PostOperation(FROM_HERE, operation.get());
 }
 
 void InFlightBackendIO::OpenOrCreateEntry(const std::string& key,
                                           EntryResultCallback callback) {
-  scoped_refptr<BackendIO> operation(
-      new BackendIO(this, backend_, std::move(callback)));
+  auto operation =
+      base::MakeRefCounted<BackendIO>(this, backend_, std::move(callback));
   operation->OpenOrCreateEntry(key);
   PostOperation(FROM_HERE, operation.get());
 }
 
 void InFlightBackendIO::OpenEntry(const std::string& key,
                                   EntryResultCallback callback) {
-  scoped_refptr<BackendIO> operation(
-      new BackendIO(this, backend_, std::move(callback)));
+  auto operation =
+      base::MakeRefCounted<BackendIO>(this, backend_, std::move(callback));
   operation->OpenEntry(key);
   PostOperation(FROM_HERE, operation.get());
 }
 
 void InFlightBackendIO::CreateEntry(const std::string& key,
                                     EntryResultCallback callback) {
-  scoped_refptr<BackendIO> operation(
-      new BackendIO(this, backend_, std::move(callback)));
+  auto operation =
+      base::MakeRefCounted<BackendIO>(this, backend_, std::move(callback));
   operation->CreateEntry(key);
   PostOperation(FROM_HERE, operation.get());
 }
 
 void InFlightBackendIO::DoomEntry(const std::string& key,
                                   net::CompletionOnceCallback callback) {
-  scoped_refptr<BackendIO> operation(
-      new BackendIO(this, backend_, std::move(callback)));
+  auto operation =
+      base::MakeRefCounted<BackendIO>(this, backend_, std::move(callback));
   operation->DoomEntry(key);
   PostOperation(FROM_HERE, operation.get());
 }
 
 void InFlightBackendIO::DoomAllEntries(net::CompletionOnceCallback callback) {
-  scoped_refptr<BackendIO> operation(
-      new BackendIO(this, backend_, std::move(callback)));
+  auto operation =
+      base::MakeRefCounted<BackendIO>(this, backend_, std::move(callback));
   operation->DoomAllEntries();
   PostOperation(FROM_HERE, operation.get());
 }
@@ -456,76 +456,76 @@
     const base::Time initial_time,
     const base::Time end_time,
     net::CompletionOnceCallback callback) {
-  scoped_refptr<BackendIO> operation(
-      new BackendIO(this, backend_, std::move(callback)));
+  auto operation =
+      base::MakeRefCounted<BackendIO>(this, backend_, std::move(callback));
   operation->DoomEntriesBetween(initial_time, end_time);
   PostOperation(FROM_HERE, operation.get());
 }
 
 void InFlightBackendIO::CalculateSizeOfAllEntries(
     net::CompletionOnceCallback callback) {
-  scoped_refptr<BackendIO> operation(
-      new BackendIO(this, backend_, std::move(callback)));
+  auto operation =
+      base::MakeRefCounted<BackendIO>(this, backend_, std::move(callback));
   operation->CalculateSizeOfAllEntries();
   PostOperation(FROM_HERE, operation.get());
 }
 
 void InFlightBackendIO::DoomEntriesSince(const base::Time initial_time,
                                          net::CompletionOnceCallback callback) {
-  scoped_refptr<BackendIO> operation(
-      new BackendIO(this, backend_, std::move(callback)));
+  auto operation =
+      base::MakeRefCounted<BackendIO>(this, backend_, std::move(callback));
   operation->DoomEntriesSince(initial_time);
   PostOperation(FROM_HERE, operation.get());
 }
 
 void InFlightBackendIO::OpenNextEntry(Rankings::Iterator* iterator,
                                       EntryResultCallback callback) {
-  scoped_refptr<BackendIO> operation(
-      new BackendIO(this, backend_, std::move(callback)));
+  auto operation =
+      base::MakeRefCounted<BackendIO>(this, backend_, std::move(callback));
   operation->OpenNextEntry(iterator);
   PostOperation(FROM_HERE, operation.get());
 }
 
 void InFlightBackendIO::EndEnumeration(
     std::unique_ptr<Rankings::Iterator> iterator) {
-  scoped_refptr<BackendIO> operation(
-      new BackendIO(this, backend_, net::CompletionOnceCallback()));
+  auto operation = base::MakeRefCounted<BackendIO>(
+      this, backend_, net::CompletionOnceCallback());
   operation->EndEnumeration(std::move(iterator));
   PostOperation(FROM_HERE, operation.get());
 }
 
 void InFlightBackendIO::OnExternalCacheHit(const std::string& key) {
-  scoped_refptr<BackendIO> operation(
-      new BackendIO(this, backend_, net::CompletionOnceCallback()));
+  auto operation = base::MakeRefCounted<BackendIO>(
+      this, backend_, net::CompletionOnceCallback());
   operation->OnExternalCacheHit(key);
   PostOperation(FROM_HERE, operation.get());
 }
 
 void InFlightBackendIO::CloseEntryImpl(EntryImpl* entry) {
-  scoped_refptr<BackendIO> operation(
-      new BackendIO(this, backend_, net::CompletionOnceCallback()));
+  auto operation = base::MakeRefCounted<BackendIO>(
+      this, backend_, net::CompletionOnceCallback());
   operation->CloseEntryImpl(entry);
   PostOperation(FROM_HERE, operation.get());
 }
 
 void InFlightBackendIO::DoomEntryImpl(EntryImpl* entry) {
-  scoped_refptr<BackendIO> operation(
-      new BackendIO(this, backend_, net::CompletionOnceCallback()));
+  auto operation = base::MakeRefCounted<BackendIO>(
+      this, backend_, net::CompletionOnceCallback());
   operation->DoomEntryImpl(entry);
   PostOperation(FROM_HERE, operation.get());
 }
 
 void InFlightBackendIO::FlushQueue(net::CompletionOnceCallback callback) {
-  scoped_refptr<BackendIO> operation(
-      new BackendIO(this, backend_, std::move(callback)));
+  auto operation =
+      base::MakeRefCounted<BackendIO>(this, backend_, std::move(callback));
   operation->FlushQueue();
   PostOperation(FROM_HERE, operation.get());
 }
 
 void InFlightBackendIO::RunTask(base::OnceClosure task,
                                 net::CompletionOnceCallback callback) {
-  scoped_refptr<BackendIO> operation(
-      new BackendIO(this, backend_, std::move(callback)));
+  auto operation =
+      base::MakeRefCounted<BackendIO>(this, backend_, std::move(callback));
   operation->RunTask(std::move(task));
   PostOperation(FROM_HERE, operation.get());
 }
@@ -536,8 +536,8 @@
                                  net::IOBuffer* buf,
                                  int buf_len,
                                  net::CompletionOnceCallback callback) {
-  scoped_refptr<BackendIO> operation(
-      new BackendIO(this, backend_, std::move(callback)));
+  auto operation =
+      base::MakeRefCounted<BackendIO>(this, backend_, std::move(callback));
   operation->ReadData(entry, index, offset, buf, buf_len);
   PostOperation(FROM_HERE, operation.get());
 }
@@ -549,8 +549,8 @@
                                   int buf_len,
                                   bool truncate,
                                   net::CompletionOnceCallback callback) {
-  scoped_refptr<BackendIO> operation(
-      new BackendIO(this, backend_, std::move(callback)));
+  auto operation =
+      base::MakeRefCounted<BackendIO>(this, backend_, std::move(callback));
   operation->WriteData(entry, index, offset, buf, buf_len, truncate);
   PostOperation(FROM_HERE, operation.get());
 }
@@ -560,8 +560,8 @@
                                        net::IOBuffer* buf,
                                        int buf_len,
                                        net::CompletionOnceCallback callback) {
-  scoped_refptr<BackendIO> operation(
-      new BackendIO(this, backend_, std::move(callback)));
+  auto operation =
+      base::MakeRefCounted<BackendIO>(this, backend_, std::move(callback));
   operation->ReadSparseData(entry, offset, buf, buf_len);
   PostOperation(FROM_HERE, operation.get());
 }
@@ -571,8 +571,8 @@
                                         net::IOBuffer* buf,
                                         int buf_len,
                                         net::CompletionOnceCallback callback) {
-  scoped_refptr<BackendIO> operation(
-      new BackendIO(this, backend_, std::move(callback)));
+  auto operation =
+      base::MakeRefCounted<BackendIO>(this, backend_, std::move(callback));
   operation->WriteSparseData(entry, offset, buf, buf_len);
   PostOperation(FROM_HERE, operation.get());
 }
@@ -581,23 +581,23 @@
                                           int64_t offset,
                                           int len,
                                           RangeResultCallback callback) {
-  scoped_refptr<BackendIO> operation(
-      new BackendIO(this, backend_, std::move(callback)));
+  auto operation =
+      base::MakeRefCounted<BackendIO>(this, backend_, std::move(callback));
   operation->GetAvailableRange(entry, offset, len);
   PostOperation(FROM_HERE, operation.get());
 }
 
 void InFlightBackendIO::CancelSparseIO(EntryImpl* entry) {
-  scoped_refptr<BackendIO> operation(
-      new BackendIO(this, backend_, net::CompletionOnceCallback()));
+  auto operation = base::MakeRefCounted<BackendIO>(
+      this, backend_, net::CompletionOnceCallback());
   operation->CancelSparseIO(entry);
   PostOperation(FROM_HERE, operation.get());
 }
 
 void InFlightBackendIO::ReadyForSparseIO(EntryImpl* entry,
                                          net::CompletionOnceCallback callback) {
-  scoped_refptr<BackendIO> operation(
-      new BackendIO(this, backend_, std::move(callback)));
+  auto operation =
+      base::MakeRefCounted<BackendIO>(this, backend_, std::move(callback));
   operation->ReadyForSparseIO(entry);
   PostOperation(FROM_HERE, operation.get());
 }
diff --git a/net/disk_cache/blockfile/mapped_file.cc b/net/disk_cache/blockfile/mapped_file.cc
index b2fedd2..7cac41e 100644
--- a/net/disk_cache/blockfile/mapped_file.cc
+++ b/net/disk_cache/blockfile/mapped_file.cc
@@ -23,7 +23,7 @@
 
 bool MappedFile::Preload() {
   size_t file_len = GetLength();
-  std::unique_ptr<char[]> buf(new char[file_len]);
+  auto buf = std::make_unique<char[]>(file_len);
   if (!Read(buf.get(), file_len, 0))
     return false;
   return true;
diff --git a/net/disk_cache/blockfile/mapped_file_posix.cc b/net/disk_cache/blockfile/mapped_file_posix.cc
index 7921ffd..bc94afc 100644
--- a/net/disk_cache/blockfile/mapped_file_posix.cc
+++ b/net/disk_cache/blockfile/mapped_file_posix.cc
@@ -31,7 +31,7 @@
     buffer_ = nullptr;
 
   // Make sure we detect hardware failures reading the headers.
-  std::unique_ptr<char[]> temp(new char[temp_len]);
+  auto temp = std::make_unique<char[]>(temp_len);
   if (!Read(temp.get(), temp_len, 0))
     return nullptr;
 
diff --git a/net/disk_cache/blockfile/mapped_file_unittest.cc b/net/disk_cache/blockfile/mapped_file_unittest.cc
index b9147fd..d8bfb6ec 100644
--- a/net/disk_cache/blockfile/mapped_file_unittest.cc
+++ b/net/disk_cache/blockfile/mapped_file_unittest.cc
@@ -44,7 +44,7 @@
 
 TEST_F(DiskCacheTest, MappedFile_SyncIO) {
   base::FilePath filename = cache_path_.AppendASCII("a_test");
-  scoped_refptr<disk_cache::MappedFile> file(new disk_cache::MappedFile);
+  auto file = base::MakeRefCounted<disk_cache::MappedFile>();
   ASSERT_TRUE(CreateCacheTestFile(filename));
   ASSERT_TRUE(file->Init(filename, 8192));
 
@@ -59,7 +59,7 @@
 
 TEST_F(DiskCacheTest, MappedFile_AsyncIO) {
   base::FilePath filename = cache_path_.AppendASCII("a_test");
-  scoped_refptr<disk_cache::MappedFile> file(new disk_cache::MappedFile);
+  auto file = base::MakeRefCounted<disk_cache::MappedFile>();
   ASSERT_TRUE(CreateCacheTestFile(filename));
   ASSERT_TRUE(file->Init(filename, 8192));
 
diff --git a/net/disk_cache/blockfile/mapped_file_win.cc b/net/disk_cache/blockfile/mapped_file_win.cc
index 5829dcc4..3cc771e 100644
--- a/net/disk_cache/blockfile/mapped_file_win.cc
+++ b/net/disk_cache/blockfile/mapped_file_win.cc
@@ -32,7 +32,7 @@
 
   // Make sure we detect hardware failures reading the headers.
   size_t temp_len = size ? size : 4096;
-  std::unique_ptr<char[]> temp(new char[temp_len]);
+  auto temp = std::make_unique<char[]>(temp_len);
   if (!Read(temp.get(), temp_len, 0))
     return nullptr;
 
diff --git a/net/disk_cache/blockfile/sparse_control.cc b/net/disk_cache/blockfile/sparse_control.cc
index 96cb03c..624d3e3 100644
--- a/net/disk_cache/blockfile/sparse_control.cc
+++ b/net/disk_cache/blockfile/sparse_control.cc
@@ -130,7 +130,7 @@
   size_t file_offset = address.start_block() * address.BlockSize() +
                        disk_cache::kBlockHeaderSize;
 
-  buffer_.reset(new char[len]);
+  buffer_ = std::make_unique<char[]>(len);
   bool completed;
   if (!file->Read(buffer_.get(), len, file_offset, this, &completed))
     return Release();
diff --git a/net/disk_cache/blockfile/stats_unittest.cc b/net/disk_cache/blockfile/stats_unittest.cc
index afe31d9f..be15cbf 100644
--- a/net/disk_cache/blockfile/stats_unittest.cc
+++ b/net/disk_cache/blockfile/stats_unittest.cc
@@ -17,7 +17,7 @@
 TEST(DiskCacheStatsTest, InitWithEmptyBuffer) {
   disk_cache::Stats stats;
   int required_len = stats.StorageSize();
-  std::unique_ptr<char[]> storage(new char[required_len]);
+  auto storage = std::make_unique<char[]>(required_len);
   memset(storage.get(), 0, required_len);
 
   ASSERT_TRUE(stats.Init(storage.get(), required_len, disk_cache::Addr()));
@@ -27,7 +27,7 @@
 TEST(DiskCacheStatsTest, FailsInit) {
   disk_cache::Stats stats;
   int required_len = stats.StorageSize();
-  std::unique_ptr<char[]> storage(new char[required_len]);
+  auto storage = std::make_unique<char[]>(required_len);
   memset(storage.get(), 0, required_len);
 
   // Try a small buffer.
@@ -41,7 +41,7 @@
 }
 
 TEST(DiskCacheStatsTest, SaveRestore) {
-  std::unique_ptr<disk_cache::Stats> stats(new disk_cache::Stats);
+  auto stats = std::make_unique<disk_cache::Stats>();
 
   disk_cache::Addr addr(5);
   ASSERT_TRUE(stats->Init(nullptr, 0, addr));
@@ -52,7 +52,7 @@
   stats->OnEvent(disk_cache::Stats::DOOM_RECENT);
 
   int required_len = stats->StorageSize();
-  std::unique_ptr<char[]> storage(new char[required_len]);
+  auto storage = std::make_unique<char[]>(required_len);
   disk_cache::Addr out_addr;
   int real_len = stats->SerializeStats(storage.get(), required_len, &out_addr);
   EXPECT_GE(required_len, real_len);
diff --git a/net/disk_cache/blockfile/storage_block_unittest.cc b/net/disk_cache/blockfile/storage_block_unittest.cc
index 9992edc..7d7c13be 100644
--- a/net/disk_cache/blockfile/storage_block_unittest.cc
+++ b/net/disk_cache/blockfile/storage_block_unittest.cc
@@ -14,7 +14,7 @@
 
 TEST_F(DiskCacheTest, StorageBlock_LoadStore) {
   base::FilePath filename = cache_path_.AppendASCII("a_test");
-  scoped_refptr<disk_cache::MappedFile> file(new disk_cache::MappedFile);
+  auto file = base::MakeRefCounted<disk_cache::MappedFile>();
   ASSERT_TRUE(CreateCacheTestFile(filename));
   ASSERT_TRUE(file->Init(filename, 8192));
 
@@ -34,7 +34,7 @@
 
 TEST_F(DiskCacheTest, StorageBlock_SetData) {
   base::FilePath filename = cache_path_.AppendASCII("a_test");
-  scoped_refptr<disk_cache::MappedFile> file(new disk_cache::MappedFile);
+  auto file = base::MakeRefCounted<disk_cache::MappedFile>();
   ASSERT_TRUE(CreateCacheTestFile(filename));
   ASSERT_TRUE(file->Init(filename, 8192));
 
@@ -54,17 +54,17 @@
 
 TEST_F(DiskCacheTest, StorageBlock_SetModified) {
   base::FilePath filename = cache_path_.AppendASCII("a_test");
-  scoped_refptr<disk_cache::MappedFile> file(new disk_cache::MappedFile);
+  auto file = base::MakeRefCounted<disk_cache::MappedFile>();
   ASSERT_TRUE(CreateCacheTestFile(filename));
   ASSERT_TRUE(file->Init(filename, 8192));
 
-  CacheEntryBlock* entry1 =
-      new CacheEntryBlock(file.get(), disk_cache::Addr(0xa0010003));
+  auto entry1 = std::make_unique<CacheEntryBlock>(file.get(),
+                                                  disk_cache::Addr(0xa0010003));
   EXPECT_TRUE(entry1->Load());
   EXPECT_TRUE(0 == entry1->Data()->hash);
   entry1->Data()->hash = 0x45687912;
   entry1->set_modified();
-  delete entry1;
+  entry1.reset();
 
   CacheEntryBlock entry2(file.get(), disk_cache::Addr(0xa0010003));
   EXPECT_TRUE(entry2.Load());
diff --git a/net/disk_cache/disk_cache.cc b/net/disk_cache/disk_cache.cc
index f8eee0b..b31892c1 100644
--- a/net/disk_cache/disk_cache.cc
+++ b/net/disk_cache/disk_cache.cc
@@ -136,11 +136,11 @@
   if (backend_type_ == net::CACHE_BACKEND_SIMPLE ||
       (backend_type_ == net::CACHE_BACKEND_DEFAULT &&
        kSimpleBackendIsDefault)) {
-    disk_cache::SimpleBackendImpl* simple_cache =
-        new disk_cache::SimpleBackendImpl(
-            file_operations_factory_, path_, cleanup_tracker_.get(),
-            /* file_tracker = */ nullptr, max_bytes_, type_, net_log_);
-    created_cache_.reset(simple_cache);
+    auto cache = std::make_unique<disk_cache::SimpleBackendImpl>(
+        file_operations_factory_, path_, cleanup_tracker_.get(),
+        /* file_tracker = */ nullptr, max_bytes_, type_, net_log_);
+    disk_cache::SimpleBackendImpl* simple_cache = cache.get();
+    created_cache_ = std::move(cache);
 #if BUILDFLAG(IS_ANDROID)
     if (app_status_listener_)
       simple_cache->set_app_status_listener(app_status_listener_);
@@ -154,10 +154,11 @@
 #if BUILDFLAG(IS_ANDROID)
   return net::ERR_FAILED;
 #else
-  disk_cache::BackendImpl* new_cache =
-      new disk_cache::BackendImpl(path_, cleanup_tracker_.get(),
-                                  /*cache_thread = */ nullptr, type_, net_log_);
-  created_cache_.reset(new_cache);
+  auto cache = std::make_unique<disk_cache::BackendImpl>(
+      path_, cleanup_tracker_.get(),
+      /*cache_thread = */ nullptr, type_, net_log_);
+  disk_cache::BackendImpl* new_cache = cache.get();
+  created_cache_ = std::move(cache);
   new_cache->SetMaxSize(max_bytes_);
   new_cache->Init(
       base::BindOnce(&CacheCreator::OnIOComplete, base::Unretained(this)));
diff --git a/net/disk_cache/disk_cache_fuzzer.cc b/net/disk_cache/disk_cache_fuzzer.cc
index fadae57..e111cbe9 100644
--- a/net/disk_cache/disk_cache_fuzzer.cc
+++ b/net/disk_cache/disk_cache_fuzzer.cc
@@ -1151,8 +1151,9 @@
     bool simple_cache_wait_for_index) {
   if (cache_backend == disk_cache_fuzzer::FuzzCommands::IN_MEMORY) {
     MAYBE_PRINT << "Using in-memory cache." << std::endl;
-    mem_cache_ = new disk_cache::MemBackendImpl(nullptr);
-    cache_.reset(mem_cache_);
+    auto cache = std::make_unique<disk_cache::MemBackendImpl>(nullptr);
+    mem_cache_ = cache.get();
+    cache_ = std::move(cache);
     CHECK(cache_);
   } else if (cache_backend == disk_cache_fuzzer::FuzzCommands::SIMPLE) {
     MAYBE_PRINT << "Using simple cache." << std::endl;
@@ -1162,11 +1163,10 @@
     if (!simple_file_tracker_)
       simple_file_tracker_ =
           std::make_unique<disk_cache::SimpleFileTracker>(kMaxFdsSimpleCache);
-    std::unique_ptr<disk_cache::SimpleBackendImpl> simple_backend =
-        std::make_unique<disk_cache::SimpleBackendImpl>(
-            /*file_operations=*/nullptr, cache_path_,
-            /*cleanup_tracker=*/nullptr, simple_file_tracker_.get(), max_size_,
-            type, /*net_log=*/nullptr);
+    auto simple_backend = std::make_unique<disk_cache::SimpleBackendImpl>(
+        /*file_operations=*/nullptr, cache_path_,
+        /*cleanup_tracker=*/nullptr, simple_file_tracker_.get(), max_size_,
+        type, /*net_log=*/nullptr);
     simple_backend->Init(cb.callback());
     CHECK_EQ(cb.WaitForResult(), net::OK);
     simple_cache_impl_ = simple_backend.get();
@@ -1183,20 +1183,23 @@
     }
   } else {
     MAYBE_PRINT << "Using blockfile cache";
-
+    std::unique_ptr<disk_cache::BackendImpl> cache;
     if (mask) {
       MAYBE_PRINT << ", mask = " << mask << std::endl;
-      block_impl_ = new disk_cache::BackendImpl(cache_path_, mask,
-                                                /* runner = */ nullptr, type,
-                                                /* net_log = */ nullptr);
+      cache = std::make_unique<disk_cache::BackendImpl>(
+          cache_path_, mask,
+          /* runner = */ nullptr, type,
+          /* net_log = */ nullptr);
     } else {
       MAYBE_PRINT << "." << std::endl;
-      block_impl_ = new disk_cache::BackendImpl(cache_path_,
-                                                /* cleanup_tracker = */ nullptr,
-                                                /* runner = */ nullptr, type,
-                                                /* net_log = */ nullptr);
+      cache = std::make_unique<disk_cache::BackendImpl>(
+          cache_path_,
+          /* cleanup_tracker = */ nullptr,
+          /* runner = */ nullptr, type,
+          /* net_log = */ nullptr);
     }
-    cache_.reset(block_impl_);
+    block_impl_ = cache.get();
+    cache_ = std::move(cache);
     CHECK(cache_);
     // TODO(mpdenton) kNoRandom or not? It does a lot of waiting for IO. May be
     // good for avoiding leaks but tests a less realistic cache.
diff --git a/net/disk_cache/disk_cache_test_base.cc b/net/disk_cache/disk_cache_test_base.cc
index a3bcf72c..9e36dd9 100644
--- a/net/disk_cache/disk_cache_test_base.cc
+++ b/net/disk_cache/disk_cache_test_base.cc
@@ -352,8 +352,9 @@
 }
 
 void DiskCacheTestWithCache::InitMemoryCache() {
-  mem_cache_ = new disk_cache::MemBackendImpl(nullptr);
-  cache_.reset(mem_cache_);
+  auto cache = std::make_unique<disk_cache::MemBackendImpl>(nullptr);
+  mem_cache_ = cache.get();
+  cache_ = std::move(cache);
   ASSERT_TRUE(cache_);
 
   if (size_)
@@ -404,14 +405,18 @@
     return;
   }
 
-  if (mask_)
-    cache_impl_ = new disk_cache::BackendImpl(cache_path_, mask_, runner, type_,
-                                              /* net_log = */ nullptr);
-  else
-    cache_impl_ = new disk_cache::BackendImpl(
+  std::unique_ptr<disk_cache::BackendImpl> cache;
+  if (mask_) {
+    cache = std::make_unique<disk_cache::BackendImpl>(cache_path_, mask_,
+                                                      runner, type_,
+                                                      /* net_log = */ nullptr);
+  } else {
+    cache = std::make_unique<disk_cache::BackendImpl>(
         cache_path_, /* cleanup_tracker = */ nullptr, runner, type_,
         /* net_log = */ nullptr);
-  cache_.reset(cache_impl_);
+  }
+  cache_impl_ = cache.get();
+  cache_ = std::move(cache);
   ASSERT_TRUE(cache_);
   if (size_)
     EXPECT_TRUE(cache_impl_->SetMaxSize(size_));
diff --git a/net/disk_cache/disk_cache_test_util.cc b/net/disk_cache/disk_cache_test_util.cc
index a07cfc35..7256850a 100644
--- a/net/disk_cache/disk_cache_test_util.cc
+++ b/net/disk_cache/disk_cache_test_util.cc
@@ -62,9 +62,9 @@
                          bool new_eviction,
                          int max_size,
                          uint32_t mask) {
-  std::unique_ptr<disk_cache::BackendImpl> cache(new disk_cache::BackendImpl(
+  auto cache = std::make_unique<disk_cache::BackendImpl>(
       path, mask, base::ThreadTaskRunnerHandle::Get(), net::DISK_CACHE,
-      nullptr));
+      nullptr);
   if (max_size)
     cache->SetMaxSize(max_size);
   if (!cache.get())
diff --git a/net/disk_cache/memory/mem_backend_impl.cc b/net/disk_cache/memory/mem_backend_impl.cc
index 993792e4..951427d 100644
--- a/net/disk_cache/memory/mem_backend_impl.cc
+++ b/net/disk_cache/memory/mem_backend_impl.cc
@@ -308,8 +308,7 @@
 };
 
 std::unique_ptr<Backend::Iterator> MemBackendImpl::CreateIterator() {
-  return std::unique_ptr<Backend::Iterator>(
-      new MemIterator(weak_factory_.GetWeakPtr()));
+  return std::make_unique<MemIterator>(weak_factory_.GetWeakPtr());
 }
 
 void MemBackendImpl::OnExternalCacheHit(const std::string& key) {
diff --git a/net/disk_cache/simple/simple_backend_impl.cc b/net/disk_cache/simple/simple_backend_impl.cc
index 38380bb..db4db67 100644
--- a/net/disk_cache/simple/simple_backend_impl.cc
+++ b/net/disk_cache/simple/simple_backend_impl.cc
@@ -22,6 +22,7 @@
 #include "base/files/file_util.h"
 #include "base/lazy_instance.h"
 #include "base/location.h"
+#include "base/memory/ptr_util.h"
 #include "base/metrics/field_trial.h"
 #include "base/metrics/field_trial_params.h"
 #include "base/metrics/histogram_functions.h"
@@ -192,9 +193,7 @@
   static std::unique_ptr<SimpleEntryImpl::ActiveEntryProxy> Create(
       int64_t entry_hash,
       SimpleBackendImpl* backend) {
-    std::unique_ptr<SimpleEntryImpl::ActiveEntryProxy> proxy(
-        new ActiveEntryProxy(entry_hash, backend));
-    return proxy;
+    return base::WrapUnique(new ActiveEntryProxy(entry_hash, backend));
   }
 
  private:
@@ -300,8 +299,7 @@
 
 void SimpleBackendImpl::DoomEntries(std::vector<uint64_t>* entry_hashes,
                                     net::CompletionOnceCallback callback) {
-  std::unique_ptr<std::vector<uint64_t>> mass_doom_entry_hashes(
-      new std::vector<uint64_t>());
+  auto mass_doom_entry_hashes = std::make_unique<std::vector<uint64_t>>();
   mass_doom_entry_hashes->swap(*entry_hashes);
 
   std::vector<uint64_t> to_doom_individually_hashes;
@@ -628,7 +626,7 @@
 };
 
 std::unique_ptr<Backend::Iterator> SimpleBackendImpl::CreateIterator() {
-  return std::unique_ptr<Iterator>(new SimpleIterator(AsWeakPtr()));
+  return std::make_unique<SimpleIterator>(AsWeakPtr());
 }
 
 void SimpleBackendImpl::GetStats(base::StringPairs* stats) {
diff --git a/net/disk_cache/simple/simple_entry_impl.cc b/net/disk_cache/simple/simple_entry_impl.cc
index 2a48da9..7a11711 100644
--- a/net/disk_cache/simple/simple_entry_impl.cc
+++ b/net/disk_cache/simple/simple_entry_impl.cc
@@ -788,9 +788,8 @@
   DCHECK(!synchronous_entry_);
   state_ = STATE_IO_PENDING;
   const base::TimeTicks start_time = base::TimeTicks::Now();
-  std::unique_ptr<SimpleEntryCreationResults> results(
-      new SimpleEntryCreationResults(SimpleEntryStat(
-          last_used_, last_modified_, data_size_, sparse_data_size_)));
+  auto results = std::make_unique<SimpleEntryCreationResults>(SimpleEntryStat(
+      last_used_, last_modified_, data_size_, sparse_data_size_));
 
   int32_t trailer_prefetch_size = -1;
   base::Time last_used_time;
@@ -846,9 +845,8 @@
   last_used_ = last_modified_ = base::Time::Now();
 
   const base::TimeTicks start_time = base::TimeTicks::Now();
-  std::unique_ptr<SimpleEntryCreationResults> results(
-      new SimpleEntryCreationResults(SimpleEntryStat(
-          last_used_, last_modified_, data_size_, sparse_data_size_)));
+  auto results = std::make_unique<SimpleEntryCreationResults>(SimpleEntryStat(
+      last_used_, last_modified_, data_size_, sparse_data_size_));
 
   OnceClosure task =
       base::BindOnce(&SimpleSynchronousEntry::CreateEntry, cache_type_, path_,
@@ -897,9 +895,8 @@
   DCHECK(!synchronous_entry_);
   state_ = STATE_IO_PENDING;
   const base::TimeTicks start_time = base::TimeTicks::Now();
-  std::unique_ptr<SimpleEntryCreationResults> results(
-      new SimpleEntryCreationResults(SimpleEntryStat(
-          last_used_, last_modified_, data_size_, sparse_data_size_)));
+  auto results = std::make_unique<SimpleEntryCreationResults>(SimpleEntryStat(
+      last_used_, last_modified_, data_size_, sparse_data_size_));
 
   int32_t trailer_prefetch_size = -1;
   base::Time last_used_time;
@@ -937,8 +934,7 @@
   }
 
   typedef SimpleSynchronousEntry::CRCRecord CRCRecord;
-  std::unique_ptr<std::vector<CRCRecord>> crc32s_to_write(
-      new std::vector<CRCRecord>());
+  auto crc32s_to_write = std::make_unique<std::vector<CRCRecord>>();
 
   net_log_.AddEvent(net::NetLogEventType::SIMPLE_CACHE_ENTRY_CLOSE_BEGIN);
 
@@ -959,8 +955,7 @@
     DCHECK(STATE_UNINITIALIZED == state_ || STATE_FAILURE == state_);
   }
 
-  std::unique_ptr<SimpleEntryCloseResults> results =
-      std::make_unique<SimpleEntryCloseResults>();
+  auto results = std::make_unique<SimpleEntryCloseResults>();
   if (synchronous_entry_) {
     OnceClosure task = base::BindOnce(
         &SimpleSynchronousEntry::Close, base::Unretained(synchronous_entry_),
@@ -1049,10 +1044,9 @@
     read_req.request_verify_crc = !have_written_[stream_index];
   }
 
-  std::unique_ptr<SimpleSynchronousEntry::ReadResult> result =
-      std::make_unique<SimpleSynchronousEntry::ReadResult>();
-  std::unique_ptr<SimpleEntryStat> entry_stat(new SimpleEntryStat(
-      last_used_, last_modified_, data_size_, sparse_data_size_));
+  auto result = std::make_unique<SimpleSynchronousEntry::ReadResult>();
+  auto entry_stat = std::make_unique<SimpleEntryStat>(
+      last_used_, last_modified_, data_size_, sparse_data_size_);
   OnceClosure task = base::BindOnce(
       &SimpleSynchronousEntry::ReadData, base::Unretained(synchronous_entry_),
       read_req, entry_stat.get(), base::RetainedRef(buf), result.get());
@@ -1139,8 +1133,8 @@
   }
 
   // |entry_stat| needs to be initialized before modifying |data_size_|.
-  std::unique_ptr<SimpleEntryStat> entry_stat(new SimpleEntryStat(
-      last_used_, last_modified_, data_size_, sparse_data_size_));
+  auto entry_stat = std::make_unique<SimpleEntryStat>(
+      last_used_, last_modified_, data_size_, sparse_data_size_);
   if (truncate) {
     data_size_[stream_index] = offset + buf_len;
   } else {
@@ -1148,8 +1142,7 @@
                                         GetDataSize(stream_index));
   }
 
-  std::unique_ptr<SimpleSynchronousEntry::WriteResult> write_result =
-      std::make_unique<SimpleSynchronousEntry::WriteResult>();
+  auto write_result = std::make_unique<SimpleSynchronousEntry::WriteResult>();
 
   // Since we don't know the correct values for |last_used_| and
   // |last_modified_| yet, we make this approximation.
@@ -1212,8 +1205,8 @@
   DCHECK_EQ(STATE_READY, state_);
   state_ = STATE_IO_PENDING;
 
-  std::unique_ptr<int> result(new int());
-  std::unique_ptr<base::Time> last_used(new base::Time());
+  auto result = std::make_unique<int>();
+  auto last_used = std::make_unique<base::Time>();
   OnceClosure task = base::BindOnce(
       &SimpleSynchronousEntry::ReadSparseData,
       base::Unretained(synchronous_entry_),
@@ -1263,12 +1256,12 @@
     max_sparse_data_size = max_cache_size / kMaxSparseDataSizeDivisor;
   }
 
-  std::unique_ptr<SimpleEntryStat> entry_stat(new SimpleEntryStat(
-      last_used_, last_modified_, data_size_, sparse_data_size_));
+  auto entry_stat = std::make_unique<SimpleEntryStat>(
+      last_used_, last_modified_, data_size_, sparse_data_size_);
 
   last_used_ = last_modified_ = base::Time::Now();
 
-  std::unique_ptr<int> result(new int());
+  auto result = std::make_unique<int>();
   OnceClosure task = base::BindOnce(
       &SimpleSynchronousEntry::WriteSparseData,
       base::Unretained(synchronous_entry_),
diff --git a/net/disk_cache/simple/simple_file_tracker.cc b/net/disk_cache/simple/simple_file_tracker.cc
index 45a78305..7560a86 100644
--- a/net/disk_cache/simple/simple_file_tracker.cc
+++ b/net/disk_cache/simple/simple_file_tracker.cc
@@ -63,7 +63,7 @@
     }
 
     if (!owners_files) {
-      candidates.emplace_back(new TrackedFiles());
+      candidates.emplace_back(std::make_unique<TrackedFiles>());
       owners_files = candidates.back().get();
       owners_files->owner = owner;
       owners_files->key = owner->entry_file_key();
diff --git a/net/disk_cache/simple/simple_index.cc b/net/disk_cache/simple/simple_index.cc
index 91ed9e3c..9e1fcc6 100644
--- a/net/disk_cache/simple/simple_index.cc
+++ b/net/disk_cache/simple/simple_index.cc
@@ -256,7 +256,7 @@
     end_time += EntryMetadata::GetUpperEpsilonForTimeComparisons();
   DCHECK(end_time >= initial_time);
 
-  std::unique_ptr<HashList> ret_hashes(new HashList());
+  auto ret_hashes = std::make_unique<HashList>();
   for (const auto& entry : entries_set_) {
     const EntryMetadata& metadata = entry.second;
     base::Time entry_time = metadata.GetLastUsedTime();
diff --git a/net/disk_cache/simple/simple_index_unittest.cc b/net/disk_cache/simple/simple_index_unittest.cc
index 92cde3b..34d2266 100644
--- a/net/disk_cache/simple/simple_index_unittest.cc
+++ b/net/disk_cache/simple/simple_index_unittest.cc
@@ -114,8 +114,7 @@
   }
 
   void SetUp() override {
-    std::unique_ptr<MockSimpleIndexFile> index_file(
-        new MockSimpleIndexFile(CacheType()));
+    auto index_file = std::make_unique<MockSimpleIndexFile>(CacheType());
     index_file_ = index_file->AsWeakPtr();
     index_ =
         std::make_unique<SimpleIndex>(/* io_thread = */ nullptr,
@@ -263,13 +262,13 @@
   index()->UpdateEntrySize(hashes_.at<4>(), 4u * kSizeResolution);
   EXPECT_EQ(9u * kSizeResolution, index()->cache_size_);
   {
-    std::unique_ptr<SimpleIndexLoadResult> result(new SimpleIndexLoadResult());
+    auto result = std::make_unique<SimpleIndexLoadResult>();
     result->did_load = true;
     index()->MergeInitializingSet(std::move(result));
   }
   EXPECT_EQ(9u * kSizeResolution, index()->cache_size_);
   {
-    std::unique_ptr<SimpleIndexLoadResult> result(new SimpleIndexLoadResult());
+    auto result = std::make_unique<SimpleIndexLoadResult>();
     result->did_load = true;
     const uint64_t new_hash_key = hashes_.at<11>();
     result->entries.insert(std::make_pair(
diff --git a/net/dns/address_sorter_posix.cc b/net/dns/address_sorter_posix.cc
index 7f14b73..9bd30d0 100644
--- a/net/dns/address_sorter_posix.cc
+++ b/net/dns/address_sorter_posix.cc
@@ -276,7 +276,7 @@
   std::vector<std::unique_ptr<DestinationInfo>> sort_list;
 
   for (const IPEndPoint& endpoint : endpoints) {
-    std::unique_ptr<DestinationInfo> info(new DestinationInfo());
+    auto info = std::make_unique<DestinationInfo>();
     info->endpoint = endpoint;
     info->scope = GetScope(ipv4_scope_table_, info->endpoint.address());
     info->precedence =
@@ -411,8 +411,8 @@
 
 // static
 std::unique_ptr<AddressSorter> AddressSorter::CreateAddressSorter() {
-  return std::unique_ptr<AddressSorter>(
-      new AddressSorterPosix(ClientSocketFactory::GetDefaultFactory()));
+  return std::make_unique<AddressSorterPosix>(
+      ClientSocketFactory::GetDefaultFactory());
 }
 
 }  // namespace net
diff --git a/net/dns/address_sorter_posix_unittest.cc b/net/dns/address_sorter_posix_unittest.cc
index f2a1a2c2..5a58740c 100644
--- a/net/dns/address_sorter_posix_unittest.cc
+++ b/net/dns/address_sorter_posix_unittest.cc
@@ -157,8 +157,7 @@
       DatagramSocket::BindType,
       NetLog*,
       const NetLogSource&) override {
-    return std::unique_ptr<DatagramClientSocket>(
-        new TestUDPClientSocket(&mapping_));
+    return std::make_unique<TestUDPClientSocket>(&mapping_);
   }
   std::unique_ptr<TransportClientSocket> CreateTransportClientSocket(
       const AddressList&,
diff --git a/net/dns/context_host_resolver_unittest.cc b/net/dns/context_host_resolver_unittest.cc
index c14ad87..3201b9a 100644
--- a/net/dns/context_host_resolver_unittest.cc
+++ b/net/dns/context_host_resolver_unittest.cc
@@ -854,8 +854,7 @@
 
   const url::SchemeHostPort host(url::kHttpsScheme, "example.com",
                                  NetworkAwareHostResolverProc::kPort);
-  scoped_refptr<NetworkAwareHostResolverProc> resolver_proc =
-      new NetworkAwareHostResolverProc();
+  auto resolver_proc = base::MakeRefCounted<NetworkAwareHostResolverProc>();
   ScopedDefaultHostResolverProc scoped_default_host_resolver;
   scoped_default_host_resolver.Init(resolver_proc.get());
 
@@ -895,8 +894,7 @@
 TEST_F(ContextHostResolverTest, NotExistingNetworkBoundLookup) {
   const url::SchemeHostPort host(url::kHttpsScheme, "example.com",
                                  NetworkAwareHostResolverProc::kPort);
-  scoped_refptr<NetworkAwareHostResolverProc> resolver_proc =
-      new NetworkAwareHostResolverProc();
+  auto resolver_proc = base::MakeRefCounted<NetworkAwareHostResolverProc>();
   ScopedDefaultHostResolverProc scoped_default_host_resolver;
   scoped_default_host_resolver.Init(resolver_proc.get());
 
diff --git a/net/dns/dns_client.cc b/net/dns/dns_client.cc
index 179f857..972ebdfd 100644
--- a/net/dns/dns_client.cc
+++ b/net/dns/dns_client.cc
@@ -295,8 +295,9 @@
     if (new_effective_config) {
       DCHECK(new_effective_config.value().IsValid());
 
-      session_ = new DnsSession(std::move(new_effective_config).value(),
-                                rand_int_callback_, net_log_);
+      session_ = base::MakeRefCounted<DnsSession>(
+          std::move(new_effective_config).value(), rand_int_callback_,
+          net_log_);
       factory_ = DnsTransactionFactory::CreateFactory(session_.get());
     }
   }
diff --git a/net/dns/dns_config_service_posix.cc b/net/dns/dns_config_service_posix.cc
index e9b2b0e..025078e 100644
--- a/net/dns/dns_config_service_posix.cc
+++ b/net/dns/dns_config_service_posix.cc
@@ -315,8 +315,7 @@
 #if BUILDFLAG(IS_IOS)
   return nullptr;
 #else   // BUILDFLAG(IS_IOS)
-  return std::unique_ptr<DnsConfigService>(
-      new internal::DnsConfigServicePosix());
+  return std::make_unique<internal::DnsConfigServicePosix>();
 #endif  // BUILDFLAG(IS_IOS)
 }
 
diff --git a/net/dns/dns_config_service_posix_unittest.cc b/net/dns/dns_config_service_posix_unittest.cc
index 83a38b9..695a382 100644
--- a/net/dns/dns_config_service_posix_unittest.cc
+++ b/net/dns/dns_config_service_posix_unittest.cc
@@ -196,8 +196,7 @@
       base::test::TaskEnvironment::MainThreadType::IO,
       base::test::TaskEnvironment::TimeSource::MOCK_TIME);
 
-  std::unique_ptr<internal::DnsConfigServicePosix> service(
-      new internal::DnsConfigServicePosix());
+  auto service = std::make_unique<internal::DnsConfigServicePosix>();
   // Call WatchConfig() which also tests ReadConfig().
   service->WatchConfig(base::BindRepeating(&DummyConfigCallback));
   service.reset();
diff --git a/net/dns/dns_config_service_win.cc b/net/dns/dns_config_service_win.cc
index e2d1769..71ecb186 100644
--- a/net/dns/dns_config_service_win.cc
+++ b/net/dns/dns_config_service_win.cc
@@ -679,7 +679,7 @@
 
 // static
 std::unique_ptr<DnsConfigService> DnsConfigService::CreateSystemService() {
-  return std::unique_ptr<DnsConfigService>(new internal::DnsConfigServiceWin());
+  return std::make_unique<internal::DnsConfigServiceWin>();
 }
 
 }  // namespace net
diff --git a/net/dns/dns_test_util.cc b/net/dns/dns_test_util.cc
index 88542f9..0088d6d3 100644
--- a/net/dns/dns_test_util.cc
+++ b/net/dns/dns_test_util.cc
@@ -668,8 +668,8 @@
 
 MockDnsClient::MockDnsClient(DnsConfig config, MockDnsClientRuleList rules)
     : config_(std::move(config)),
-      factory_(new MockDnsTransactionFactory(std::move(rules))),
-      address_sorter_(new MockAddressSorter()) {
+      factory_(std::make_unique<MockDnsTransactionFactory>(std::move(rules))),
+      address_sorter_(std::make_unique<MockAddressSorter>()) {
   effective_config_ = BuildEffectiveConfig();
   session_ = BuildSession();
 }
diff --git a/net/dns/dns_transaction.cc b/net/dns/dns_transaction.cc
index d4f05d5e..fd89fece 100644
--- a/net/dns/dns_transaction.cc
+++ b/net/dns/dns_transaction.cc
@@ -1744,8 +1744,7 @@
 // static
 std::unique_ptr<DnsTransactionFactory> DnsTransactionFactory::CreateFactory(
     DnsSession* session) {
-  return std::unique_ptr<DnsTransactionFactory>(
-      new DnsTransactionFactoryImpl(session));
+  return std::make_unique<DnsTransactionFactoryImpl>(session);
 }
 
 }  // namespace net
diff --git a/net/dns/dns_transaction_unittest.cc b/net/dns/dns_transaction_unittest.cc
index 26a68df..f981692 100644
--- a/net/dns/dns_transaction_unittest.cc
+++ b/net/dns/dns_transaction_unittest.cc
@@ -118,7 +118,7 @@
                             padding_strategy)),
         transport_(transport) {
     if (Transport::TCP == transport_) {
-      std::unique_ptr<uint16_t> length(new uint16_t);
+      auto length = std::make_unique<uint16_t>();
       *length = base::HostToNet16(query_->io_buffer()->size());
       writes_.emplace_back(mode, reinterpret_cast<const char*>(length.get()),
                            sizeof(uint16_t), num_reads_and_writes());
@@ -141,7 +141,7 @@
                              uint16_t tcp_length) {
     CHECK(!provider_.get());
     if (Transport::TCP == transport_) {
-      std::unique_ptr<uint16_t> length(new uint16_t);
+      auto length = std::make_unique<uint16_t>();
       *length = base::HostToNet16(tcp_length);
       reads_.emplace_back(mode, reinterpret_cast<const char*>(length.get()),
                           sizeof(uint16_t), num_reads_and_writes());
@@ -180,8 +180,8 @@
 
   // Add no-answer (RCODE only) response matching the query.
   void AddRcode(int rcode, IoMode mode) {
-    std::unique_ptr<DnsResponse> response(new DnsResponse(
-        query_->io_buffer()->data(), query_->io_buffer()->size(), 0));
+    auto response = std::make_unique<DnsResponse>(
+        query_->io_buffer()->data(), query_->io_buffer()->size(), 0);
     dns_protocol::Header* header =
         reinterpret_cast<dns_protocol::Header*>(response->io_buffer()->data());
     header->flags |= base::HostToNet16(dns_protocol::kFlagResponse | rcode);
@@ -274,8 +274,7 @@
       const NetLogSource& source) override {
     if (fail_next_socket_) {
       fail_next_socket_ = false;
-      return std::unique_ptr<DatagramClientSocket>(
-          new FailingUDPClientSocket(&empty_data_, net_log));
+      return std::make_unique<FailingUDPClientSocket>(&empty_data_, net_log);
     }
 
     SocketDataProvider* data_provider = mock_data().GetNext();
@@ -643,11 +642,11 @@
 
   // Called after fully configuring |config|.
   void ConfigureFactory() {
-    session_ =
-        new DnsSession(config_,
-                       base::BindRepeating(&DnsTransactionTestBase::GetNextId,
-                                           base::Unretained(this)),
-                       nullptr /* NetLog */);
+    session_ = base::MakeRefCounted<DnsSession>(
+        config_,
+        base::BindRepeating(&DnsTransactionTestBase::GetNextId,
+                            base::Unretained(this)),
+        nullptr /* NetLog */);
     resolve_context_->InvalidateCachesAndPerSessionData(
         session_.get(), false /* network_change */);
     transaction_factory_ = DnsTransactionFactory::CreateFactory(session_.get());
@@ -677,8 +676,8 @@
                                DnsQuery::PaddingStrategy::NONE,
                            bool enqueue_transaction_id = true) {
     CHECK(socket_factory_.get());
-    std::unique_ptr<DnsSocketData> data(new DnsSocketData(
-        id, dotted_name, qtype, mode, transport, opt_rdata, padding_strategy));
+    auto data = std::make_unique<DnsSocketData>(
+        id, dotted_name, qtype, mode, transport, opt_rdata, padding_strategy);
     data->AddResponseData(response_data, response_length, mode);
     AddSocketData(std::move(data), enqueue_transaction_id);
   }
@@ -694,8 +693,8 @@
                                     DnsQuery::PaddingStrategy::NONE,
                                 bool enqueue_transaction_id = true) {
     CHECK(socket_factory_.get());
-    std::unique_ptr<DnsSocketData> data(new DnsSocketData(
-        id, dotted_name, qtype, mode, transport, opt_rdata, padding_strategy));
+    auto data = std::make_unique<DnsSocketData>(
+        id, dotted_name, qtype, mode, transport, opt_rdata, padding_strategy);
     data->AddReadError(error, mode);
     AddSocketData(std::move(data), enqueue_transaction_id);
   }
@@ -728,9 +727,9 @@
           DnsQuery::PaddingStrategy::NONE,
       uint16_t id = base::RandInt(0, std::numeric_limits<uint16_t>::max()),
       bool enqueue_transaction_id = true) {
-    std::unique_ptr<DnsSocketData> data(
-        new DnsSocketData(id, dotted_name, qtype, ASYNC, Transport::UDP,
-                          nullptr /* opt_rdata */, padding_strategy));
+    auto data = std::make_unique<DnsSocketData>(
+        id, dotted_name, qtype, ASYNC, Transport::UDP, nullptr /* opt_rdata */,
+        padding_strategy);
     AddSocketData(std::move(data), enqueue_transaction_id);
   }
 
@@ -747,9 +746,9 @@
       uint16_t id = base::RandInt(0, std::numeric_limits<uint16_t>::max()),
       bool enqueue_transaction_id = true) {
     CHECK_NE(dns_protocol::kRcodeNOERROR, rcode);
-    std::unique_ptr<DnsSocketData> data(
-        new DnsSocketData(id, dotted_name, qtype, mode, trans,
-                          nullptr /* opt_rdata */, padding_strategy));
+    auto data = std::make_unique<DnsSocketData>(id, dotted_name, qtype, mode,
+                                                trans, nullptr /* opt_rdata */,
+                                                padding_strategy);
     data->AddRcode(rcode, mode);
     AddSocketData(std::move(data), enqueue_transaction_id);
   }
@@ -1094,15 +1093,15 @@
   ConfigureFactory();
 
   // First attempt receives mismatched response synchronously.
-  std::unique_ptr<DnsSocketData> data(new DnsSocketData(
-      0 /* id */, kT0HostName, kT0Qtype, SYNCHRONOUS, Transport::UDP));
+  auto data = std::make_unique<DnsSocketData>(0 /* id */, kT0HostName, kT0Qtype,
+                                              SYNCHRONOUS, Transport::UDP);
   data->AddResponseData(kT1ResponseDatagram, std::size(kT1ResponseDatagram),
                         SYNCHRONOUS);
   AddSocketData(std::move(data));
 
   // Second attempt receives valid response synchronously.
-  std::unique_ptr<DnsSocketData> data1(new DnsSocketData(
-      0 /* id */, kT0HostName, kT0Qtype, SYNCHRONOUS, Transport::UDP));
+  auto data1 = std::make_unique<DnsSocketData>(
+      0 /* id */, kT0HostName, kT0Qtype, SYNCHRONOUS, Transport::UDP);
   data1->AddResponseData(kT0ResponseDatagram, std::size(kT0ResponseDatagram),
                          SYNCHRONOUS);
   AddSocketData(std::move(data1));
@@ -1118,15 +1117,15 @@
   ConfigureFactory();
 
   // First attempt receives mismatched response asynchronously.
-  std::unique_ptr<DnsSocketData> data0(new DnsSocketData(
-      0 /* id */, kT0HostName, kT0Qtype, ASYNC, Transport::UDP));
+  auto data0 = std::make_unique<DnsSocketData>(0 /* id */, kT0HostName,
+                                               kT0Qtype, ASYNC, Transport::UDP);
   data0->AddResponseData(kT1ResponseDatagram, std::size(kT1ResponseDatagram),
                          ASYNC);
   AddSocketData(std::move(data0));
 
   // Second attempt receives valid response asynchronously.
-  std::unique_ptr<DnsSocketData> data1(new DnsSocketData(
-      0 /* id */, kT0HostName, kT0Qtype, ASYNC, Transport::UDP));
+  auto data1 = std::make_unique<DnsSocketData>(0 /* id */, kT0HostName,
+                                               kT0Qtype, ASYNC, Transport::UDP);
   data1->AddResponseData(kT0ResponseDatagram, std::size(kT0ResponseDatagram),
                          ASYNC);
   AddSocketData(std::move(data1));
@@ -1162,8 +1161,8 @@
   // First attempt receives mismatched response followed by valid NXDOMAIN
   // response.
   // Second attempt receives valid NXDOMAIN response.
-  std::unique_ptr<DnsSocketData> data(new DnsSocketData(
-      0 /* id */, kT0HostName, kT0Qtype, SYNCHRONOUS, Transport::UDP));
+  auto data = std::make_unique<DnsSocketData>(0 /* id */, kT0HostName, kT0Qtype,
+                                              SYNCHRONOUS, Transport::UDP);
   data->AddResponseData(kT1ResponseDatagram, std::size(kT1ResponseDatagram),
                         SYNCHRONOUS);
   data->AddRcode(dns_protocol::kRcodeNXDOMAIN, ASYNC);
@@ -1703,9 +1702,9 @@
 
 TEST_F(DnsTransactionTest, HttpsPostLookupFailSync) {
   ConfigureDohServers(true /* use_post */);
-  std::unique_ptr<DnsSocketData> data(new DnsSocketData(
+  auto data = std::make_unique<DnsSocketData>(
       0, kT0HostName, kT0Qtype, SYNCHRONOUS, Transport::HTTPS,
-      nullptr /* opt_rdata */, DnsQuery::PaddingStrategy::BLOCK_LENGTH_128));
+      nullptr /* opt_rdata */, DnsQuery::PaddingStrategy::BLOCK_LENGTH_128);
   data->AddResponseWithLength(std::make_unique<DnsResponse>(), SYNCHRONOUS, 0);
   AddSocketData(std::move(data), false /* enqueue_transaction_id */);
   TransactionHelper helper0(ERR_DNS_MALFORMED_RESPONSE);
@@ -1739,9 +1738,9 @@
 
 TEST_F(DnsTransactionTest, HttpsPostLookup2Sync) {
   ConfigureDohServers(true /* use_post */);
-  std::unique_ptr<DnsSocketData> data(new DnsSocketData(
+  auto data = std::make_unique<DnsSocketData>(
       0, kT0HostName, kT0Qtype, SYNCHRONOUS, Transport::HTTPS,
-      nullptr /* opt_rdata */, DnsQuery::PaddingStrategy::BLOCK_LENGTH_128));
+      nullptr /* opt_rdata */, DnsQuery::PaddingStrategy::BLOCK_LENGTH_128);
   data->AddResponseData(kT0ResponseDatagram, 20, SYNCHRONOUS);
   data->AddResponseData(kT0ResponseDatagram + 20,
                         std::size(kT0ResponseDatagram) - 20, SYNCHRONOUS);
@@ -1754,9 +1753,9 @@
 
 TEST_F(DnsTransactionTest, HttpsPostLookup2Async) {
   ConfigureDohServers(true /* use_post */);
-  std::unique_ptr<DnsSocketData> data(new DnsSocketData(
+  auto data = std::make_unique<DnsSocketData>(
       0, kT0HostName, kT0Qtype, SYNCHRONOUS, Transport::HTTPS,
-      nullptr /* opt_rdata */, DnsQuery::PaddingStrategy::BLOCK_LENGTH_128));
+      nullptr /* opt_rdata */, DnsQuery::PaddingStrategy::BLOCK_LENGTH_128);
   data->AddResponseData(kT0ResponseDatagram, 20, ASYNC);
   data->AddResponseData(kT0ResponseDatagram + 20,
                         std::size(kT0ResponseDatagram) - 20, ASYNC);
@@ -1769,9 +1768,9 @@
 
 TEST_F(DnsTransactionTest, HttpsPostLookupAsyncWithAsyncZeroRead) {
   ConfigureDohServers(true /* use_post */);
-  std::unique_ptr<DnsSocketData> data(new DnsSocketData(
+  auto data = std::make_unique<DnsSocketData>(
       0, kT0HostName, kT0Qtype, SYNCHRONOUS, Transport::HTTPS,
-      nullptr /* opt_rdata */, DnsQuery::PaddingStrategy::BLOCK_LENGTH_128));
+      nullptr /* opt_rdata */, DnsQuery::PaddingStrategy::BLOCK_LENGTH_128);
   data->AddResponseData(kT0ResponseDatagram, std::size(kT0ResponseDatagram),
                         ASYNC);
   data->AddResponseData(kT0ResponseDatagram, 0, ASYNC);
@@ -1784,9 +1783,9 @@
 
 TEST_F(DnsTransactionTest, HttpsPostLookupSyncWithAsyncZeroRead) {
   ConfigureDohServers(true /* use_post */);
-  std::unique_ptr<DnsSocketData> data(new DnsSocketData(
+  auto data = std::make_unique<DnsSocketData>(
       0, kT0HostName, kT0Qtype, SYNCHRONOUS, Transport::HTTPS,
-      nullptr /* opt_rdata */, DnsQuery::PaddingStrategy::BLOCK_LENGTH_128));
+      nullptr /* opt_rdata */, DnsQuery::PaddingStrategy::BLOCK_LENGTH_128);
   data->AddResponseData(kT0ResponseDatagram, std::size(kT0ResponseDatagram),
                         SYNCHRONOUS);
   data->AddResponseData(kT0ResponseDatagram, 0, ASYNC);
@@ -1799,9 +1798,9 @@
 
 TEST_F(DnsTransactionTest, HttpsPostLookupAsyncThenSync) {
   ConfigureDohServers(true /* use_post */);
-  std::unique_ptr<DnsSocketData> data(new DnsSocketData(
+  auto data = std::make_unique<DnsSocketData>(
       0, kT0HostName, kT0Qtype, SYNCHRONOUS, Transport::HTTPS,
-      nullptr /* opt_rdata */, DnsQuery::PaddingStrategy::BLOCK_LENGTH_128));
+      nullptr /* opt_rdata */, DnsQuery::PaddingStrategy::BLOCK_LENGTH_128);
   data->AddResponseData(kT0ResponseDatagram, 20, ASYNC);
   data->AddResponseData(kT0ResponseDatagram + 20,
                         std::size(kT0ResponseDatagram) - 20, SYNCHRONOUS);
@@ -1814,9 +1813,9 @@
 
 TEST_F(DnsTransactionTest, HttpsPostLookupAsyncThenSyncError) {
   ConfigureDohServers(true /* use_post */);
-  std::unique_ptr<DnsSocketData> data(new DnsSocketData(
+  auto data = std::make_unique<DnsSocketData>(
       0, kT0HostName, kT0Qtype, SYNCHRONOUS, Transport::HTTPS,
-      nullptr /* opt_rdata */, DnsQuery::PaddingStrategy::BLOCK_LENGTH_128));
+      nullptr /* opt_rdata */, DnsQuery::PaddingStrategy::BLOCK_LENGTH_128);
   data->AddResponseData(kT0ResponseDatagram, 20, ASYNC);
   data->AddReadError(ERR_FAILED, SYNCHRONOUS);
   AddSocketData(std::move(data), false /* enqueue_transaction_id */);
@@ -1828,9 +1827,9 @@
 
 TEST_F(DnsTransactionTest, HttpsPostLookupAsyncThenAsyncError) {
   ConfigureDohServers(true /* use_post */);
-  std::unique_ptr<DnsSocketData> data(new DnsSocketData(
+  auto data = std::make_unique<DnsSocketData>(
       0, kT0HostName, kT0Qtype, SYNCHRONOUS, Transport::HTTPS,
-      nullptr /* opt_rdata */, DnsQuery::PaddingStrategy::BLOCK_LENGTH_128));
+      nullptr /* opt_rdata */, DnsQuery::PaddingStrategy::BLOCK_LENGTH_128);
   data->AddResponseData(kT0ResponseDatagram, 20, ASYNC);
   data->AddReadError(ERR_FAILED, ASYNC);
   AddSocketData(std::move(data), false /* enqueue_transaction_id */);
@@ -1842,9 +1841,9 @@
 
 TEST_F(DnsTransactionTest, HttpsPostLookupSyncThenAsyncError) {
   ConfigureDohServers(true /* use_post */);
-  std::unique_ptr<DnsSocketData> data(new DnsSocketData(
+  auto data = std::make_unique<DnsSocketData>(
       0, kT0HostName, kT0Qtype, SYNCHRONOUS, Transport::HTTPS,
-      nullptr /* opt_rdata */, DnsQuery::PaddingStrategy::BLOCK_LENGTH_128));
+      nullptr /* opt_rdata */, DnsQuery::PaddingStrategy::BLOCK_LENGTH_128);
   data->AddResponseData(kT0ResponseDatagram, 20, SYNCHRONOUS);
   data->AddReadError(ERR_FAILED, ASYNC);
   AddSocketData(std::move(data), false /* enqueue_transaction_id */);
@@ -1856,9 +1855,9 @@
 
 TEST_F(DnsTransactionTest, HttpsPostLookupSyncThenSyncError) {
   ConfigureDohServers(true /* use_post */);
-  std::unique_ptr<DnsSocketData> data(new DnsSocketData(
+  auto data = std::make_unique<DnsSocketData>(
       0, kT0HostName, kT0Qtype, SYNCHRONOUS, Transport::HTTPS,
-      nullptr /* opt_rdata */, DnsQuery::PaddingStrategy::BLOCK_LENGTH_128));
+      nullptr /* opt_rdata */, DnsQuery::PaddingStrategy::BLOCK_LENGTH_128);
   data->AddResponseData(kT0ResponseDatagram, 20, SYNCHRONOUS);
   data->AddReadError(ERR_FAILED, SYNCHRONOUS);
   AddSocketData(std::move(data), false /* enqueue_transaction_id */);
@@ -2299,9 +2298,9 @@
   // Create a socket data to first return ERR_IO_PENDING. This will pause the
   // response and not return the second response until
   // SequencedSocketData::Resume() is called.
-  std::unique_ptr<DnsSocketData> data(new DnsSocketData(
+  auto data = std::make_unique<DnsSocketData>(
       0, kT0HostName, kT0Qtype, ASYNC, Transport::HTTPS,
-      nullptr /* opt_rdata */, DnsQuery::PaddingStrategy::BLOCK_LENGTH_128));
+      nullptr /* opt_rdata */, DnsQuery::PaddingStrategy::BLOCK_LENGTH_128);
   data->AddReadError(ERR_IO_PENDING, ASYNC);
   data->AddResponseData(kT0ResponseDatagram, std::size(kT0ResponseDatagram),
                         ASYNC);
@@ -3081,8 +3080,8 @@
 TEST_F(DnsTransactionTest, TCPMalformed) {
   AddAsyncQueryAndRcode(kT0HostName, kT0Qtype,
                         dns_protocol::kRcodeNOERROR | dns_protocol::kFlagTC);
-  std::unique_ptr<DnsSocketData> data(new DnsSocketData(
-      0 /* id */, kT0HostName, kT0Qtype, ASYNC, Transport::TCP));
+  auto data = std::make_unique<DnsSocketData>(0 /* id */, kT0HostName, kT0Qtype,
+                                              ASYNC, Transport::TCP);
   // Valid response but length too short.
   // This must be truncated in the question section. The DnsResponse doesn't
   // examine the answer section until asked to parse it, so truncating it in
@@ -3150,8 +3149,8 @@
 TEST_F(DnsTransactionTest, TCPReadReturnsZeroAsync) {
   AddAsyncQueryAndRcode(kT0HostName, kT0Qtype,
                         dns_protocol::kRcodeNOERROR | dns_protocol::kFlagTC);
-  std::unique_ptr<DnsSocketData> data(new DnsSocketData(
-      0 /* id */, kT0HostName, kT0Qtype, ASYNC, Transport::TCP));
+  auto data = std::make_unique<DnsSocketData>(0 /* id */, kT0HostName, kT0Qtype,
+                                              ASYNC, Transport::TCP);
   // Return all but the last byte of the response.
   data->AddResponseWithLength(
       std::make_unique<DnsResponse>(
@@ -3171,8 +3170,8 @@
 TEST_F(DnsTransactionTest, TCPReadReturnsZeroSynchronous) {
   AddAsyncQueryAndRcode(kT0HostName, kT0Qtype,
                         dns_protocol::kRcodeNOERROR | dns_protocol::kFlagTC);
-  std::unique_ptr<DnsSocketData> data(new DnsSocketData(
-      0 /* id */, kT0HostName, kT0Qtype, ASYNC, Transport::TCP));
+  auto data = std::make_unique<DnsSocketData>(0 /* id */, kT0HostName, kT0Qtype,
+                                              ASYNC, Transport::TCP);
   // Return all but the last byte of the response.
   data->AddResponseWithLength(
       std::make_unique<DnsResponse>(
@@ -3192,8 +3191,8 @@
 TEST_F(DnsTransactionTest, TCPConnectionClosedAsync) {
   AddAsyncQueryAndRcode(kT0HostName, kT0Qtype,
                         dns_protocol::kRcodeNOERROR | dns_protocol::kFlagTC);
-  std::unique_ptr<DnsSocketData> data(new DnsSocketData(
-      0 /* id */, kT0HostName, kT0Qtype, ASYNC, Transport::TCP));
+  auto data = std::make_unique<DnsSocketData>(0 /* id */, kT0HostName, kT0Qtype,
+                                              ASYNC, Transport::TCP);
   data->AddReadError(ERR_CONNECTION_CLOSED, ASYNC);
   AddSocketData(std::move(data));
 
@@ -3206,8 +3205,8 @@
 TEST_F(DnsTransactionTest, TCPConnectionClosedSynchronous) {
   AddAsyncQueryAndRcode(kT0HostName, kT0Qtype,
                         dns_protocol::kRcodeNOERROR | dns_protocol::kFlagTC);
-  std::unique_ptr<DnsSocketData> data(new DnsSocketData(
-      0 /* id */, kT0HostName, kT0Qtype, ASYNC, Transport::TCP));
+  auto data = std::make_unique<DnsSocketData>(0 /* id */, kT0HostName, kT0Qtype,
+                                              ASYNC, Transport::TCP);
   data->AddReadError(ERR_CONNECTION_CLOSED, SYNCHRONOUS);
   AddSocketData(std::move(data));
 
@@ -3220,8 +3219,8 @@
 TEST_F(DnsTransactionTest, MismatchedThenNxdomainThenTCP) {
   config_.attempts = 2;
   ConfigureFactory();
-  std::unique_ptr<DnsSocketData> data(new DnsSocketData(
-      0 /* id */, kT0HostName, kT0Qtype, SYNCHRONOUS, Transport::UDP));
+  auto data = std::make_unique<DnsSocketData>(0 /* id */, kT0HostName, kT0Qtype,
+                                              SYNCHRONOUS, Transport::UDP);
   // First attempt gets a mismatched response.
   data->AddResponseData(kT1ResponseDatagram, std::size(kT1ResponseDatagram),
                         SYNCHRONOUS);
@@ -3240,8 +3239,8 @@
 TEST_F(DnsTransactionTest, MismatchedThenOkThenTCP) {
   config_.attempts = 2;
   ConfigureFactory();
-  std::unique_ptr<DnsSocketData> data(new DnsSocketData(
-      0 /* id */, kT0HostName, kT0Qtype, SYNCHRONOUS, Transport::UDP));
+  auto data = std::make_unique<DnsSocketData>(0 /* id */, kT0HostName, kT0Qtype,
+                                              SYNCHRONOUS, Transport::UDP);
   // First attempt gets a mismatched response.
   data->AddResponseData(kT1ResponseDatagram, std::size(kT1ResponseDatagram),
                         SYNCHRONOUS);
@@ -3285,8 +3284,8 @@
   ConfigureFactory();
 
   // Attempt 1.
-  std::unique_ptr<DnsSocketData> data(new DnsSocketData(
-      0 /* id */, kT0HostName, kT0Qtype, SYNCHRONOUS, Transport::UDP));
+  auto data = std::make_unique<DnsSocketData>(0 /* id */, kT0HostName, kT0Qtype,
+                                              SYNCHRONOUS, Transport::UDP);
   data->AddResponseData(kT1ResponseDatagram, std::size(kT1ResponseDatagram),
                         SYNCHRONOUS);
   data->AddRcode(dns_protocol::kFlagTC, ASYNC);
@@ -4006,15 +4005,15 @@
   }
 
   // Data for TCP attempt.
-  std::unique_ptr<DnsSocketData> data1(new DnsSocketData(
-      0 /* id */, kT0HostName, kT0Qtype, ASYNC, Transport::TCP));
+  auto data1 = std::make_unique<DnsSocketData>(0 /* id */, kT0HostName,
+                                               kT0Qtype, ASYNC, Transport::TCP);
   data1->AddReadError(ERR_IO_PENDING, ASYNC);
   data1->AddReadError(ERR_CONNECTION_REFUSED, ASYNC);
   SequencedSocketData* sequenced_socket_data1 = data1->GetProvider();
   AddSocketData(std::move(data1));
 
-  std::unique_ptr<DnsSocketData> data2(new DnsSocketData(
-      0 /* id */, kT0HostName, kT0Qtype, ASYNC, Transport::TCP));
+  auto data2 = std::make_unique<DnsSocketData>(0 /* id */, kT0HostName,
+                                               kT0Qtype, ASYNC, Transport::TCP);
   data2->AddReadError(ERR_IO_PENDING, ASYNC);
   data2->AddResponseData(kT0ResponseDatagram, std::size(kT0ResponseDatagram),
                          ASYNC);
@@ -4062,17 +4061,17 @@
   ConfigureDohServers(false /* use_post */, 2 /* num_doh_servers */,
                       true /* make_available */);
 
-  std::unique_ptr<DnsSocketData> data1(new DnsSocketData(
+  auto data1 = std::make_unique<DnsSocketData>(
       0 /* id */, kT0HostName, kT0Qtype, ASYNC, Transport::HTTPS,
-      nullptr /* opt_rdata */, DnsQuery::PaddingStrategy::BLOCK_LENGTH_128));
+      nullptr /* opt_rdata */, DnsQuery::PaddingStrategy::BLOCK_LENGTH_128);
   data1->AddReadError(ERR_IO_PENDING, ASYNC);
   data1->AddReadError(ERR_CONNECTION_REFUSED, ASYNC);
   SequencedSocketData* sequenced_socket_data1 = data1->GetProvider();
   AddSocketData(std::move(data1), false /* enqueue_transaction_id */);
 
-  std::unique_ptr<DnsSocketData> data2(new DnsSocketData(
+  auto data2 = std::make_unique<DnsSocketData>(
       0 /* id */, kT0HostName, kT0Qtype, ASYNC, Transport::HTTPS,
-      nullptr /* opt_rdata */, DnsQuery::PaddingStrategy::BLOCK_LENGTH_128));
+      nullptr /* opt_rdata */, DnsQuery::PaddingStrategy::BLOCK_LENGTH_128);
   data2->AddReadError(ERR_IO_PENDING, ASYNC);
   data2->AddResponseData(kT0ResponseDatagram, std::size(kT0ResponseDatagram),
                          ASYNC);
diff --git a/net/dns/host_resolver_manager.cc b/net/dns/host_resolver_manager.cc
index 3a48729..7a9432a6 100644
--- a/net/dns/host_resolver_manager.cc
+++ b/net/dns/host_resolver_manager.cc
@@ -1032,7 +1032,7 @@
       params_.resolver_proc = HostResolverProc::GetDefault();
     // If default is unset, use the system proc.
     if (!params_.resolver_proc.get())
-      params_.resolver_proc = new SystemHostResolverProc();
+      params_.resolver_proc = base::MakeRefCounted<SystemHostResolverProc>();
   }
 
   ProcTask(const ProcTask&) = delete;
diff --git a/net/dns/host_resolver_manager_fuzzer.cc b/net/dns/host_resolver_manager_fuzzer.cc
index 72bc32f..fd9ec489 100644
--- a/net/dns/host_resolver_manager_fuzzer.cc
+++ b/net/dns/host_resolver_manager_fuzzer.cc
@@ -55,8 +55,8 @@
       net::HostResolver* host_resolver,
       FuzzedDataProvider* data_provider,
       std::vector<std::unique_ptr<DnsRequest>>* dns_requests) {
-    std::unique_ptr<DnsRequest> dns_request(
-        new DnsRequest(host_resolver, data_provider, dns_requests));
+    auto dns_request = std::make_unique<DnsRequest>(
+        host_resolver, data_provider, dns_requests);
 
     if (dns_request->Start() == net::ERR_IO_PENDING)
       dns_requests->push_back(std::move(dns_request));
@@ -191,7 +191,7 @@
   void WaitUntilDone() {
     CHECK(!run_loop_);
     if (request_) {
-      run_loop_.reset(new base::RunLoop());
+      run_loop_ = std::make_unique<base::RunLoop>();
       run_loop_->Run();
       run_loop_.reset();
     }
diff --git a/net/dns/host_resolver_manager_unittest.cc b/net/dns/host_resolver_manager_unittest.cc
index cc20169..c180dc9 100644
--- a/net/dns/host_resolver_manager_unittest.cc
+++ b/net/dns/host_resolver_manager_unittest.cc
@@ -525,7 +525,7 @@
       base::test::TaskEnvironment::TimeSource time_source =
           base::test::TaskEnvironment::TimeSource::SYSTEM_TIME)
       : TestWithTaskEnvironment(time_source),
-        proc_(new MockHostResolverProc()) {}
+        proc_(base::MakeRefCounted<MockHostResolverProc>()) {}
 
   void CreateResolver(bool check_ipv6_on_wifi = true) {
     CreateResolverWithLimitsAndParams(kMaxJobs, DefaultParams(proc_.get()),
@@ -2415,9 +2415,8 @@
   // retry at t=6001 instead of t=6000.
   base::TimeDelta kSleepFudgeFactor = base::Milliseconds(1);
 
-  scoped_refptr<LookupAttemptHostResolverProc> resolver_proc(
-      new LookupAttemptHostResolverProc(nullptr, kAttemptNumberToResolve,
-                                        kTotalAttempts));
+  auto resolver_proc = base::MakeRefCounted<LookupAttemptHostResolverProc>(
+      nullptr, kAttemptNumberToResolve, kTotalAttempts);
 
   ProcTaskParams params = DefaultParams(resolver_proc.get());
   base::TimeDelta unresponsive_delay = params.unresponsive_delay;
diff --git a/net/dns/mapped_host_resolver_unittest.cc b/net/dns/mapped_host_resolver_unittest.cc
index 0155491..59dc88d 100644
--- a/net/dns/mapped_host_resolver_unittest.cc
+++ b/net/dns/mapped_host_resolver_unittest.cc
@@ -40,15 +40,15 @@
   base::test::TaskEnvironment task_environment;
 
   // Create a mock host resolver, with specific hostname to IP mappings.
-  std::unique_ptr<MockHostResolver> resolver_impl(new MockHostResolver());
+  auto resolver_impl = std::make_unique<MockHostResolver>();
   resolver_impl->rules()->AddSimulatedFailure("*google.com");
   resolver_impl->rules()->AddRule("baz.com", "192.168.1.5");
   resolver_impl->rules()->AddRule("foo.com", "192.168.1.8");
   resolver_impl->rules()->AddRule("proxy", "192.168.1.11");
 
   // Create a remapped resolver that uses |resolver_impl|.
-  std::unique_ptr<MappedHostResolver> resolver(
-      new MappedHostResolver(std::move(resolver_impl)));
+  auto resolver =
+      std::make_unique<MappedHostResolver>(std::move(resolver_impl));
 
   // Try resolving "www.google.com:80". There are no mappings yet, so this
   // hits |resolver_impl| and fails.
@@ -108,12 +108,12 @@
   base::test::TaskEnvironment task_environment;
 
   // Create a mock host resolver, with specific hostname to IP mappings.
-  std::unique_ptr<MockHostResolver> resolver_impl(new MockHostResolver());
+  auto resolver_impl = std::make_unique<MockHostResolver>();
   resolver_impl->rules()->AddRule("remapped.test", "192.168.1.22");
 
   // Create a remapped resolver that uses `resolver_impl`.
-  std::unique_ptr<MappedHostResolver> resolver(
-      new MappedHostResolver(std::move(resolver_impl)));
+  auto resolver =
+      std::make_unique<MappedHostResolver>(std::move(resolver_impl));
   ASSERT_TRUE(resolver->AddRuleFromString("MAP to.map.test remapped.test"));
 
   std::unique_ptr<HostResolver::ResolveHostRequest> request =
@@ -134,12 +134,12 @@
   base::test::TaskEnvironment task_environment;
 
   // Create a mock host resolver, with specific hostname to IP mappings.
-  std::unique_ptr<MockHostResolver> resolver_impl(new MockHostResolver());
+  auto resolver_impl = std::make_unique<MockHostResolver>();
   resolver_impl->rules()->AddRule("host.test", "192.168.1.22");
 
   // Create a remapped resolver that uses `resolver_impl`.
-  std::unique_ptr<MappedHostResolver> resolver(
-      new MappedHostResolver(std::move(resolver_impl)));
+  auto resolver =
+      std::make_unique<MappedHostResolver>(std::move(resolver_impl));
   ASSERT_TRUE(resolver->AddRuleFromString("MAP host.test [1234:5678::000A]"));
 
   IPAddress expected_address;
@@ -163,12 +163,12 @@
   base::test::TaskEnvironment task_environment;
 
   // Create a mock host resolver, with specific hostname to IP mappings.
-  std::unique_ptr<MockHostResolver> resolver_impl(new MockHostResolver());
+  auto resolver_impl = std::make_unique<MockHostResolver>();
   resolver_impl->rules()->AddRule("remapped.test", "192.168.1.23");
 
   // Create a remapped resolver that uses `resolver_impl`.
-  std::unique_ptr<MappedHostResolver> resolver(
-      new MappedHostResolver(std::move(resolver_impl)));
+  auto resolver =
+      std::make_unique<MappedHostResolver>(std::move(resolver_impl));
   ASSERT_TRUE(resolver->AddRuleFromString("MAP host.test reMapped.TEST"));
 
   std::unique_ptr<HostResolver::ResolveHostRequest> request =
@@ -189,12 +189,12 @@
   base::test::TaskEnvironment task_environment;
 
   // Create a mock host resolver, with specific hostname to IP mappings.
-  std::unique_ptr<MockHostResolver> resolver_impl(new MockHostResolver());
+  auto resolver_impl = std::make_unique<MockHostResolver>();
   resolver_impl->rules()->AddRule("remapped.test", "192.168.1.24");
 
   // Create a remapped resolver that uses `resolver_impl`.
-  std::unique_ptr<MappedHostResolver> resolver(
-      new MappedHostResolver(std::move(resolver_impl)));
+  auto resolver =
+      std::make_unique<MappedHostResolver>(std::move(resolver_impl));
   ASSERT_TRUE(resolver->AddRuleFromString("MAP host.test remapped.test:258"));
 
   std::unique_ptr<HostResolver::ResolveHostRequest> request =
@@ -215,12 +215,12 @@
   base::test::TaskEnvironment task_environment;
 
   // Create a mock host resolver, with specific hostname to IP mappings.
-  std::unique_ptr<MockHostResolver> resolver_impl(new MockHostResolver());
+  auto resolver_impl = std::make_unique<MockHostResolver>();
   resolver_impl->rules()->AddRule("unmapped.test", "192.168.1.23");
 
   // Create a remapped resolver that uses `resolver_impl`.
-  std::unique_ptr<MappedHostResolver> resolver(
-      new MappedHostResolver(std::move(resolver_impl)));
+  auto resolver =
+      std::make_unique<MappedHostResolver>(std::move(resolver_impl));
 
   std::unique_ptr<HostResolver::ResolveHostRequest> request =
       resolver->CreateRequest(
@@ -241,13 +241,13 @@
   base::test::TaskEnvironment task_environment;
 
   // Create a mock host resolver, with specific hostname to IP mappings.
-  std::unique_ptr<MockHostResolver> resolver_impl(new MockHostResolver());
+  auto resolver_impl = std::make_unique<MockHostResolver>();
   resolver_impl->rules()->AddRule("baz", "192.168.1.5");
   resolver_impl->rules()->AddRule("www.google.com", "192.168.1.3");
 
   // Create a remapped resolver that uses |resolver_impl|.
-  std::unique_ptr<MappedHostResolver> resolver(
-      new MappedHostResolver(std::move(resolver_impl)));
+  auto resolver =
+      std::make_unique<MappedHostResolver>(std::move(resolver_impl));
 
   TestCompletionCallback callback;
 
@@ -284,13 +284,13 @@
   base::test::TaskEnvironment task_environment;
 
   // Create a mock host resolver, with specific hostname to IP mappings.
-  std::unique_ptr<MockHostResolver> resolver_impl(new MockHostResolver());
+  auto resolver_impl = std::make_unique<MockHostResolver>();
   resolver_impl->rules()->AddRule("baz", "192.168.1.7");
   resolver_impl->rules()->AddRule("bar", "192.168.1.9");
 
   // Create a remapped resolver that uses |resolver_impl|.
-  std::unique_ptr<MappedHostResolver> resolver(
-      new MappedHostResolver(std::move(resolver_impl)));
+  auto resolver =
+      std::make_unique<MappedHostResolver>(std::move(resolver_impl));
 
   TestCompletionCallback callback;
 
@@ -324,8 +324,8 @@
 TEST(MappedHostResolverTest, ParseInvalidRules) {
   base::test::TaskEnvironment task_environment;
 
-  std::unique_ptr<MappedHostResolver> resolver(
-      new MappedHostResolver(std::unique_ptr<HostResolver>()));
+  auto resolver =
+      std::make_unique<MappedHostResolver>(std::unique_ptr<HostResolver>());
 
   EXPECT_FALSE(resolver->AddRuleFromString("xyz"));
   EXPECT_FALSE(resolver->AddRuleFromString(std::string()));
@@ -342,11 +342,11 @@
   base::test::TaskEnvironment task_environment;
 
   // Outstanding request.
-  std::unique_ptr<MockHostResolver> resolver_impl(new MockHostResolver());
+  auto resolver_impl = std::make_unique<MockHostResolver>();
   resolver_impl->rules()->AddRule("*", "192.168.1.5");
 
-  std::unique_ptr<MappedHostResolver> resolver(
-      new MappedHostResolver(std::move(resolver_impl)));
+  auto resolver =
+      std::make_unique<MappedHostResolver>(std::move(resolver_impl));
 
   // Remap *.google.com to resolving failures.
   EXPECT_TRUE(resolver->AddRuleFromString("MAP *.google.com ~NOTFOUND"));
@@ -377,12 +377,12 @@
   base::test::TaskEnvironment task_environment;
 
   // Create a mock host resolver, with specific hostname to IP mappings.
-  std::unique_ptr<MockHostResolver> resolver_impl(new MockHostResolver());
+  auto resolver_impl = std::make_unique<MockHostResolver>();
   resolver_impl->rules()->AddRule("host.test", "192.168.1.25");
 
   // Create a remapped resolver that uses `resolver_impl`.
-  std::unique_ptr<MappedHostResolver> resolver(
-      new MappedHostResolver(std::move(resolver_impl)));
+  auto resolver =
+      std::make_unique<MappedHostResolver>(std::move(resolver_impl));
   ASSERT_TRUE(resolver->AddRuleFromString("MAP host.test ~NOTFOUND"));
 
   std::unique_ptr<HostResolver::ResolveHostRequest> request =
diff --git a/net/dns/mdns_client.cc b/net/dns/mdns_client.cc
index b7749d3..00f7b03 100644
--- a/net/dns/mdns_client.cc
+++ b/net/dns/mdns_client.cc
@@ -36,12 +36,12 @@
 
 // static
 std::unique_ptr<MDnsSocketFactory> MDnsSocketFactory::CreateDefault() {
-  return std::unique_ptr<MDnsSocketFactory>(new MDnsSocketFactoryImpl);
+  return std::make_unique<MDnsSocketFactoryImpl>();
 }
 
 // static
 std::unique_ptr<MDnsClient> MDnsClient::CreateDefault() {
-  return std::unique_ptr<MDnsClient>(new MDnsClientImpl());
+  return std::make_unique<MDnsClientImpl>();
 }
 
 InterfaceIndexFamilyList GetMDnsInterfacesToBind() {
@@ -67,8 +67,7 @@
     AddressFamily address_family,
     uint32_t interface_index,
     NetLog* net_log) {
-  std::unique_ptr<DatagramServerSocket> socket(
-      new UDPServerSocket(net_log, NetLogSource()));
+  auto socket = std::make_unique<UDPServerSocket>(net_log, NetLogSource());
 
   int rv = Bind(address_family, interface_index, socket.get());
   if (rv != OK) {
diff --git a/net/dns/mdns_client_impl.cc b/net/dns/mdns_client_impl.cc
index f4c835e..ec155a7 100644
--- a/net/dns/mdns_client_impl.cc
+++ b/net/dns/mdns_client_impl.cc
@@ -440,7 +440,7 @@
 
 MDnsClientImpl::MDnsClientImpl()
     : clock_(base::DefaultClock::GetInstance()),
-      cleanup_timer_(new base::OneShotTimer()) {}
+      cleanup_timer_(std::make_unique<base::OneShotTimer>()) {}
 
 MDnsClientImpl::MDnsClientImpl(base::Clock* clock,
                                std::unique_ptr<base::OneShotTimer> timer)
@@ -473,8 +473,8 @@
     uint16_t rrtype,
     const std::string& name,
     MDnsListener::Delegate* delegate) {
-  return std::unique_ptr<MDnsListener>(
-      new MDnsListenerImpl(rrtype, name, clock_, delegate, this));
+  return std::make_unique<MDnsListenerImpl>(rrtype, name, clock_, delegate,
+                                            this);
 }
 
 std::unique_ptr<MDnsTransaction> MDnsClientImpl::CreateTransaction(
@@ -482,8 +482,8 @@
     const std::string& name,
     int flags,
     const MDnsTransaction::ResultCallback& callback) {
-  return std::unique_ptr<MDnsTransaction>(
-      new MDnsTransactionImpl(rrtype, name, flags, callback, this));
+  return std::make_unique<MDnsTransactionImpl>(rrtype, name, flags, callback,
+                                               this);
 }
 
 MDnsListenerImpl::MDnsListenerImpl(uint16_t rrtype,
diff --git a/net/dns/mock_host_resolver.cc b/net/dns/mock_host_resolver.cc
index 03500cf..6c33aa0c 100644
--- a/net/dns/mock_host_resolver.cc
+++ b/net/dns/mock_host_resolver.cc
@@ -1364,7 +1364,7 @@
   rules_.push_back(fixed_rule);
 }
 
-RuleBasedHostResolverProc* CreateCatchAllHostResolverProc() {
+scoped_refptr<RuleBasedHostResolverProc> CreateCatchAllHostResolverProc() {
   RuleBasedHostResolverProc* catchall =
       new RuleBasedHostResolverProc(/*previous=*/nullptr,
                                     /*allow_fallback=*/false);
@@ -1372,7 +1372,8 @@
   catchall->AddIPLiteralRule("*", "127.0.0.1", "localhost");
 
   // Next add a rules-based layer that the test controls.
-  return new RuleBasedHostResolverProc(catchall, /*allow_fallback=*/false);
+  return base::MakeRefCounted<RuleBasedHostResolverProc>(
+      catchall, /*allow_fallback=*/false);
 }
 
 //-----------------------------------------------------------------------------
diff --git a/net/dns/mock_host_resolver.h b/net/dns/mock_host_resolver.h
index 06f57b1..37aec04 100644
--- a/net/dns/mock_host_resolver.h
+++ b/net/dns/mock_host_resolver.h
@@ -630,7 +630,7 @@
 };
 
 // Create rules that map all requests to localhost.
-RuleBasedHostResolverProc* CreateCatchAllHostResolverProc();
+scoped_refptr<RuleBasedHostResolverProc> CreateCatchAllHostResolverProc();
 
 // HangingHostResolver never completes its |Resolve| request. As LOCAL_ONLY
 // requests are not allowed to complete asynchronously, they will always result
diff --git a/net/dns/mock_mdns_socket_factory.cc b/net/dns/mock_mdns_socket_factory.cc
index 175ad137..560a6e7 100644
--- a/net/dns/mock_mdns_socket_factory.cc
+++ b/net/dns/mock_mdns_socket_factory.cc
@@ -80,8 +80,9 @@
 void MockMDnsSocketFactory::CreateSocket(
     AddressFamily address_family,
     std::vector<std::unique_ptr<DatagramServerSocket>>* sockets) {
-  std::unique_ptr<testing::NiceMock<MockMDnsDatagramServerSocket>> new_socket(
-      new testing::NiceMock<MockMDnsDatagramServerSocket>(address_family));
+  auto new_socket =
+      std::make_unique<testing::NiceMock<MockMDnsDatagramServerSocket>>(
+          address_family);
 
   ON_CALL(*new_socket, SendToInternal(_, _, _))
       .WillByDefault(Invoke(
diff --git a/net/dns/record_parsed.cc b/net/dns/record_parsed.cc
index acd6a40..f14b170 100644
--- a/net/dns/record_parsed.cc
+++ b/net/dns/record_parsed.cc
@@ -7,6 +7,7 @@
 #include <utility>
 
 #include "base/logging.h"
+#include "base/memory/ptr_util.h"
 #include "net/dns/dns_response.h"
 #include "net/dns/https_record_rdata.h"
 #include "net/dns/record_rdata.h"
@@ -82,9 +83,9 @@
   if (!rdata.get() && !unrecognized_type)
     return nullptr;
 
-  return std::unique_ptr<const RecordParsed>(
-      new RecordParsed(record.name, record.type, record.klass, record.ttl,
-                       std::move(rdata), time_created));
+  return base::WrapUnique(new RecordParsed(record.name, record.type,
+                                           record.klass, record.ttl,
+                                           std::move(rdata), time_created));
 }
 
 bool RecordParsed::IsEqual(const RecordParsed* other, bool is_mdns) const {
diff --git a/net/dns/resolve_context.cc b/net/dns/resolve_context.cc
index 52ffae34..1f26425 100644
--- a/net/dns/resolve_context.cc
+++ b/net/dns/resolve_context.cc
@@ -142,10 +142,9 @@
   // Make the iterator even if the session differs. The first call to the member
   // functions will catch the out of date session.
 
-  std::unique_ptr<DnsServerIterator> itr(new DohDnsServerIterator(
+  return std::make_unique<DohDnsServerIterator>(
       doh_server_stats_.size(), FirstServerIndex(true, session),
-      config.doh_attempts, config.attempts, mode, this, session));
-  return itr;
+      config.doh_attempts, config.attempts, mode, this, session);
 }
 
 std::unique_ptr<DnsServerIterator> ResolveContext::GetClassicDnsIterator(
@@ -154,10 +153,9 @@
   // Make the iterator even if the session differs. The first call to the member
   // functions will catch the out of date session.
 
-  std::unique_ptr<DnsServerIterator> itr(new ClassicDnsServerIterator(
+  return std::make_unique<ClassicDnsServerIterator>(
       config.nameservers.size(), FirstServerIndex(false, session),
-      config.attempts, config.attempts, this, session));
-  return itr;
+      config.attempts, config.attempts, this, session);
 }
 
 bool ResolveContext::GetDohServerAvailability(size_t doh_server_index,
diff --git a/net/extras/sqlite/sqlite_persistent_cookie_store.cc b/net/extras/sqlite/sqlite_persistent_cookie_store.cc
index 0db1a8e..391d6b4 100644
--- a/net/extras/sqlite/sqlite_persistent_cookie_store.cc
+++ b/net/extras/sqlite/sqlite_persistent_cookie_store.cc
@@ -1719,12 +1719,11 @@
     const scoped_refptr<base::SequencedTaskRunner>& background_task_runner,
     bool restore_old_session_cookies,
     CookieCryptoDelegate* crypto_delegate)
-    : backend_(new Backend(path,
-                           client_task_runner,
-                           background_task_runner,
-                           restore_old_session_cookies,
-                           crypto_delegate)) {
-}
+    : backend_(base::MakeRefCounted<Backend>(path,
+                                             client_task_runner,
+                                             background_task_runner,
+                                             restore_old_session_cookies,
+                                             crypto_delegate)) {}
 
 void SQLitePersistentCookieStore::DeleteAllInList(
     const std::list<CookieOrigin>& cookies) {
diff --git a/net/extras/sqlite/sqlite_persistent_cookie_store_perftest.cc b/net/extras/sqlite/sqlite_persistent_cookie_store_perftest.cc
index f4e67841..bd9ca68 100644
--- a/net/extras/sqlite/sqlite_persistent_cookie_store_perftest.cc
+++ b/net/extras/sqlite/sqlite_persistent_cookie_store_perftest.cc
@@ -94,7 +94,7 @@
 
   void SetUp() override {
     ASSERT_TRUE(temp_dir_.CreateUniqueTempDir());
-    store_ = new SQLitePersistentCookieStore(
+    store_ = base::MakeRefCounted<SQLitePersistentCookieStore>(
         temp_dir_.GetPath().Append(cookie_filename), client_task_runner_,
         background_task_runner_, false, nullptr);
     std::vector<CanonicalCookie*> cookies;
@@ -113,7 +113,7 @@
     // Flush ThreadPool tasks, causing pending commits to run.
     task_environment_.RunUntilIdle();
 
-    store_ = new SQLitePersistentCookieStore(
+    store_ = base::MakeRefCounted<SQLitePersistentCookieStore>(
         temp_dir_.GetPath().Append(cookie_filename), client_task_runner_,
         background_task_runner_, false, nullptr);
   }
diff --git a/net/extras/sqlite/sqlite_persistent_cookie_store_unittest.cc b/net/extras/sqlite/sqlite_persistent_cookie_store_unittest.cc
index 794896816..f71881f 100644
--- a/net/extras/sqlite/sqlite_persistent_cookie_store_unittest.cc
+++ b/net/extras/sqlite/sqlite_persistent_cookie_store_unittest.cc
@@ -149,7 +149,7 @@
     if (crypt_cookies)
       cookie_crypto_delegate_ = std::make_unique<CookieCryptor>();
 
-    store_ = new SQLitePersistentCookieStore(
+    store_ = base::MakeRefCounted<SQLitePersistentCookieStore>(
         temp_dir_.GetPath().Append(kCookieFilename),
         use_current_thread ? base::ThreadTaskRunnerHandle::Get()
                            : client_task_runner_,
@@ -321,7 +321,7 @@
 
   // Load the store a second time. Before the store finishes loading, add a
   // transient cookie and flush it to disk.
-  store_ = new SQLitePersistentCookieStore(
+  store_ = base::MakeRefCounted<SQLitePersistentCookieStore>(
       temp_dir_.GetPath().Append(kCookieFilename), client_task_runner_,
       background_task_runner_, false, nullptr);
 
@@ -356,7 +356,7 @@
   // Load the store a third time, this time restoring session cookies. The
   // store should contain exactly 4 cookies: the 3 persistent, and "c.com",
   // which was added during the second cookie store load.
-  store_ = new SQLitePersistentCookieStore(
+  store_ = base::MakeRefCounted<SQLitePersistentCookieStore>(
       temp_dir_.GetPath().Append(kCookieFilename), client_task_runner_,
       background_task_runner_, true, nullptr);
   store_->Load(base::BindOnce(&SQLitePersistentCookieStoreTest::OnLoaded,
diff --git a/net/extras/sqlite/sqlite_persistent_reporting_and_nel_store.cc b/net/extras/sqlite/sqlite_persistent_reporting_and_nel_store.cc
index e1fa9d9..b1fe702a 100644
--- a/net/extras/sqlite/sqlite_persistent_reporting_and_nel_store.cc
+++ b/net/extras/sqlite/sqlite_persistent_reporting_and_nel_store.cc
@@ -1560,7 +1560,9 @@
     const base::FilePath& path,
     const scoped_refptr<base::SequencedTaskRunner>& client_task_runner,
     const scoped_refptr<base::SequencedTaskRunner>& background_task_runner)
-    : backend_(new Backend(path, client_task_runner, background_task_runner)) {}
+    : backend_(base::MakeRefCounted<Backend>(path,
+                                             client_task_runner,
+                                             background_task_runner)) {}
 
 SQLitePersistentReportingAndNelStore::~SQLitePersistentReportingAndNelStore() {
   backend_->Close();
diff --git a/net/filter/brotli_source_stream_fuzzer.cc b/net/filter/brotli_source_stream_fuzzer.cc
index e721ee1e..1f83f62 100644
--- a/net/filter/brotli_source_stream_fuzzer.cc
+++ b/net/filter/brotli_source_stream_fuzzer.cc
@@ -18,8 +18,8 @@
 extern "C" int LLVMFuzzerTestOneInput(const uint8_t* data, size_t size) {
   net::TestCompletionCallback callback;
   FuzzedDataProvider data_provider(data, size);
-  std::unique_ptr<net::FuzzedSourceStream> fuzzed_source_stream(
-      new net::FuzzedSourceStream(&data_provider));
+  auto fuzzed_source_stream =
+      std::make_unique<net::FuzzedSourceStream>(&data_provider);
   std::unique_ptr<net::SourceStream> brotli_stream =
       net::CreateBrotliSourceStream(std::move(fuzzed_source_stream));
   while (true) {
diff --git a/net/filter/brotli_source_stream_unittest.cc b/net/filter/brotli_source_stream_unittest.cc
index 817202b..9f84719 100644
--- a/net/filter/brotli_source_stream_unittest.cc
+++ b/net/filter/brotli_source_stream_unittest.cc
@@ -51,7 +51,7 @@
     ASSERT_TRUE(base::ReadFileToString(encoded_file_path, &encoded_buffer_));
     ASSERT_GE(kDefaultBufferSize, encoded_buffer_.size());
 
-    std::unique_ptr<MockSourceStream> source(new MockSourceStream);
+    auto source = std::make_unique<MockSourceStream>();
     source_ = source.get();
     brotli_stream_ = CreateBrotliSourceStream(std::move(source));
   }
diff --git a/net/filter/filter_source_stream_unittest.cc b/net/filter/filter_source_stream_unittest.cc
index 8c1749f..70679cd 100644
--- a/net/filter/filter_source_stream_unittest.cc
+++ b/net/filter/filter_source_stream_unittest.cc
@@ -257,7 +257,7 @@
 // upstream. In this case, FilterSourceStream should continue reading from
 // upstream to complete filtering.
 TEST_P(FilterSourceStreamTest, FilterDataReturnNoBytesExceptLast) {
-  std::unique_ptr<MockSourceStream> source(new MockSourceStream);
+  auto source = std::make_unique<MockSourceStream>();
   std::string input("hello, world!");
   size_t read_size = 2;
   size_t num_reads = 0;
@@ -293,7 +293,7 @@
 // Tests that FilterData() returns 0 byte read because the upstream gives an
 // EOF.
 TEST_P(FilterSourceStreamTest, FilterDataReturnNoByte) {
-  std::unique_ptr<MockSourceStream> source(new MockSourceStream);
+  auto source = std::make_unique<MockSourceStream>();
   std::string input;
   source->AddReadResult(input.data(), 0, OK, GetParam());
   MockSourceStream* mock_stream = source.get();
@@ -310,7 +310,7 @@
 // Tests that FilterData() returns 0 byte filtered even though the upstream
 // produces data.
 TEST_P(FilterSourceStreamTest, FilterDataOutputNoData) {
-  std::unique_ptr<MockSourceStream> source(new MockSourceStream);
+  auto source = std::make_unique<MockSourceStream>();
   std::string input = "hello, world!";
   size_t read_size = 2;
   size_t num_reads = 0;
@@ -339,7 +339,7 @@
 // Tests that FilterData() returns non-zero bytes because the upstream
 // returns data.
 TEST_P(FilterSourceStreamTest, FilterDataReturnData) {
-  std::unique_ptr<MockSourceStream> source(new MockSourceStream);
+  auto source = std::make_unique<MockSourceStream>();
   std::string input = "hello, world!";
   size_t read_size = 2;
   // Add a sequence of small reads.
@@ -371,7 +371,7 @@
 
 // Tests that FilterData() returns more data than what it consumed.
 TEST_P(FilterSourceStreamTest, FilterDataReturnMoreData) {
-  std::unique_ptr<MockSourceStream> source(new MockSourceStream);
+  auto source = std::make_unique<MockSourceStream>();
   std::string input = "hello, world!";
   size_t read_size = 2;
   // Add a sequence of small reads.
@@ -405,7 +405,7 @@
 // Tests that FilterData() returns non-zero bytes and output buffer size is
 // smaller than the number of bytes read from the upstream.
 TEST_P(FilterSourceStreamTest, FilterDataOutputSpace) {
-  std::unique_ptr<MockSourceStream> source(new MockSourceStream);
+  auto source = std::make_unique<MockSourceStream>();
   std::string input = "hello, world!";
   size_t read_size = 2;
   // Add a sequence of small reads.
@@ -441,7 +441,7 @@
 // Tests that FilterData() returns an error code, which is then surfaced as
 // the result of calling Read().
 TEST_P(FilterSourceStreamTest, FilterDataReturnError) {
-  std::unique_ptr<MockSourceStream> source(new MockSourceStream);
+  auto source = std::make_unique<MockSourceStream>();
   std::string input;
   source->AddReadResult(input.data(), 0, OK, GetParam());
   scoped_refptr<IOBufferWithSize> output_buffer =
@@ -460,21 +460,22 @@
 }
 
 TEST_P(FilterSourceStreamTest, FilterChaining) {
-  std::unique_ptr<MockSourceStream> source(new MockSourceStream);
+  auto source = std::make_unique<MockSourceStream>();
   std::string input = "hello, world!";
   source->AddReadResult(input.data(), input.length(), OK, GetParam());
   source->AddReadResult(input.data(), 0, OK, GetParam());  // EOF
 
   MockSourceStream* mock_stream = source.get();
-  std::unique_ptr<PassThroughFilterSourceStream> pass_through_source(
-      new PassThroughFilterSourceStream(std::move(source)));
+  auto pass_through_source =
+      std::make_unique<PassThroughFilterSourceStream>(std::move(source));
   pass_through_source->set_type_string("FIRST_PASS_THROUGH");
-  std::unique_ptr<NeedsAllInputFilterSourceStream> needs_all_input_source(
-      new NeedsAllInputFilterSourceStream(std::move(pass_through_source),
-                                          input.length()));
+  auto needs_all_input_source =
+      std::make_unique<NeedsAllInputFilterSourceStream>(
+          std::move(pass_through_source), input.length());
   needs_all_input_source->set_type_string("NEEDS_ALL");
-  std::unique_ptr<PassThroughFilterSourceStream> second_pass_through_source(
-      new PassThroughFilterSourceStream(std::move(needs_all_input_source)));
+  auto second_pass_through_source =
+      std::make_unique<PassThroughFilterSourceStream>(
+          std::move(needs_all_input_source));
   second_pass_through_source->set_type_string("SECOND_PASS_THROUGH");
   scoped_refptr<IOBufferWithSize> output_buffer =
       base::MakeRefCounted<IOBufferWithSize>(kDefaultBufferSize);
@@ -500,7 +501,7 @@
 // Tests that FilterData() returns multiple times for a single MockStream
 // read, because there is not enough output space.
 TEST_P(FilterSourceStreamTest, OutputSpaceForOneRead) {
-  std::unique_ptr<MockSourceStream> source(new MockSourceStream);
+  auto source = std::make_unique<MockSourceStream>();
   std::string input = "hello, world!";
   source->AddReadResult(input.data(), input.length(), OK, GetParam());
   // Add a 0 byte read to signal EOF.
@@ -530,7 +531,7 @@
 // Tests that FilterData() returns multiple times for a single MockStream
 // read, because the filter returns one byte at a time.
 TEST_P(FilterSourceStreamTest, ThrottleSourceStream) {
-  std::unique_ptr<MockSourceStream> source(new MockSourceStream);
+  auto source = std::make_unique<MockSourceStream>();
   std::string input = "hello, world!";
   source->AddReadResult(input.data(), input.length(), OK, GetParam());
   // Add a 0 byte read to signal EOF.
diff --git a/net/filter/gzip_source_stream_unittest.cc b/net/filter/gzip_source_stream_unittest.cc
index 0fba4bd..b45ca60 100644
--- a/net/filter/gzip_source_stream_unittest.cc
+++ b/net/filter/gzip_source_stream_unittest.cc
@@ -72,7 +72,7 @@
                  &encoded_data_len_, type != SourceStream::TYPE_DEFLATE);
 
     output_buffer_ = base::MakeRefCounted<IOBuffer>(output_buffer_size_);
-    std::unique_ptr<MockSourceStream> source(new MockSourceStream());
+    auto source = std::make_unique<MockSourceStream>();
     if (GetParam().read_result_type == ReadResultType::ONE_BYTE_AT_A_TIME)
       source->set_read_one_byte_at_a_time(true);
     source_ = source.get();
diff --git a/net/http/bidirectional_stream_unittest.cc b/net/http/bidirectional_stream_unittest.cc
index 52dddb8f6..67e50f6 100644
--- a/net/http/bidirectional_stream_unittest.cc
+++ b/net/http/bidirectional_stream_unittest.cc
@@ -452,15 +452,14 @@
 };
 
 TEST_F(BidirectionalStreamTest, CreateInsecureStream) {
-  std::unique_ptr<BidirectionalStreamRequestInfo> request_info(
-      new BidirectionalStreamRequestInfo);
+  auto request_info = std::make_unique<BidirectionalStreamRequestInfo>();
   request_info->method = "GET";
   request_info->url = GURL("http://www.example.org/");
 
   TestDelegateBase delegate(nullptr, 0);
-  std::unique_ptr<HttpNetworkSession> session(new HttpNetworkSession(
+  auto session = std::make_unique<HttpNetworkSession>(
       SpdySessionDependencies::CreateSessionParams(&session_deps_),
-      SpdySessionDependencies::CreateSessionContext(&session_deps_)));
+      SpdySessionDependencies::CreateSessionContext(&session_deps_));
   delegate.SetRunUntilCompletion(true);
   delegate.Start(std::move(request_info), session.get());
 
@@ -485,16 +484,15 @@
   };
   InitSession(reads, writes, SocketTag());
 
-  std::unique_ptr<BidirectionalStreamRequestInfo> request_info(
-      new BidirectionalStreamRequestInfo);
+  auto request_info = std::make_unique<BidirectionalStreamRequestInfo>();
   request_info->method = "POST";
   request_info->url = default_url_;
   request_info->extra_headers.SetHeader(net::HttpRequestHeaders::kContentLength,
                                         base::NumberToString(kBodyDataSize));
   scoped_refptr<IOBuffer> read_buffer =
       base::MakeRefCounted<IOBuffer>(kReadBufferSize);
-  std::unique_ptr<TestDelegateBase> delegate(
-      new TestDelegateBase(read_buffer.get(), kReadBufferSize));
+  auto delegate =
+      std::make_unique<TestDelegateBase>(read_buffer.get(), kReadBufferSize);
   delegate->Start(std::move(request_info), http_session_.get());
   sequenced_data_->RunUntilPaused();
 
@@ -535,13 +533,11 @@
                       MockRead(ASYNC, 0, 6)};
   InitSession(reads, writes, SocketTag());
 
-  std::unique_ptr<BidirectionalStreamRequestInfo> request_info(
-      new BidirectionalStreamRequestInfo);
+  auto request_info = std::make_unique<BidirectionalStreamRequestInfo>();
   request_info->method = "GET";
   request_info->url = default_url_;
   request_info->end_stream_on_headers = true;
-  std::unique_ptr<BidirectionalStreamRequestInfo> request_info2(
-      new BidirectionalStreamRequestInfo);
+  auto request_info2 = std::make_unique<BidirectionalStreamRequestInfo>();
   request_info2->method = "GET";
   request_info2->url = default_url_;
   request_info2->end_stream_on_headers = true;
@@ -550,10 +546,10 @@
       base::MakeRefCounted<IOBuffer>(kReadBufferSize);
   scoped_refptr<IOBuffer> read_buffer2 =
       base::MakeRefCounted<IOBuffer>(kReadBufferSize);
-  std::unique_ptr<TestDelegateBase> delegate(
-      new TestDelegateBase(read_buffer.get(), kReadBufferSize));
-  std::unique_ptr<TestDelegateBase> delegate2(
-      new TestDelegateBase(read_buffer2.get(), kReadBufferSize));
+  auto delegate =
+      std::make_unique<TestDelegateBase>(read_buffer.get(), kReadBufferSize);
+  auto delegate2 =
+      std::make_unique<TestDelegateBase>(read_buffer2.get(), kReadBufferSize);
   delegate->Start(std::move(request_info), http_session_.get());
   delegate2->Start(std::move(request_info2), http_session_.get());
   delegate->SetRunUntilCompletion(true);
@@ -574,15 +570,14 @@
 // without waiting for the OnFailed task to be executed.
 TEST_F(BidirectionalStreamTest,
        CreateInsecureStreamAndDestroyStreamRightAfter) {
-  std::unique_ptr<BidirectionalStreamRequestInfo> request_info(
-      new BidirectionalStreamRequestInfo);
+  auto request_info = std::make_unique<BidirectionalStreamRequestInfo>();
   request_info->method = "GET";
   request_info->url = GURL("http://www.example.org/");
 
-  std::unique_ptr<TestDelegateBase> delegate(new TestDelegateBase(nullptr, 0));
-  std::unique_ptr<HttpNetworkSession> session(new HttpNetworkSession(
+  auto delegate = std::make_unique<TestDelegateBase>(nullptr, 0);
+  auto session = std::make_unique<HttpNetworkSession>(
       SpdySessionDependencies::CreateSessionParams(&session_deps_),
-      SpdySessionDependencies::CreateSessionContext(&session_deps_)));
+      SpdySessionDependencies::CreateSessionContext(&session_deps_));
   delegate->Start(std::move(request_info), session.get());
   // Reset stream right before the OnFailed task is executed.
   delegate.reset();
@@ -629,8 +624,7 @@
                      PRIVACY_MODE_DISABLED,
                      SpdySessionKey::IsProxySession::kFalse, SocketTag(),
                      NetworkIsolationKey(), SecureDnsPolicy::kAllow);
-  std::unique_ptr<BidirectionalStreamRequestInfo> request_info(
-      new BidirectionalStreamRequestInfo);
+  auto request_info = std::make_unique<BidirectionalStreamRequestInfo>();
   request_info->method = "GET";
   request_info->url = default_url_;
   request_info->end_stream_on_headers = true;
@@ -638,8 +632,8 @@
 
   scoped_refptr<IOBuffer> read_buffer =
       base::MakeRefCounted<IOBuffer>(kReadBufferSize);
-  std::unique_ptr<TestDelegateBase> delegate(
-      new TestDelegateBase(read_buffer.get(), kReadBufferSize));
+  auto delegate =
+      std::make_unique<TestDelegateBase>(read_buffer.get(), kReadBufferSize);
 
   delegate->SetRunUntilCompletion(true);
   delegate->Start(std::move(request_info), http_session_.get());
@@ -690,8 +684,7 @@
 
   InitSession(reads, writes, SocketTag());
 
-  std::unique_ptr<BidirectionalStreamRequestInfo> request_info(
-      new BidirectionalStreamRequestInfo);
+  auto request_info = std::make_unique<BidirectionalStreamRequestInfo>();
   request_info->method = "GET";
   request_info->url = default_url_;
   request_info->end_stream_on_headers = true;
@@ -702,8 +695,8 @@
   // Create a MockTimer. Retain a raw pointer since the underlying
   // BidirectionalStreamImpl owns it.
   MockTimer* timer = new MockTimer();
-  std::unique_ptr<TestDelegateBase> delegate(new TestDelegateBase(
-      read_buffer.get(), kReadBufferSize, base::WrapUnique(timer)));
+  auto delegate = std::make_unique<TestDelegateBase>(
+      read_buffer.get(), kReadBufferSize, base::WrapUnique(timer));
   delegate->set_do_not_start_read(true);
 
   delegate->Start(std::move(request_info), http_session_.get());
@@ -776,8 +769,7 @@
 
   InitSession(reads, writes, SocketTag());
 
-  std::unique_ptr<BidirectionalStreamRequestInfo> request_info(
-      new BidirectionalStreamRequestInfo);
+  auto request_info = std::make_unique<BidirectionalStreamRequestInfo>();
   request_info->method = "POST";
   request_info->url = default_url_;
   request_info->priority = LOWEST;
@@ -788,8 +780,8 @@
   scoped_refptr<IOBuffer> read_buffer =
       base::MakeRefCounted<IOBuffer>(kReadBufferSize);
   MockTimer* timer = new MockTimer();
-  std::unique_ptr<TestDelegateBase> delegate(new TestDelegateBase(
-      read_buffer.get(), kReadBufferSize, base::WrapUnique(timer)));
+  auto delegate = std::make_unique<TestDelegateBase>(
+      read_buffer.get(), kReadBufferSize, base::WrapUnique(timer));
   delegate->set_do_not_start_read(true);
   delegate->Start(std::move(request_info), http_session_.get());
   // Send the request and receive response headers.
@@ -913,8 +905,7 @@
 
   InitSession(reads, writes, SocketTag());
 
-  std::unique_ptr<BidirectionalStreamRequestInfo> request_info(
-      new BidirectionalStreamRequestInfo);
+  auto request_info = std::make_unique<BidirectionalStreamRequestInfo>();
   request_info->method = "POST";
   request_info->url = default_url_;
   request_info->priority = LOWEST;
@@ -925,8 +916,8 @@
   scoped_refptr<IOBuffer> read_buffer =
       base::MakeRefCounted<IOBuffer>(kReadBufferSize);
   MockTimer* timer = new MockTimer();
-  std::unique_ptr<TestDelegateBase> delegate(new TestDelegateBase(
-      read_buffer.get(), kReadBufferSize, base::WrapUnique(timer)));
+  auto delegate = std::make_unique<TestDelegateBase>(
+      read_buffer.get(), kReadBufferSize, base::WrapUnique(timer));
   delegate->set_do_not_start_read(true);
   delegate->Start(std::move(request_info), http_session_.get());
   // Send the request and receive response headers.
@@ -1004,8 +995,7 @@
 
   InitSession(reads, writes, SocketTag());
 
-  std::unique_ptr<BidirectionalStreamRequestInfo> request_info(
-      new BidirectionalStreamRequestInfo);
+  auto request_info = std::make_unique<BidirectionalStreamRequestInfo>();
   request_info->method = "POST";
   request_info->url = default_url_;
   request_info->priority = LOWEST;
@@ -1016,8 +1006,8 @@
   scoped_refptr<IOBuffer> read_buffer =
       base::MakeRefCounted<IOBuffer>(kReadBufferSize);
   MockTimer* timer = new MockTimer();
-  std::unique_ptr<TestDelegateBase> delegate(new TestDelegateBase(
-      read_buffer.get(), kReadBufferSize, base::WrapUnique(timer)));
+  auto delegate = std::make_unique<TestDelegateBase>(
+      read_buffer.get(), kReadBufferSize, base::WrapUnique(timer));
   delegate->set_do_not_start_read(true);
   TestCompletionCallback callback;
   delegate->Start(std::move(request_info), http_session_.get(),
@@ -1097,8 +1087,7 @@
 
   InitSession(reads, writes, SocketTag());
 
-  std::unique_ptr<BidirectionalStreamRequestInfo> request_info(
-      new BidirectionalStreamRequestInfo);
+  auto request_info = std::make_unique<BidirectionalStreamRequestInfo>();
   request_info->method = "GET";
   request_info->url = default_url_;
   request_info->priority = LOWEST;
@@ -1107,8 +1096,8 @@
   scoped_refptr<IOBuffer> read_buffer =
       base::MakeRefCounted<IOBuffer>(kReadBufferSize);
   MockTimer* timer = new MockTimer();
-  std::unique_ptr<TestDelegateBase> delegate(new TestDelegateBase(
-      read_buffer.get(), kReadBufferSize, base::WrapUnique(timer)));
+  auto delegate = std::make_unique<TestDelegateBase>(
+      read_buffer.get(), kReadBufferSize, base::WrapUnique(timer));
   delegate->set_do_not_start_read(true);
   delegate->Start(std::move(request_info), http_session_.get());
   // Write request, and deliver response headers.
@@ -1158,8 +1147,7 @@
 
   InitSession(reads, writes, SocketTag());
 
-  std::unique_ptr<BidirectionalStreamRequestInfo> request_info(
-      new BidirectionalStreamRequestInfo);
+  auto request_info = std::make_unique<BidirectionalStreamRequestInfo>();
   request_info->method = "GET";
   request_info->url = default_url_;
   request_info->priority = LOWEST;
@@ -1168,8 +1156,8 @@
   scoped_refptr<IOBuffer> read_buffer =
       base::MakeRefCounted<IOBuffer>(kReadBufferSize);
   MockTimer* timer = new MockTimer();
-  std::unique_ptr<TestDelegateBase> delegate(new TestDelegateBase(
-      read_buffer.get(), kReadBufferSize, base::WrapUnique(timer)));
+  auto delegate = std::make_unique<TestDelegateBase>(
+      read_buffer.get(), kReadBufferSize, base::WrapUnique(timer));
   delegate->Start(std::move(request_info), http_session_.get());
   // Deliver two DATA frames together.
   sequenced_data_->RunUntilPaused();
@@ -1241,11 +1229,10 @@
   scoped_refptr<IOBuffer> read_buffer =
       base::MakeRefCounted<IOBuffer>(kReadBufferSize);
   MockTimer* timer = new MockTimer();
-  std::unique_ptr<TestDelegateBase> delegate(new TestDelegateBase(
-      read_buffer.get(), kReadBufferSize, base::WrapUnique(timer)));
+  auto delegate = std::make_unique<TestDelegateBase>(
+      read_buffer.get(), kReadBufferSize, base::WrapUnique(timer));
 
-  std::unique_ptr<BidirectionalStreamRequestInfo> request_info(
-      new BidirectionalStreamRequestInfo);
+  auto request_info = std::make_unique<BidirectionalStreamRequestInfo>();
   request_info->method = "GET";
   request_info->url = default_url_;
   request_info->priority = LOWEST;
@@ -1305,8 +1292,7 @@
 
   InitSession(reads, writes, SocketTag());
 
-  std::unique_ptr<BidirectionalStreamRequestInfo> request_info(
-      new BidirectionalStreamRequestInfo);
+  auto request_info = std::make_unique<BidirectionalStreamRequestInfo>();
   request_info->method = "POST";
   request_info->url = default_url_;
   request_info->priority = LOWEST;
@@ -1316,8 +1302,8 @@
 
   scoped_refptr<IOBuffer> read_buffer =
       base::MakeRefCounted<IOBuffer>(kReadBufferSize);
-  std::unique_ptr<TestDelegateBase> delegate(
-      new TestDelegateBase(read_buffer.get(), kReadBufferSize));
+  auto delegate =
+      std::make_unique<TestDelegateBase>(read_buffer.get(), kReadBufferSize);
   delegate->set_do_not_start_read(true);
   delegate->Start(std::move(request_info), http_session_.get());
   // Send the request and receive response headers.
@@ -1369,8 +1355,7 @@
 
   InitSession(reads, writes, SocketTag());
 
-  std::unique_ptr<BidirectionalStreamRequestInfo> request_info(
-      new BidirectionalStreamRequestInfo);
+  auto request_info = std::make_unique<BidirectionalStreamRequestInfo>();
   request_info->method = "POST";
   request_info->url = default_url_;
   request_info->priority = LOWEST;
@@ -1380,8 +1365,8 @@
 
   scoped_refptr<IOBuffer> read_buffer =
       base::MakeRefCounted<IOBuffer>(kReadBufferSize);
-  std::unique_ptr<TestDelegateBase> delegate(
-      new TestDelegateBase(read_buffer.get(), kReadBufferSize));
+  auto delegate =
+      std::make_unique<TestDelegateBase>(read_buffer.get(), kReadBufferSize);
   delegate->set_do_not_start_read(true);
   delegate->Start(std::move(request_info), http_session_.get());
   // Send the request and receive response headers.
@@ -1431,8 +1416,7 @@
 
   InitSession(reads, writes, SocketTag());
 
-  std::unique_ptr<BidirectionalStreamRequestInfo> request_info(
-      new BidirectionalStreamRequestInfo);
+  auto request_info = std::make_unique<BidirectionalStreamRequestInfo>();
   request_info->method = "POST";
   request_info->url = default_url_;
   request_info->extra_headers.SetHeader(
@@ -1441,8 +1425,8 @@
 
   scoped_refptr<IOBuffer> read_buffer =
       base::MakeRefCounted<IOBuffer>(kReadBufferSize);
-  std::unique_ptr<TestDelegateBase> delegate(
-      new TestDelegateBase(read_buffer.get(), kReadBufferSize));
+  auto delegate =
+      std::make_unique<TestDelegateBase>(read_buffer.get(), kReadBufferSize);
   delegate->SetRunUntilCompletion(true);
   delegate->Start(std::move(request_info), http_session_.get());
 
@@ -1494,8 +1478,7 @@
 
   InitSession(reads, writes, SocketTag());
 
-  std::unique_ptr<BidirectionalStreamRequestInfo> request_info(
-      new BidirectionalStreamRequestInfo);
+  auto request_info = std::make_unique<BidirectionalStreamRequestInfo>();
   request_info->method = "GET";
   request_info->url = default_url_;
   request_info->priority = LOWEST;
@@ -1503,9 +1486,9 @@
 
   scoped_refptr<IOBuffer> read_buffer =
       base::MakeRefCounted<IOBuffer>(kReadBufferSize);
-  std::unique_ptr<DeleteStreamDelegate> delegate(new DeleteStreamDelegate(
+  auto delegate = std::make_unique<DeleteStreamDelegate>(
       read_buffer.get(), kReadBufferSize,
-      DeleteStreamDelegate::Phase::ON_HEADERS_RECEIVED));
+      DeleteStreamDelegate::Phase::ON_HEADERS_RECEIVED);
   delegate->SetRunUntilCompletion(true);
   delegate->Start(std::move(request_info), http_session_.get());
   // Makes sure delegate does not get called.
@@ -1549,8 +1532,7 @@
 
   InitSession(reads, writes, SocketTag());
 
-  std::unique_ptr<BidirectionalStreamRequestInfo> request_info(
-      new BidirectionalStreamRequestInfo);
+  auto request_info = std::make_unique<BidirectionalStreamRequestInfo>();
   request_info->method = "GET";
   request_info->url = default_url_;
   request_info->priority = LOWEST;
@@ -1558,9 +1540,9 @@
 
   scoped_refptr<IOBuffer> read_buffer =
       base::MakeRefCounted<IOBuffer>(kReadBufferSize);
-  std::unique_ptr<DeleteStreamDelegate> delegate(
-      new DeleteStreamDelegate(read_buffer.get(), kReadBufferSize,
-                               DeleteStreamDelegate::Phase::ON_DATA_READ));
+  auto delegate = std::make_unique<DeleteStreamDelegate>(
+      read_buffer.get(), kReadBufferSize,
+      DeleteStreamDelegate::Phase::ON_DATA_READ);
   delegate->SetRunUntilCompletion(true);
   delegate->Start(std::move(request_info), http_session_.get());
   // Makes sure delegate does not get called.
@@ -1609,8 +1591,7 @@
 
   InitSession(reads, writes, SocketTag());
 
-  std::unique_ptr<BidirectionalStreamRequestInfo> request_info(
-      new BidirectionalStreamRequestInfo);
+  auto request_info = std::make_unique<BidirectionalStreamRequestInfo>();
   request_info->method = "GET";
   request_info->url = default_url_;
   request_info->priority = LOWEST;
@@ -1618,9 +1599,9 @@
 
   scoped_refptr<IOBuffer> read_buffer =
       base::MakeRefCounted<IOBuffer>(kReadBufferSize);
-  std::unique_ptr<DeleteStreamDelegate> delegate(new DeleteStreamDelegate(
+  auto delegate = std::make_unique<DeleteStreamDelegate>(
       read_buffer.get(), kReadBufferSize,
-      DeleteStreamDelegate::Phase::ON_TRAILERS_RECEIVED));
+      DeleteStreamDelegate::Phase::ON_TRAILERS_RECEIVED);
   delegate->SetRunUntilCompletion(true);
   delegate->Start(std::move(request_info), http_session_.get());
   // Makes sure delegate does not get called.
@@ -1661,8 +1642,7 @@
 
   InitSession(reads, writes, SocketTag());
 
-  std::unique_ptr<BidirectionalStreamRequestInfo> request_info(
-      new BidirectionalStreamRequestInfo);
+  auto request_info = std::make_unique<BidirectionalStreamRequestInfo>();
   request_info->method = "GET";
   request_info->url = default_url_;
   request_info->priority = LOWEST;
@@ -1670,9 +1650,9 @@
 
   scoped_refptr<IOBuffer> read_buffer =
       base::MakeRefCounted<IOBuffer>(kReadBufferSize);
-  std::unique_ptr<DeleteStreamDelegate> delegate(
-      new DeleteStreamDelegate(read_buffer.get(), kReadBufferSize,
-                               DeleteStreamDelegate::Phase::ON_FAILED));
+  auto delegate = std::make_unique<DeleteStreamDelegate>(
+      read_buffer.get(), kReadBufferSize,
+      DeleteStreamDelegate::Phase::ON_FAILED);
   delegate->SetRunUntilCompletion(true);
   delegate->Start(std::move(request_info), http_session_.get());
   // Makes sure delegate does not get called.
@@ -1716,8 +1696,7 @@
   session_deps_.enable_quic = true;
   InitSession(reads, writes, SocketTag());
 
-  std::unique_ptr<BidirectionalStreamRequestInfo> request_info(
-      new BidirectionalStreamRequestInfo);
+  auto request_info = std::make_unique<BidirectionalStreamRequestInfo>();
   request_info->method = "GET";
   request_info->url = default_url_;
   request_info->priority = LOWEST;
@@ -1726,8 +1705,8 @@
   scoped_refptr<IOBuffer> read_buffer =
       base::MakeRefCounted<IOBuffer>(kReadBufferSize);
   MockTimer* timer = new MockTimer();
-  std::unique_ptr<TestDelegateBase> delegate(new TestDelegateBase(
-      read_buffer.get(), kReadBufferSize, base::WrapUnique(timer)));
+  auto delegate = std::make_unique<TestDelegateBase>(
+      read_buffer.get(), kReadBufferSize, base::WrapUnique(timer));
   delegate->SetRunUntilCompletion(true);
   delegate->Start(std::move(request_info), http_session_.get());
 
@@ -1774,8 +1753,7 @@
 #endif
   InitSession(reads, writes, tag);
 
-  std::unique_ptr<BidirectionalStreamRequestInfo> request_info(
-      new BidirectionalStreamRequestInfo);
+  auto request_info = std::make_unique<BidirectionalStreamRequestInfo>();
   request_info->method = "POST";
   request_info->url = default_url_;
   request_info->extra_headers.SetHeader(net::HttpRequestHeaders::kContentLength,
@@ -1783,8 +1761,8 @@
   request_info->socket_tag = tag;
   scoped_refptr<IOBuffer> read_buffer =
       base::MakeRefCounted<IOBuffer>(kReadBufferSize);
-  std::unique_ptr<TestDelegateBase> delegate(
-      new TestDelegateBase(read_buffer.get(), kReadBufferSize));
+  auto delegate =
+      std::make_unique<TestDelegateBase>(read_buffer.get(), kReadBufferSize);
   delegate->Start(std::move(request_info), http_session_.get());
   sequenced_data_->RunUntilPaused();
 
diff --git a/net/http/broken_alternative_services_unittest.cc b/net/http/broken_alternative_services_unittest.cc
index 32d311a1..a7b58a2 100644
--- a/net/http/broken_alternative_services_unittest.cc
+++ b/net/http/broken_alternative_services_unittest.cc
@@ -28,7 +28,7 @@
       public ::testing::Test {
  public:
   BrokenAlternativeServicesTest()
-      : test_task_runner_(new base::TestMockTimeTaskRunner()),
+      : test_task_runner_(base::MakeRefCounted<base::TestMockTimeTaskRunner>()),
         test_task_runner_context_(test_task_runner_),
         broken_services_clock_(test_task_runner_->GetMockTickClock()),
         broken_services_(50, this, broken_services_clock_) {
diff --git a/net/http/http_auth_gssapi_posix_unittest.cc b/net/http/http_auth_gssapi_posix_unittest.cc
index dd935bc..31076e2 100644
--- a/net/http/http_auth_gssapi_posix_unittest.cc
+++ b/net/http/http_auth_gssapi_posix_unittest.cc
@@ -92,7 +92,7 @@
   // TODO(ahendrickson): Manipulate the libraries and paths to test each of the
   // libraries we expect, and also whether or not they have the interface
   // functions we want.
-  std::unique_ptr<GSSAPILibrary> gssapi(new GSSAPISharedLibrary(std::string()));
+  auto gssapi = std::make_unique<GSSAPISharedLibrary>(std::string());
   DCHECK(gssapi.get());
   EXPECT_TRUE(
       gssapi.get()->Init(NetLogWithSource::Make(NetLogSourceType::NONE)));
@@ -117,8 +117,8 @@
 TEST(HttpAuthGSSAPIPOSIXTest, CustomLibraryMissing) {
   RecordingNetLogObserver net_log_observer;
 
-  std::unique_ptr<GSSAPILibrary> gssapi(
-      new GSSAPISharedLibrary("/this/library/does/not/exist"));
+  auto gssapi =
+      std::make_unique<GSSAPISharedLibrary>("/this/library/does/not/exist");
   EXPECT_FALSE(
       gssapi.get()->Init(NetLogWithSource::Make(NetLogSourceType::NONE)));
 
@@ -182,8 +182,7 @@
 }
 
 TEST(HttpAuthGSSAPIPOSIXTest, GSSAPICycle) {
-  std::unique_ptr<test::MockGSSAPILibrary> mock_library(
-      new test::MockGSSAPILibrary);
+  auto mock_library = std::make_unique<test::MockGSSAPILibrary>();
   DCHECK(mock_library.get());
   mock_library->Init(NetLogWithSource());
   const char kAuthResponse[] = "Mary had a little lamb";
diff --git a/net/http/http_auth_handler_digest.cc b/net/http/http_auth_handler_digest.cc
index 0557b3d..744d2f7 100644
--- a/net/http/http_auth_handler_digest.cc
+++ b/net/http/http_auth_handler_digest.cc
@@ -78,8 +78,7 @@
 }
 
 HttpAuthHandlerDigest::Factory::Factory()
-    : nonce_generator_(new DynamicNonceGenerator()) {
-}
+    : nonce_generator_(std::make_unique<DynamicNonceGenerator>()) {}
 
 HttpAuthHandlerDigest::Factory::~Factory() = default;
 
diff --git a/net/http/http_auth_handler_digest_unittest.cc b/net/http/http_auth_handler_digest_unittest.cc
index fb417e6..0dd4501c 100644
--- a/net/http/http_auth_handler_digest_unittest.cc
+++ b/net/http/http_auth_handler_digest_unittest.cc
@@ -55,8 +55,7 @@
   EXPECT_FALSE(challenge.empty());
 
   token->clear();
-  std::unique_ptr<HttpAuthHandlerDigest::Factory> factory(
-      new HttpAuthHandlerDigest::Factory());
+  auto factory = std::make_unique<HttpAuthHandlerDigest::Factory>();
   HttpAuthHandlerDigest::NonceGenerator* nonce_generator =
       new HttpAuthHandlerDigest::FixedNonceGenerator("client_nonce");
   factory->set_nonce_generator(nonce_generator);
@@ -80,7 +79,7 @@
   // completes synchronously. That's why this test can get away with a
   // TestCompletionCallback without an IO thread.
   TestCompletionCallback callback;
-  std::unique_ptr<HttpRequestInfo> request(new HttpRequestInfo());
+  auto request = std::make_unique<HttpRequestInfo>();
   request->url = GURL(request_url);
   AuthCredentials credentials(u"foo", u"bar");
   int rv_generate = handler->GenerateAuthToken(
@@ -362,8 +361,7 @@
   };
 
   url::SchemeHostPort scheme_host_port(GURL("http://www.example.com"));
-  std::unique_ptr<HttpAuthHandlerDigest::Factory> factory(
-      new HttpAuthHandlerDigest::Factory());
+  auto factory = std::make_unique<HttpAuthHandlerDigest::Factory>();
   for (const auto& test : tests) {
     SSLInfo null_ssl_info;
     auto host_resolver = std::make_unique<MockHostResolver>();
@@ -528,8 +526,7 @@
     }
   };
   url::SchemeHostPort scheme_host_port(GURL("http://www.example.com"));
-  std::unique_ptr<HttpAuthHandlerDigest::Factory> factory(
-      new HttpAuthHandlerDigest::Factory());
+  auto factory = std::make_unique<HttpAuthHandlerDigest::Factory>();
   for (const auto& test : tests) {
     SSLInfo null_ssl_info;
     auto host_resolver = std::make_unique<MockHostResolver>();
@@ -554,8 +551,7 @@
 }
 
 TEST(HttpAuthHandlerDigest, HandleAnotherChallenge) {
-  std::unique_ptr<HttpAuthHandlerDigest::Factory> factory(
-      new HttpAuthHandlerDigest::Factory());
+  auto factory = std::make_unique<HttpAuthHandlerDigest::Factory>();
   auto host_resolver = std::make_unique<MockHostResolver>();
   std::unique_ptr<HttpAuthHandler> handler;
   std::string default_challenge =
diff --git a/net/http/http_auth_handler_factory_unittest.cc b/net/http/http_auth_handler_factory_unittest.cc
index 71551c8..db0251f1 100644
--- a/net/http/http_auth_handler_factory_unittest.cc
+++ b/net/http/http_auth_handler_factory_unittest.cc
@@ -136,7 +136,7 @@
 }
 
 TEST(HttpAuthHandlerFactoryTest, DefaultFactory) {
-  std::unique_ptr<HostResolver> host_resolver(new MockHostResolver());
+  auto host_resolver = std::make_unique<MockHostResolver>();
   MockAllowHttpAuthPreferences http_auth_preferences;
   std::unique_ptr<HttpAuthHandlerRegistryFactory> http_auth_handler_factory(
       HttpAuthHandlerFactory::CreateDefault());
@@ -220,7 +220,7 @@
 }
 
 TEST(HttpAuthHandlerFactoryTest, HttpAuthUrlFilter) {
-  std::unique_ptr<HostResolver> host_resolver(new MockHostResolver());
+  auto host_resolver = std::make_unique<MockHostResolver>();
 
   MockAllowHttpAuthPreferences http_auth_preferences;
   // Set the Preference that blocks Basic Auth over HTTP on all of the
@@ -273,7 +273,7 @@
 }
 
 TEST(HttpAuthHandlerFactoryTest, BasicFactoryRespectsHTTPEnabledPref) {
-  std::unique_ptr<HostResolver> host_resolver(new MockHostResolver());
+  auto host_resolver = std::make_unique<MockHostResolver>();
   std::unique_ptr<HttpAuthHandlerRegistryFactory> http_auth_handler_factory(
       HttpAuthHandlerFactory::CreateDefault());
 
@@ -330,7 +330,7 @@
 }
 
 TEST(HttpAuthHandlerFactoryTest, LogCreateAuthHandlerResults) {
-  std::unique_ptr<HostResolver> host_resolver(new MockHostResolver());
+  auto host_resolver = std::make_unique<MockHostResolver>();
   std::unique_ptr<HttpAuthHandlerRegistryFactory> http_auth_handler_factory(
       HttpAuthHandlerFactory::CreateDefault());
   url::SchemeHostPort scheme_host_port(GURL("http://www.example.com"));
diff --git a/net/http/http_auth_handler_negotiate.cc b/net/http/http_auth_handler_negotiate.cc
index e4b83d5..33d8034 100644
--- a/net/http/http_auth_handler_negotiate.cc
+++ b/net/http/http_auth_handler_negotiate.cc
@@ -101,10 +101,11 @@
     return ERR_UNSUPPORTED_AUTH_SCHEME;
   // TODO(cbentzel): Move towards model of parsing in the factory
   //                 method and only constructing when valid.
-  std::unique_ptr<HttpAuthHandler> tmp_handler(new HttpAuthHandlerNegotiate(
-      CreateAuthSystem(auth_library_.get(), http_auth_preferences(),
-                       negotiate_auth_system_factory_),
-      http_auth_preferences(), host_resolver));
+  std::unique_ptr<HttpAuthHandler> tmp_handler(
+      std::make_unique<HttpAuthHandlerNegotiate>(
+          CreateAuthSystem(auth_library_.get(), http_auth_preferences(),
+                           negotiate_auth_system_factory_),
+          http_auth_preferences(), host_resolver));
 #elif BUILDFLAG(IS_ANDROID)
   if (is_unsupported_ || !http_auth_preferences() ||
       http_auth_preferences()->AuthAndroidNegotiateAccountType().empty() ||
@@ -112,9 +113,11 @@
     return ERR_UNSUPPORTED_AUTH_SCHEME;
   // TODO(cbentzel): Move towards model of parsing in the factory
   //                 method and only constructing when valid.
-  std::unique_ptr<HttpAuthHandler> tmp_handler(new HttpAuthHandlerNegotiate(
-      CreateAuthSystem(http_auth_preferences(), negotiate_auth_system_factory_),
-      http_auth_preferences(), host_resolver));
+  std::unique_ptr<HttpAuthHandler> tmp_handler(
+      std::make_unique<HttpAuthHandlerNegotiate>(
+          CreateAuthSystem(http_auth_preferences(),
+                           negotiate_auth_system_factory_),
+          http_auth_preferences(), host_resolver));
 #elif BUILDFLAG(IS_POSIX)
   if (is_unsupported_)
     return ERR_UNSUPPORTED_AUTH_SCHEME;
@@ -130,10 +133,11 @@
   }
   // TODO(ahendrickson): Move towards model of parsing in the factory
   //                     method and only constructing when valid.
-  std::unique_ptr<HttpAuthHandler> tmp_handler(new HttpAuthHandlerNegotiate(
-      CreateAuthSystem(auth_library_.get(), http_auth_preferences(),
-                       negotiate_auth_system_factory_),
-      http_auth_preferences(), host_resolver));
+  std::unique_ptr<HttpAuthHandler> tmp_handler(
+      std::make_unique<HttpAuthHandlerNegotiate>(
+          CreateAuthSystem(auth_library_.get(), http_auth_preferences(),
+                           negotiate_auth_system_factory_),
+          http_auth_preferences(), host_resolver));
 #endif
   if (!tmp_handler->InitFromChallenge(challenge, target, ssl_info,
                                       network_isolation_key, scheme_host_port,
diff --git a/net/http/http_auth_unittest.cc b/net/http/http_auth_unittest.cc
index bd220b61..7ee5526 100644
--- a/net/http/http_auth_unittest.cc
+++ b/net/http/http_auth_unittest.cc
@@ -132,7 +132,7 @@
   url::SchemeHostPort scheme_host_port(GURL("http://www.example.com"));
   std::set<HttpAuth::Scheme> disabled_schemes;
   MockAllowHttpAuthPreferences http_auth_preferences;
-  std::unique_ptr<HostResolver> host_resolver(new MockHostResolver());
+  auto host_resolver = std::make_unique<MockHostResolver>();
   std::unique_ptr<HttpAuthHandlerRegistryFactory> http_auth_handler_factory(
       HttpAuthHandlerFactory::CreateDefault());
   http_auth_handler_factory->SetHttpAuthPreferences(kNegotiateAuthScheme,
diff --git a/net/http/http_cache_lookup_manager.cc b/net/http/http_cache_lookup_manager.cc
index cfcf6c84..194eb3f 100644
--- a/net/http/http_cache_lookup_manager.cc
+++ b/net/http/http_cache_lookup_manager.cc
@@ -29,7 +29,7 @@
     std::unique_ptr<ServerPushHelper> server_push_helper,
     NetLog* net_log)
     : push_helper_(std::move(server_push_helper)),
-      request_(new HttpRequestInfo()),
+      request_(std::make_unique<HttpRequestInfo>()),
       net_log_(NetLogWithSource::Make(
           net_log,
           NetLogSourceType::SERVER_PUSH_LOOKUP_TRANSACTION)) {}
diff --git a/net/http/http_cache_unittest.cc b/net/http/http_cache_unittest.cc
index 254ed35..9594ba33 100644
--- a/net/http/http_cache_unittest.cc
+++ b/net/http/http_cache_unittest.cc
@@ -9734,7 +9734,8 @@
   HttpResponseInfo response1;
   response1.was_cached = false;
   response1.remote_endpoint = expected_endpoint;
-  response1.headers = new HttpResponseHeaders("HTTP/1.1 200 OK");
+  response1.headers =
+      base::MakeRefCounted<HttpResponseHeaders>("HTTP/1.1 200 OK");
 
   // Pickle.
   base::Pickle pickle;
diff --git a/net/http/http_cache_writers.cc b/net/http/http_cache_writers.cc
index 35f236a..5ba5747 100644
--- a/net/http/http_cache_writers.cc
+++ b/net/http/http_cache_writers.cc
@@ -281,8 +281,7 @@
 
 void HttpCache::Writers::TruncateEntry() {
   DCHECK(ShouldTruncate());
-
-  scoped_refptr<PickledIOBuffer> data(new PickledIOBuffer());
+  auto data = base::MakeRefCounted<PickledIOBuffer>();
   response_info_truncation_.Persist(data->pickle(),
                                     true /* skip_transient_headers*/,
                                     true /* response_truncated */);
diff --git a/net/http/http_chunked_decoder_unittest.cc b/net/http/http_chunked_decoder_unittest.cc
index 4dbefb34..f3a34c1 100644
--- a/net/http/http_chunked_decoder_unittest.cc
+++ b/net/http/http_chunked_decoder_unittest.cc
@@ -397,7 +397,7 @@
 // Test when the line with the chunk length is too long.
 TEST(HttpChunkedDecoderTest, LongChunkLengthLine) {
   int big_chunk_length = HttpChunkedDecoder::kMaxLineBufLen;
-  std::unique_ptr<char[]> big_chunk(new char[big_chunk_length + 1]);
+  auto big_chunk = std::make_unique<char[]>(big_chunk_length + 1);
   memset(big_chunk.get(), '0', big_chunk_length);
   big_chunk[big_chunk_length] = 0;
   const char* const inputs[] = {
@@ -411,7 +411,7 @@
 // long.
 TEST(HttpChunkedDecoderTest, LongLengthLengthLine) {
   int big_chunk_length = HttpChunkedDecoder::kMaxLineBufLen;
-  std::unique_ptr<char[]> big_chunk(new char[big_chunk_length + 1]);
+  auto big_chunk = std::make_unique<char[]>(big_chunk_length + 1);
   memset(big_chunk.get(), '0', big_chunk_length);
   big_chunk[big_chunk_length] = 0;
   const char* const inputs[] = {
diff --git a/net/http/http_network_transaction.cc b/net/http/http_network_transaction.cc
index ed658f5..cc04224 100644
--- a/net/http/http_network_transaction.cc
+++ b/net/http/http_network_transaction.cc
@@ -1203,7 +1203,8 @@
   // Unless this is a WebSocket request, in which case we pass it on up.
   if (response_.headers->response_code() / 100 == 1 &&
       !ForWebSocketHandshake()) {
-    response_.headers = new HttpResponseHeaders(std::string());
+    response_.headers =
+        base::MakeRefCounted<HttpResponseHeaders>(std::string());
     next_state_ = STATE_READ_HEADERS;
     return OK;
   }
diff --git a/net/http/http_proxy_client_socket_fuzzer.cc b/net/http/http_proxy_client_socket_fuzzer.cc
index ad3397f..fc3af85 100644
--- a/net/http/http_proxy_client_socket_fuzzer.cc
+++ b/net/http/http_proxy_client_socket_fuzzer.cc
@@ -43,8 +43,8 @@
   net::RecordingNetLogObserver net_log_observer;
 
   net::TestCompletionCallback callback;
-  std::unique_ptr<net::FuzzedSocket> fuzzed_socket(
-      new net::FuzzedSocket(&data_provider, net::NetLog::Get()));
+  auto fuzzed_socket =
+      std::make_unique<net::FuzzedSocket>(&data_provider, net::NetLog::Get());
   CHECK_EQ(net::OK, fuzzed_socket->Connect(callback.callback()));
 
   // Create auth handler supporting basic and digest schemes.  Other schemes can
diff --git a/net/http/http_response_body_drainer_unittest.cc b/net/http/http_response_body_drainer_unittest.cc
index 13cdd3c..6524e05d 100644
--- a/net/http/http_response_body_drainer_unittest.cc
+++ b/net/http/http_response_body_drainer_unittest.cc
@@ -238,15 +238,15 @@
   HttpResponseBodyDrainerTest()
       : proxy_resolution_service_(
             ConfiguredProxyResolutionService::CreateDirect()),
-        ssl_config_service_(new SSLConfigServiceDefaults),
-        http_server_properties_(new HttpServerProperties()),
+        ssl_config_service_(std::make_unique<SSLConfigServiceDefaults>()),
+        http_server_properties_(std::make_unique<HttpServerProperties>()),
         session_(CreateNetworkSession()),
         mock_stream_(new MockHttpStream(&result_waiter_)),
         drainer_(new HttpResponseBodyDrainer(mock_stream_)) {}
 
   ~HttpResponseBodyDrainerTest() override = default;
 
-  HttpNetworkSession* CreateNetworkSession() {
+  std::unique_ptr<HttpNetworkSession> CreateNetworkSession() {
     HttpNetworkSessionContext context;
     context.client_socket_factory = &socket_factory_;
     context.proxy_resolution_service = proxy_resolution_service_.get();
@@ -256,7 +256,8 @@
     context.transport_security_state = &transport_security_state_;
     context.ct_policy_enforcer = &ct_policy_enforcer_;
     context.quic_context = &quic_context_;
-    return new HttpNetworkSession(HttpNetworkSessionParams(), context);
+    return std::make_unique<HttpNetworkSession>(HttpNetworkSessionParams(),
+                                                context);
   }
 
   std::unique_ptr<ProxyResolutionService> proxy_resolution_service_;
diff --git a/net/http/http_response_headers_unittest.cc b/net/http/http_response_headers_unittest.cc
index 7963444..0007e53 100644
--- a/net/http/http_response_headers_unittest.cc
+++ b/net/http/http_response_headers_unittest.cc
@@ -59,7 +59,7 @@
     raw_headers += cache_control;
     raw_headers += "\n";
     HeadersToRaw(&raw_headers);
-    headers_ = new HttpResponseHeaders(raw_headers);
+    headers_ = base::MakeRefCounted<HttpResponseHeaders>(raw_headers);
   }
 
   const scoped_refptr<HttpResponseHeaders>& headers() { return headers_; }
@@ -138,8 +138,7 @@
   HeadersToRaw(&raw_headers);
   std::string expected_headers(test.expected_headers);
 
-  scoped_refptr<HttpResponseHeaders> parsed(
-      new HttpResponseHeaders(raw_headers));
+  auto parsed = base::MakeRefCounted<HttpResponseHeaders>(raw_headers);
   std::string headers = ToSimpleString(parsed);
 
   // Transform to readable output format (so it's easier to see diffs).
@@ -325,13 +324,13 @@
 
   std::string headers = test.raw_headers;
   HeadersToRaw(&headers);
-  scoped_refptr<HttpResponseHeaders> parsed1(new HttpResponseHeaders(headers));
+  auto parsed1 = base::MakeRefCounted<HttpResponseHeaders>(headers);
 
   base::Pickle pickle;
   parsed1->Persist(&pickle, test.options);
 
   base::PickleIterator iter(pickle);
-  scoped_refptr<HttpResponseHeaders> parsed2(new HttpResponseHeaders(&iter));
+  auto parsed2 = base::MakeRefCounted<HttpResponseHeaders>(&iter);
 
   EXPECT_EQ(std::string(test.expected_headers), ToSimpleString(parsed2));
 }
@@ -507,7 +506,7 @@
       "cache-Control: no-store\n"
       "cache-Control:\n";
   HeadersToRaw(&headers);
-  scoped_refptr<HttpResponseHeaders> parsed(new HttpResponseHeaders(headers));
+  auto parsed = base::MakeRefCounted<HttpResponseHeaders>(headers);
 
   size_t iter = 0;
   std::string value;
@@ -536,7 +535,7 @@
       "WWW-Authenticate:Digest realm=foobar, nonce=x, domain=y\n"
       "WWW-Authenticate:Basic realm=quatar\n";
   HeadersToRaw(&headers);
-  scoped_refptr<HttpResponseHeaders> parsed(new HttpResponseHeaders(headers));
+  auto parsed = base::MakeRefCounted<HttpResponseHeaders>(headers);
 
   size_t iter = 0;
   std::string value;
@@ -555,7 +554,7 @@
       "Date: Tue, 07 Aug 2007 23:10:55 GMT\n"
       "Last-Modified: Wed, 01 Aug 2007 23:23:45 GMT\n";
   HeadersToRaw(&headers);
-  scoped_refptr<HttpResponseHeaders> parsed(new HttpResponseHeaders(headers));
+  auto parsed = base::MakeRefCounted<HttpResponseHeaders>(headers);
 
   std::string value;
   EXPECT_TRUE(parsed->EnumerateHeader(nullptr, "date", &value));
@@ -573,7 +572,7 @@
       "Last-Modified: Tue, 07 Aug 2007 19:10:55 EDT\n"
       "Expires: Tue, 07 Aug 2007 23:10:55 UTC\n";
   HeadersToRaw(&headers);
-  scoped_refptr<HttpResponseHeaders> parsed(new HttpResponseHeaders(headers));
+  auto parsed = base::MakeRefCounted<HttpResponseHeaders>(headers);
   base::Time expected_value;
   ASSERT_TRUE(base::Time::FromString("Tue, 07 Aug 2007 23:10:55 GMT",
                                      &expected_value));
@@ -598,7 +597,7 @@
       "HTTP/1.1 200 OK\n"
       "Age: 10\n";
   HeadersToRaw(&headers);
-  scoped_refptr<HttpResponseHeaders> parsed(new HttpResponseHeaders(headers));
+  auto parsed = base::MakeRefCounted<HttpResponseHeaders>(headers);
   base::TimeDelta age;
   ASSERT_TRUE(parsed->GetAgeValue(&age));
   EXPECT_EQ(10, age.InSeconds());
@@ -609,7 +608,7 @@
       "HTTP/1.1 200 OK\n"
       "Age: 0\n";
   HeadersToRaw(&headers);
-  scoped_refptr<HttpResponseHeaders> parsed(new HttpResponseHeaders(headers));
+  auto parsed = base::MakeRefCounted<HttpResponseHeaders>(headers);
   base::TimeDelta age;
   ASSERT_TRUE(parsed->GetAgeValue(&age));
   EXPECT_EQ(0, age.InSeconds());
@@ -620,7 +619,7 @@
       "HTTP/1.1 200 OK\n"
       "Age: donkey\n";
   HeadersToRaw(&headers);
-  scoped_refptr<HttpResponseHeaders> parsed(new HttpResponseHeaders(headers));
+  auto parsed = base::MakeRefCounted<HttpResponseHeaders>(headers);
   base::TimeDelta age;
   ASSERT_FALSE(parsed->GetAgeValue(&age));
 }
@@ -630,7 +629,7 @@
       "HTTP/1.1 200 OK\n"
       "Age: -10\n";
   HeadersToRaw(&headers);
-  scoped_refptr<HttpResponseHeaders> parsed(new HttpResponseHeaders(headers));
+  auto parsed = base::MakeRefCounted<HttpResponseHeaders>(headers);
   base::TimeDelta age;
   ASSERT_FALSE(parsed->GetAgeValue(&age));
 }
@@ -640,7 +639,7 @@
       "HTTP/1.1 200 OK\n"
       "Age: +10\n";
   HeadersToRaw(&headers);
-  scoped_refptr<HttpResponseHeaders> parsed(new HttpResponseHeaders(headers));
+  auto parsed = base::MakeRefCounted<HttpResponseHeaders>(headers);
   base::TimeDelta age;
   ASSERT_FALSE(parsed->GetAgeValue(&age));
 }
@@ -650,7 +649,7 @@
       "HTTP/1.1 200 OK\n"
       "Age: 999999999999999999999999999999999999999999\n";
   HeadersToRaw(&headers);
-  scoped_refptr<HttpResponseHeaders> parsed(new HttpResponseHeaders(headers));
+  auto parsed = base::MakeRefCounted<HttpResponseHeaders>(headers);
   base::TimeDelta age;
   ASSERT_TRUE(parsed->GetAgeValue(&age));
 
@@ -677,7 +676,7 @@
 
   std::string headers(test.raw_headers);
   HeadersToRaw(&headers);
-  scoped_refptr<HttpResponseHeaders> parsed(new HttpResponseHeaders(headers));
+  auto parsed = base::MakeRefCounted<HttpResponseHeaders>(headers);
 
   std::string value;
   EXPECT_EQ(test.has_mimetype, parsed->GetMimeType(&value));
@@ -850,7 +849,7 @@
 
   std::string headers(test.headers);
   HeadersToRaw(&headers);
-  scoped_refptr<HttpResponseHeaders> parsed(new HttpResponseHeaders(headers));
+  auto parsed = base::MakeRefCounted<HttpResponseHeaders>(headers);
 
   ValidationType validation_type =
       parsed->RequiresValidation(request_time, response_time, current_time);
@@ -1041,13 +1040,11 @@
 
   std::string orig_headers(test.orig_headers);
   HeadersToRaw(&orig_headers);
-  scoped_refptr<HttpResponseHeaders> parsed(
-      new HttpResponseHeaders(orig_headers));
+  auto parsed = base::MakeRefCounted<HttpResponseHeaders>(orig_headers);
 
   std::string new_headers(test.new_headers);
   HeadersToRaw(&new_headers);
-  scoped_refptr<HttpResponseHeaders> new_parsed(
-      new HttpResponseHeaders(new_headers));
+  auto new_parsed = base::MakeRefCounted<HttpResponseHeaders>(new_headers);
 
   parsed->Update(*new_parsed.get());
 
@@ -1177,7 +1174,7 @@
 
   std::string headers(test.headers);
   HeadersToRaw(&headers);
-  scoped_refptr<HttpResponseHeaders> parsed(new HttpResponseHeaders(headers));
+  auto parsed = base::MakeRefCounted<HttpResponseHeaders>(headers);
 
   std::string name, value, lines;
 
@@ -1236,7 +1233,7 @@
 
   std::string headers(test.headers);
   HeadersToRaw(&headers);
-  scoped_refptr<HttpResponseHeaders> parsed(new HttpResponseHeaders(headers));
+  auto parsed = base::MakeRefCounted<HttpResponseHeaders>(headers);
 
   std::string location;
   EXPECT_EQ(parsed->IsRedirect(&location), test.is_redirect);
@@ -1322,7 +1319,7 @@
 
   std::string headers(test.headers);
   HeadersToRaw(&headers);
-  scoped_refptr<HttpResponseHeaders> parsed(new HttpResponseHeaders(headers));
+  auto parsed = base::MakeRefCounted<HttpResponseHeaders>(headers);
 
   EXPECT_EQ(test.expected_len, parsed->GetContentLength());
 }
@@ -1402,7 +1399,7 @@
 
   std::string headers(test.headers);
   HeadersToRaw(&headers);
-  scoped_refptr<HttpResponseHeaders> parsed(new HttpResponseHeaders(headers));
+  auto parsed = base::MakeRefCounted<HttpResponseHeaders>(headers);
 
   int64_t first_byte_position;
   int64_t last_byte_position;
@@ -1461,7 +1458,7 @@
 
   std::string headers(test.headers);
   HeadersToRaw(&headers);
-  scoped_refptr<HttpResponseHeaders> parsed(new HttpResponseHeaders(headers));
+  auto parsed = base::MakeRefCounted<HttpResponseHeaders>(headers);
 
   EXPECT_EQ(test.expected_keep_alive, parsed->IsKeepAlive());
 }
@@ -1621,7 +1618,7 @@
 
   std::string headers(test.headers);
   HeadersToRaw(&headers);
-  scoped_refptr<HttpResponseHeaders> parsed(new HttpResponseHeaders(headers));
+  auto parsed = base::MakeRefCounted<HttpResponseHeaders>(headers);
 
   EXPECT_EQ(test.expected_result, parsed->HasStrongValidators());
 }
@@ -1679,7 +1676,7 @@
 TEST(HttpResponseHeadersTest, HasValidatorsNone) {
   std::string headers("HTTP/1.1 200 OK");
   HeadersToRaw(&headers);
-  scoped_refptr<HttpResponseHeaders> parsed(new HttpResponseHeaders(headers));
+  auto parsed = base::MakeRefCounted<HttpResponseHeaders>(headers);
   EXPECT_FALSE(parsed->HasValidators());
 }
 
@@ -1688,7 +1685,7 @@
       "HTTP/1.1 200 OK\n"
       "etag: \"anything\"");
   HeadersToRaw(&headers);
-  scoped_refptr<HttpResponseHeaders> parsed(new HttpResponseHeaders(headers));
+  auto parsed = base::MakeRefCounted<HttpResponseHeaders>(headers);
   EXPECT_TRUE(parsed->HasValidators());
 }
 
@@ -1697,7 +1694,7 @@
       "HTTP/1.1 200 OK\n"
       "Last-Modified: Wed, 28 Nov 2007 00:40:10 GMT");
   HeadersToRaw(&headers);
-  scoped_refptr<HttpResponseHeaders> parsed(new HttpResponseHeaders(headers));
+  auto parsed = base::MakeRefCounted<HttpResponseHeaders>(headers);
   EXPECT_TRUE(parsed->HasValidators());
 }
 
@@ -1706,7 +1703,7 @@
       "HTTP/1.1 200 OK\n"
       "etag: W/\"anything\"");
   HeadersToRaw(&headers);
-  scoped_refptr<HttpResponseHeaders> parsed(new HttpResponseHeaders(headers));
+  auto parsed = base::MakeRefCounted<HttpResponseHeaders>(headers);
   EXPECT_TRUE(parsed->HasValidators());
 }
 
@@ -1853,8 +1850,7 @@
 
   std::string orig_headers(test.orig_headers);
   HeadersToRaw(&orig_headers);
-  scoped_refptr<HttpResponseHeaders> parsed(
-      new HttpResponseHeaders(orig_headers));
+  auto parsed = base::MakeRefCounted<HttpResponseHeaders>(orig_headers);
 
   std::string name(test.to_remove);
   parsed->RemoveHeader(name);
@@ -1906,8 +1902,7 @@
 
   std::string orig_headers(test.orig_headers);
   HeadersToRaw(&orig_headers);
-  scoped_refptr<HttpResponseHeaders> parsed(
-      new HttpResponseHeaders(orig_headers));
+  auto parsed = base::MakeRefCounted<HttpResponseHeaders>(orig_headers);
 
   std::unordered_set<std::string> to_remove;
   for (auto* header : test.to_remove) {
@@ -1970,8 +1965,7 @@
 
   std::string orig_headers(test.orig_headers);
   HeadersToRaw(&orig_headers);
-  scoped_refptr<HttpResponseHeaders> parsed(
-      new HttpResponseHeaders(orig_headers));
+  auto parsed = base::MakeRefCounted<HttpResponseHeaders>(orig_headers);
 
   std::string name(test.to_remove_name);
   std::string value(test.to_remove_value);
@@ -2072,8 +2066,7 @@
 
   std::string orig_headers(test.orig_headers);
   HeadersToRaw(&orig_headers);
-  scoped_refptr<HttpResponseHeaders> parsed(
-      new HttpResponseHeaders(orig_headers));
+  auto parsed = base::MakeRefCounted<HttpResponseHeaders>(orig_headers);
 
   std::string name(test.new_status);
   parsed->ReplaceStatusLine(name);
@@ -2138,8 +2131,7 @@
 
   std::string orig_headers(test.orig_headers);
   std::replace(orig_headers.begin(), orig_headers.end(), '\n', '\0');
-  scoped_refptr<HttpResponseHeaders> parsed(
-      new HttpResponseHeaders(orig_headers + '\0'));
+  auto parsed = base::MakeRefCounted<HttpResponseHeaders>(orig_headers + '\0');
   int64_t content_size = parsed->GetContentLength();
 
   // Update headers without replacing status line.
@@ -2342,7 +2334,7 @@
 
   std::string headers(test.headers);
   HeadersToRaw(&headers);
-  scoped_refptr<HttpResponseHeaders> parsed(new HttpResponseHeaders(headers));
+  auto parsed = base::MakeRefCounted<HttpResponseHeaders>(headers);
 
   base::TimeDelta age =
       parsed->GetCurrentAge(request_time, response_time, current_time);
diff --git a/net/http/http_response_info.cc b/net/http/http_response_info.cc
index e96d6da..8b5285e 100644
--- a/net/http/http_response_info.cc
+++ b/net/http/http_response_info.cc
@@ -224,7 +224,7 @@
   response_time = Time::FromInternalValue(time_val);
 
   // Read response-headers
-  headers = new HttpResponseHeaders(&iter);
+  headers = base::MakeRefCounted<HttpResponseHeaders>(&iter);
   if (headers->response_code() == -1)
     return false;
 
diff --git a/net/http/http_response_info_unittest.cc b/net/http/http_response_info_unittest.cc
index 43c8770a..03bc8379 100644
--- a/net/http/http_response_info_unittest.cc
+++ b/net/http/http_response_info_unittest.cc
@@ -22,7 +22,7 @@
 class HttpResponseInfoTest : public testing::Test {
  protected:
   void SetUp() override {
-    response_info_.headers = new HttpResponseHeaders("");
+    response_info_.headers = base::MakeRefCounted<HttpResponseHeaders>("");
   }
 
   void PickleAndRestore(const HttpResponseInfo& response_info,
diff --git a/net/http/http_stream_factory_job.cc b/net/http/http_stream_factory_job.cc
index 968b9ea4..b6fb88d 100644
--- a/net/http/http_stream_factory_job.cc
+++ b/net/http/http_stream_factory_job.cc
@@ -137,7 +137,7 @@
           NetLogWithSource::Make(net_log, NetLogSourceType::HTTP_STREAM_JOB)),
       io_callback_(
           base::BindRepeating(&Job::OnIOComplete, base::Unretained(this))),
-      connection_(new ClientSocketHandle),
+      connection_(std::make_unique<ClientSocketHandle>()),
       session_(session),
       destination_(std::move(destination)),
       origin_url_(origin_url),
diff --git a/net/http/http_stream_factory_job_controller_unittest.cc b/net/http/http_stream_factory_job_controller_unittest.cc
index 59f06e7..6b002038 100644
--- a/net/http/http_stream_factory_job_controller_unittest.cc
+++ b/net/http/http_stream_factory_job_controller_unittest.cc
@@ -3737,8 +3737,7 @@
   request_info.network_isolation_key = network_isolation_key;
   Initialize(request_info);
   url::SchemeHostPort origin(request_info.url);
-  scoped_refptr<HttpResponseHeaders> headers(
-      base::MakeRefCounted<HttpResponseHeaders>(""));
+  auto headers = base::MakeRefCounted<HttpResponseHeaders>("");
   headers->AddHeader("alt-svc", alt_svc_header);
   session_->http_stream_factory()->ProcessAlternativeServices(
       session_.get(), network_isolation_key, headers.get(), origin);
diff --git a/net/http/http_stream_factory_unittest.cc b/net/http/http_stream_factory_unittest.cc
index e5f9d1f..0d6136f 100644
--- a/net/http/http_stream_factory_unittest.cc
+++ b/net/http/http_stream_factory_unittest.cc
@@ -3552,8 +3552,8 @@
   url::SchemeHostPort origin;
   NetworkIsolationKey network_isolation_key;
 
-  scoped_refptr<HttpResponseHeaders> headers(
-      base::MakeRefCounted<HttpResponseHeaders>(""));
+  auto headers = base::MakeRefCounted<HttpResponseHeaders>("");
+
   session_->http_stream_factory()->ProcessAlternativeServices(
       session_.get(), network_isolation_key, headers.get(), origin);
 
@@ -3582,8 +3582,7 @@
                    .GetAlternativeServiceInfos(origin, network_isolation_key)
                    .empty());
 
-  scoped_refptr<HttpResponseHeaders> headers(
-      base::MakeRefCounted<HttpResponseHeaders>(""));
+  auto headers = base::MakeRefCounted<HttpResponseHeaders>("");
   headers->AddHeader("alt-svc", "clear");
 
   session_->http_stream_factory()->ProcessAlternativeServices(
@@ -3605,8 +3604,7 @@
       SchemefulSite(GURL("https://example.com")),
       SchemefulSite(GURL("https://example.com")));
 
-  scoped_refptr<HttpResponseHeaders> headers(
-      base::MakeRefCounted<HttpResponseHeaders>(""));
+  auto headers = base::MakeRefCounted<HttpResponseHeaders>("");
   headers->AddHeader("alt-svc",
                      "h3-29=\":443\","
                      "h3-Q050=\":443\","
@@ -3643,8 +3641,7 @@
       SchemefulSite(GURL("https://example.com")),
       SchemefulSite(GURL("https://example.com")));
 
-  scoped_refptr<HttpResponseHeaders> headers(
-      base::MakeRefCounted<HttpResponseHeaders>(""));
+  auto headers = base::MakeRefCounted<HttpResponseHeaders>("");
   headers->AddHeader("alt-svc", "h2=\"other.example.com:443\"");
 
   session_->http_stream_factory()->ProcessAlternativeServices(
diff --git a/net/http/http_stream_parser.cc b/net/http/http_stream_parser.cc
index 3d3a1d5..8b1e78d5 100644
--- a/net/http/http_stream_parser.cc
+++ b/net/http/http_stream_parser.cc
@@ -1007,7 +1007,8 @@
       }
     }
 
-    headers = new HttpResponseHeaders(std::string("HTTP/0.9 200 OK"));
+    headers = base::MakeRefCounted<HttpResponseHeaders>(
+        std::string("HTTP/0.9 200 OK"));
   }
 
   // Check for multiple Content-Length headers when the response is not
diff --git a/net/http/http_stream_parser_unittest.cc b/net/http/http_stream_parser_unittest.cc
index facc4ac..981df136 100644
--- a/net/http/http_stream_parser_unittest.cc
+++ b/net/http/http_stream_parser_unittest.cc
@@ -58,8 +58,8 @@
 std::unique_ptr<StreamSocket> CreateConnectedSocket(SequencedSocketData* data) {
   data->set_connect_data(MockConnect(SYNCHRONOUS, OK));
 
-  std::unique_ptr<MockTCPClientSocket> socket(
-      new MockTCPClientSocket(net::AddressList(), nullptr, data));
+  auto socket =
+      std::make_unique<MockTCPClientSocket>(net::AddressList(), nullptr, data);
 
   TestCompletionCallback callback;
   EXPECT_THAT(socket->Connect(callback.callback()), IsOk());
@@ -363,7 +363,7 @@
 
 TEST(HttpStreamParser, ShouldMergeRequestHeadersAndBody_ChunkedBody) {
   const std::string payload = "123";
-  std::unique_ptr<ChunkedUploadDataStream> body(new ChunkedUploadDataStream(0));
+  auto body = std::make_unique<ChunkedUploadDataStream>(0);
   body->AppendData(payload.data(), payload.size(), true);
   ASSERT_THAT(
       body->Init(TestCompletionCallback().callback(), NetLogWithSource()),
@@ -392,7 +392,8 @@
         base::Time()));
 
     std::unique_ptr<UploadDataStream> body(
-        new ElementsUploadDataStream(std::move(element_readers), 0));
+        std::make_unique<ElementsUploadDataStream>(std::move(element_readers),
+                                                   0));
     TestCompletionCallback callback;
     ASSERT_THAT(body->Init(callback.callback(), NetLogWithSource()),
                 IsError(ERR_IO_PENDING));
@@ -413,7 +414,8 @@
       payload.data(), payload.size()));
 
   std::unique_ptr<UploadDataStream> body(
-      new ElementsUploadDataStream(std::move(element_readers), 0));
+      std::make_unique<ElementsUploadDataStream>(std::move(element_readers),
+                                                 0));
   ASSERT_THAT(body->Init(CompletionOnceCallback(), NetLogWithSource()), IsOk());
   // Yes, should be merged if the in-memory body is small here.
   ASSERT_TRUE(HttpStreamParser::ShouldMergeRequestHeadersAndBody(
@@ -427,7 +429,8 @@
       payload.data(), payload.size()));
 
   std::unique_ptr<UploadDataStream> body(
-      new ElementsUploadDataStream(std::move(element_readers), 0));
+      std::make_unique<ElementsUploadDataStream>(std::move(element_readers),
+                                                 0));
   ASSERT_THAT(body->Init(CompletionOnceCallback(), NetLogWithSource()), IsOk());
   // Shouldn't be merged if the in-memory body is large here.
   ASSERT_FALSE(HttpStreamParser::ShouldMergeRequestHeadersAndBody(
@@ -2158,7 +2161,7 @@
   SequencedSocketData data(reads, writes);
   std::unique_ptr<StreamSocket> stream_socket = CreateConnectedSocket(&data);
 
-  std::unique_ptr<HttpRequestInfo> request_info(new HttpRequestInfo());
+  auto request_info = std::make_unique<HttpRequestInfo>();
   request_info->method = "GET";
   request_info->url = GURL("http://somewhere/foo.html");
 
@@ -2168,8 +2171,8 @@
                           request_info.get(), read_buffer.get(),
                           NetLogWithSource());
 
-  std::unique_ptr<HttpRequestHeaders> request_headers(new HttpRequestHeaders());
-  std::unique_ptr<HttpResponseInfo> response_info(new HttpResponseInfo());
+  auto request_headers = std::make_unique<HttpRequestHeaders>();
+  auto response_info = std::make_unique<HttpResponseInfo>();
   TestCompletionCallback callback;
   ASSERT_EQ(
       OK, parser.SendRequest("GET /foo.html HTTP/1.1\r\n", *request_headers,
diff --git a/net/http/http_transaction_test_util.cc b/net/http/http_transaction_test_util.cc
index 5ea84b3..95beb9d 100644
--- a/net/http/http_transaction_test_util.cc
+++ b/net/http/http_transaction_test_util.cc
@@ -506,7 +506,7 @@
   if (!t->response_time.is_null())
     response_.response_time = t->response_time;
 
-  response_.headers = new HttpResponseHeaders(header_data);
+  response_.headers = base::MakeRefCounted<HttpResponseHeaders>(header_data);
   response_.ssl_info.cert = t->cert;
   response_.ssl_info.cert_status = t->cert_status;
   response_.ssl_info.connection_status = t->ssl_connection_status;
@@ -607,8 +607,8 @@
     std::unique_ptr<HttpTransaction>* trans) {
   transaction_count_++;
   last_create_transaction_priority_ = priority;
-  std::unique_ptr<MockNetworkTransaction> mock_transaction(
-      new MockNetworkTransaction(priority, this));
+  auto mock_transaction =
+      std::make_unique<MockNetworkTransaction>(priority, this);
   last_transaction_ = mock_transaction->AsWeakPtr();
   *trans = std::move(mock_transaction);
   return OK;
diff --git a/net/http/http_vary_data_unittest.cc b/net/http/http_vary_data_unittest.cc
index 0b11adf..b4b3d4c 100644
--- a/net/http/http_vary_data_unittest.cc
+++ b/net/http/http_vary_data_unittest.cc
@@ -25,7 +25,7 @@
             const std::string& response_headers) {
     std::string temp(response_headers);
     std::replace(temp.begin(), temp.end(), '\n', '\0');
-    response = new HttpResponseHeaders(temp);
+    response = base::MakeRefCounted<HttpResponseHeaders>(temp);
 
     request.extra_headers.Clear();
     for (const auto& [key, value] : request_headers)
diff --git a/net/http/mock_http_cache.cc b/net/http/mock_http_cache.cc
index 55dab03..a96faaa 100644
--- a/net/http/mock_http_cache.cc
+++ b/net/http/mock_http_cache.cc
@@ -581,7 +581,7 @@
 };
 
 std::unique_ptr<disk_cache::Backend::Iterator> MockDiskCache::CreateIterator() {
-  return std::unique_ptr<Iterator>(new NotImplementedIterator());
+  return std::make_unique<NotImplementedIterator>();
 }
 
 void MockDiskCache::GetStats(base::StringPairs* stats) {
diff --git a/net/http/transport_security_state_unittest.cc b/net/http/transport_security_state_unittest.cc
index a59c758c..e6a28e5 100644
--- a/net/http/transport_security_state_unittest.cc
+++ b/net/http/transport_security_state_unittest.cc
@@ -107,8 +107,7 @@
                           const base::Time& timestamp,
                           ct::SCTVerifyStatus status,
                           SignedCertificateTimestampAndStatusList* sct_list) {
-  scoped_refptr<net::ct::SignedCertificateTimestamp> sct(
-      new net::ct::SignedCertificateTimestamp());
+  auto sct = base::MakeRefCounted<net::ct::SignedCertificateTimestamp>();
   sct->version = net::ct::SignedCertificateTimestamp::V1;
   sct->log_id = log_id;
   sct->extensions = extensions;
diff --git a/net/http/url_security_manager_unittest.cc b/net/http/url_security_manager_unittest.cc
index e54f9cf..0d59ffb 100644
--- a/net/http/url_security_manager_unittest.cc
+++ b/net/http/url_security_manager_unittest.cc
@@ -46,8 +46,8 @@
 }  // namespace
 
 TEST(URLSecurityManager, UseDefaultCredentials) {
-  std::unique_ptr<HttpAuthFilter> auth_filter(
-      new HttpAuthFilterAllowlist(kTestAuthAllowlist));
+  auto auth_filter =
+      std::make_unique<HttpAuthFilterAllowlist>(kTestAuthAllowlist);
   ASSERT_TRUE(auth_filter);
   // The URL security manager takes ownership of |auth_filter|.
   std::unique_ptr<URLSecurityManager> url_security_manager(
@@ -68,8 +68,8 @@
 }
 
 TEST(URLSecurityManager, CanDelegate) {
-  std::unique_ptr<HttpAuthFilter> auth_filter(
-      new HttpAuthFilterAllowlist(kTestAuthAllowlist));
+  auto auth_filter =
+      std::make_unique<HttpAuthFilterAllowlist>(kTestAuthAllowlist);
   ASSERT_TRUE(auth_filter);
   // The URL security manager takes ownership of |auth_filter|.
   std::unique_ptr<URLSecurityManager> url_security_manager(
diff --git a/net/log/file_net_log_observer.cc b/net/log/file_net_log_observer.cc
index f92b834..b1a1a91b 100644
--- a/net/log/file_net_log_observer.cc
+++ b/net/log/file_net_log_observer.cc
@@ -409,7 +409,7 @@
 }
 
 void FileNetLogObserver::OnAddEntry(const NetLogEntry& entry) {
-  std::unique_ptr<std::string> json(new std::string);
+  auto json = std::make_unique<std::string>();
 
   *json = SerializeNetLogValueToJson(entry.ToValue());
 
@@ -467,17 +467,17 @@
   // TODO(dconnol): Handle the case when the WriteQueue  still doesn't
   // contain enough events to fill all files, because of very large events
   // relative to file size.
-  std::unique_ptr<FileWriter> file_writer(new FileWriter(
+  auto file_writer = std::make_unique<FileWriter>(
       log_path, inprogress_dir_path, std::move(pre_existing_log_file),
-      max_event_file_size, total_num_event_files, file_task_runner));
+      max_event_file_size, total_num_event_files, file_task_runner);
 
   uint64_t write_queue_memory_max =
       base::MakeClampedNum<uint64_t>(max_total_size) * 2;
 
   return base::WrapUnique(new FileNetLogObserver(
       file_task_runner, std::move(file_writer),
-      base::WrapRefCounted(new WriteQueue(write_queue_memory_max)),
-      capture_mode, std::move(constants)));
+      base::MakeRefCounted<WriteQueue>(write_queue_memory_max), capture_mode,
+      std::move(constants)));
 }
 
 FileNetLogObserver::FileNetLogObserver(
@@ -752,7 +752,7 @@
   // Allocate a 64K buffer used for reading the files. At most kReadBufferSize
   // bytes will be in memory at a time.
   const size_t kReadBufferSize = 1 << 16;  // 64KiB
-  std::unique_ptr<char[]> read_buffer(new char[kReadBufferSize]);
+  auto read_buffer = std::make_unique<char[]>(kReadBufferSize);
 
   if (final_log_file_.IsValid()) {
     // Truncate the final log file.
diff --git a/net/nqe/network_qualities_prefs_manager_unittest.cc b/net/nqe/network_qualities_prefs_manager_unittest.cc
index d1e484da..345d6d3 100644
--- a/net/nqe/network_qualities_prefs_manager_unittest.cc
+++ b/net/nqe/network_qualities_prefs_manager_unittest.cc
@@ -82,7 +82,7 @@
   variation_params["force_effective_connection_type"] = "Slow-2G";
   TestNetworkQualityEstimator estimator(variation_params);
 
-  std::unique_ptr<TestPrefDelegate> prefs_delegate(new TestPrefDelegate());
+  auto prefs_delegate = std::make_unique<TestPrefDelegate>();
   TestPrefDelegate* prefs_delegate_ptr = prefs_delegate.get();
 
   NetworkQualitiesPrefsManager manager(std::move(prefs_delegate));
@@ -127,7 +127,7 @@
   variation_params["force_effective_connection_type"] = "Slow-2G";
   TestNetworkQualityEstimator estimator(variation_params);
 
-  std::unique_ptr<TestPrefDelegate> prefs_delegate(new TestPrefDelegate());
+  auto prefs_delegate = std::make_unique<TestPrefDelegate>();
   TestPrefDelegate* prefs_delegate_ptr = prefs_delegate.get();
 
   NetworkQualitiesPrefsManager manager(std::move(prefs_delegate));
@@ -192,7 +192,7 @@
   variation_params["force_effective_connection_type"] = "Slow-2G";
   TestNetworkQualityEstimator estimator(variation_params);
 
-  std::unique_ptr<TestPrefDelegate> prefs_delegate(new TestPrefDelegate());
+  auto prefs_delegate = std::make_unique<TestPrefDelegate>();
 
   NetworkQualitiesPrefsManager manager(std::move(prefs_delegate));
   manager.InitializeOnNetworkThread(&estimator);
@@ -267,7 +267,7 @@
   variation_params["force_effective_connection_type"] = "Slow-2G";
   TestNetworkQualityEstimator estimator(variation_params);
 
-  std::unique_ptr<TestPrefDelegate> prefs_delegate(new TestPrefDelegate());
+  auto prefs_delegate = std::make_unique<TestPrefDelegate>();
 
   NetworkQualitiesPrefsManager manager(std::move(prefs_delegate));
   manager.InitializeOnNetworkThread(&estimator);
diff --git a/net/nqe/network_quality_estimator_util_unittest.cc b/net/nqe/network_quality_estimator_util_unittest.cc
index ae9c3c3..211f071f 100644
--- a/net/nqe/network_quality_estimator_util_unittest.cc
+++ b/net/nqe/network_quality_estimator_util_unittest.cc
@@ -96,8 +96,7 @@
 
   MockCachingHostResolver mock_host_resolver;
 
-  scoped_refptr<net::RuleBasedHostResolverProc> rules(
-      new net::RuleBasedHostResolverProc(nullptr));
+  auto rules = base::MakeRefCounted<net::RuleBasedHostResolverProc>(nullptr);
 
   // Add example3.com resolution to the DNS cache.
   mock_host_resolver.rules()->AddRule("example3.com", "127.0.0.3");
@@ -190,8 +189,7 @@
   std::unique_ptr<ContextHostResolver> resolver =
       HostResolver::CreateStandaloneContextResolver(NetLog::Get());
 
-  scoped_refptr<net::RuleBasedHostResolverProc> rules(
-      new net::RuleBasedHostResolverProc(nullptr));
+  auto rules = base::MakeRefCounted<net::RuleBasedHostResolverProc>(nullptr);
 
   EXPECT_TRUE(IsPrivateHostForTesting(
       resolver.get(), HostPortPair("localhost", 443), NetworkIsolationKey()));
diff --git a/net/proxy_resolution/configured_proxy_resolution_service.cc b/net/proxy_resolution/configured_proxy_resolution_service.cc
index 30072447..6c18fe5e 100644
--- a/net/proxy_resolution/configured_proxy_resolution_service.cc
+++ b/net/proxy_resolution/configured_proxy_resolution_service.cc
@@ -914,11 +914,10 @@
     const NetworkTrafficAnnotationTag& traffic_annotation) {
   // We need the settings to contain an "automatic" setting, otherwise the
   // ProxyResolver dependency we give it will never be used.
-  std::unique_ptr<ProxyConfigService> proxy_config_service(
-      new ProxyConfigServiceFixed(ProxyConfigWithAnnotation(
-          ProxyConfig::CreateFromCustomPacURL(
-              GURL("https://my-pac-script.invalid/wpad.dat")),
-          traffic_annotation)));
+  auto proxy_config_service = std::make_unique<ProxyConfigServiceFixed>(
+      ProxyConfigWithAnnotation(ProxyConfig::CreateFromCustomPacURL(GURL(
+                                    "https://my-pac-script.invalid/wpad.dat")),
+                                traffic_annotation));
 
   return std::make_unique<ConfiguredProxyResolutionService>(
       std::move(proxy_config_service),
@@ -931,9 +930,9 @@
 ConfiguredProxyResolutionService::CreateFixedFromAutoDetectedPacResult(
     const std::string& pac_string,
     const NetworkTrafficAnnotationTag& traffic_annotation) {
-  std::unique_ptr<ProxyConfigService> proxy_config_service(
-      new ProxyConfigServiceFixed(ProxyConfigWithAnnotation(
-          ProxyConfig::CreateAutoDetect(), traffic_annotation)));
+  auto proxy_config_service =
+      std::make_unique<ProxyConfigServiceFixed>(ProxyConfigWithAnnotation(
+          ProxyConfig::CreateAutoDetect(), traffic_annotation));
 
   return std::make_unique<ConfiguredProxyResolutionService>(
       std::move(proxy_config_service),
@@ -1418,8 +1417,7 @@
              << "be used only for examples.";
   return std::make_unique<UnsetProxyConfigService>();
 #elif BUILDFLAG(IS_LINUX)
-  std::unique_ptr<ProxyConfigServiceLinux> linux_config_service(
-      new ProxyConfigServiceLinux());
+  auto linux_config_service = std::make_unique<ProxyConfigServiceLinux>();
 
   // Assume we got called on the thread that runs the default glib
   // main loop, so the current thread is where we should be running
diff --git a/net/proxy_resolution/mock_proxy_resolver.cc b/net/proxy_resolution/mock_proxy_resolver.cc
index 15fb145..4a099722 100644
--- a/net/proxy_resolution/mock_proxy_resolver.cc
+++ b/net/proxy_resolution/mock_proxy_resolver.cc
@@ -54,7 +54,7 @@
     CompletionOnceCallback callback,
     std::unique_ptr<Request>* request,
     const NetLogWithSource& /*net_log*/) {
-  std::unique_ptr<Job> job(new Job(this, url, results, std::move(callback)));
+  auto job = std::make_unique<Job>(this, url, results, std::move(callback));
 
   pending_jobs_.push_back(job.get());
   *request = std::make_unique<RequestImpl>(std::move(job));
@@ -144,8 +144,8 @@
     std::unique_ptr<ProxyResolver>* resolver,
     CompletionOnceCallback callback,
     std::unique_ptr<ProxyResolverFactory::Request>* request_handle) {
-  scoped_refptr<Request> request =
-      new Request(this, pac_script, resolver, std::move(callback));
+  auto request = base::MakeRefCounted<Request>(this, pac_script, resolver,
+                                               std::move(callback));
   pending_requests_.push_back(request);
 
   *request_handle = std::make_unique<Job>(request);
diff --git a/net/proxy_resolution/multi_threaded_proxy_resolver.cc b/net/proxy_resolution/multi_threaded_proxy_resolver.cc
index e6db5db..17ee7eb 100644
--- a/net/proxy_resolution/multi_threaded_proxy_resolver.cc
+++ b/net/proxy_resolution/multi_threaded_proxy_resolver.cc
@@ -452,8 +452,8 @@
   DCHECK_CALLED_ON_VALID_THREAD(thread_checker_);
   DCHECK(!callback.is_null());
 
-  scoped_refptr<GetProxyForURLJob> job(new GetProxyForURLJob(
-      url, network_isolation_key, results, std::move(callback), net_log));
+  auto job = base::MakeRefCounted<GetProxyForURLJob>(
+      url, network_isolation_key, results, std::move(callback), net_log);
 
   // Completion will be notified through |callback|, unless the caller cancels
   // the request using |request|.
@@ -495,10 +495,11 @@
   DCHECK_LT(executors_.size(), max_num_threads_);
   // The "thread number" is used to give the thread a unique name.
   int thread_number = executors_.size();
-  Executor* executor = new Executor(this, thread_number);
+
+  auto executor = base::MakeRefCounted<Executor>(this, thread_number);
   executor->StartJob(
       new CreateResolverJob(script_data_, resolver_factory_.get()));
-  executors_.push_back(base::WrapRefCounted(executor));
+  executors_.push_back(std::move(executor));
 }
 
 void MultiThreadedProxyResolver::OnExecutorReady(Executor* executor) {
@@ -530,7 +531,7 @@
         resolver_factory_(std::move(resolver_factory)),
         max_num_threads_(max_num_threads),
         script_data_(script_data),
-        executor_(new Executor(this, 0)),
+        executor_(base::MakeRefCounted<Executor>(this, 0)),
         callback_(std::move(callback)) {
     executor_->StartJob(
         new CreateResolverJob(script_data_, resolver_factory_.get()));
@@ -593,9 +594,9 @@
     std::unique_ptr<ProxyResolver>* resolver,
     CompletionOnceCallback callback,
     std::unique_ptr<Request>* request) {
-  std::unique_ptr<Job> job(new Job(this, pac_script, resolver,
+  auto job = std::make_unique<Job>(this, pac_script, resolver,
                                    CreateProxyResolverFactory(),
-                                   max_num_threads_, std::move(callback)));
+                                   max_num_threads_, std::move(callback));
   jobs_.insert(job.get());
   *request = std::move(job);
   return ERR_IO_PENDING;
diff --git a/net/proxy_resolution/multi_threaded_proxy_resolver_unittest.cc b/net/proxy_resolution/multi_threaded_proxy_resolver_unittest.cc
index 30a80e5..6c55341d 100644
--- a/net/proxy_resolution/multi_threaded_proxy_resolver_unittest.cc
+++ b/net/proxy_resolution/multi_threaded_proxy_resolver_unittest.cc
@@ -233,8 +233,7 @@
 class MultiThreadedProxyResolverTest : public TestWithTaskEnvironment {
  public:
   void Init(size_t num_threads) {
-    std::unique_ptr<BlockableProxyResolverFactory> factory_owner(
-        new BlockableProxyResolverFactory);
+    auto factory_owner = std::make_unique<BlockableProxyResolverFactory>();
     factory_ = factory_owner.get();
     resolver_factory_ =
         std::make_unique<SingleShotMultiThreadedProxyResolverFactory>(
diff --git a/net/proxy_resolution/network_delegate_error_observer.cc b/net/proxy_resolution/network_delegate_error_observer.cc
index 82612459..563af122 100644
--- a/net/proxy_resolution/network_delegate_error_observer.cc
+++ b/net/proxy_resolution/network_delegate_error_observer.cc
@@ -69,8 +69,7 @@
 NetworkDelegateErrorObserver::NetworkDelegateErrorObserver(
     NetworkDelegate* network_delegate,
     base::SingleThreadTaskRunner* origin_runner)
-    : core_(new Core(network_delegate, origin_runner)) {
-}
+    : core_(base::MakeRefCounted<Core>(network_delegate, origin_runner)) {}
 
 NetworkDelegateErrorObserver::~NetworkDelegateErrorObserver() {
   core_->Shutdown();
diff --git a/net/proxy_resolution/pac_file_data.cc b/net/proxy_resolution/pac_file_data.cc
index 6e695f5..eee2fce 100644
--- a/net/proxy_resolution/pac_file_data.cc
+++ b/net/proxy_resolution/pac_file_data.cc
@@ -11,22 +11,26 @@
 
 // static
 scoped_refptr<PacFileData> PacFileData::FromUTF8(const std::string& utf8) {
-  return new PacFileData(TYPE_SCRIPT_CONTENTS, GURL(), base::UTF8ToUTF16(utf8));
+  return base::WrapRefCounted(
+      new PacFileData(TYPE_SCRIPT_CONTENTS, GURL(), base::UTF8ToUTF16(utf8)));
 }
 
 // static
 scoped_refptr<PacFileData> PacFileData::FromUTF16(const std::u16string& utf16) {
-  return new PacFileData(TYPE_SCRIPT_CONTENTS, GURL(), utf16);
+  return base::WrapRefCounted(
+      new PacFileData(TYPE_SCRIPT_CONTENTS, GURL(), utf16));
 }
 
 // static
 scoped_refptr<PacFileData> PacFileData::FromURL(const GURL& url) {
-  return new PacFileData(TYPE_SCRIPT_URL, url, std::u16string());
+  return base::WrapRefCounted(
+      new PacFileData(TYPE_SCRIPT_URL, url, std::u16string()));
 }
 
 // static
 scoped_refptr<PacFileData> PacFileData::ForAutoDetect() {
-  return new PacFileData(TYPE_AUTO_DETECT, GURL(), std::u16string());
+  return base::WrapRefCounted(
+      new PacFileData(TYPE_AUTO_DETECT, GURL(), std::u16string()));
 }
 
 const std::u16string& PacFileData::utf16() const {
diff --git a/net/proxy_resolution/pac_file_decider_unittest.cc b/net/proxy_resolution/pac_file_decider_unittest.cc
index 6ae66ee1..df2cbd23b 100644
--- a/net/proxy_resolution/pac_file_decider_unittest.cc
+++ b/net/proxy_resolution/pac_file_decider_unittest.cc
@@ -852,8 +852,7 @@
   Rules rules;
   RuleBasedPacFileFetcher fetcher(&rules);
 
-  std::unique_ptr<AsyncFailDhcpFetcher> dhcp_fetcher(
-      new AsyncFailDhcpFetcher());
+  auto dhcp_fetcher = std::make_unique<AsyncFailDhcpFetcher>();
 
   ProxyConfig config;
   config.set_auto_detect(true);
diff --git a/net/proxy_resolution/polling_proxy_config_service.cc b/net/proxy_resolution/polling_proxy_config_service.cc
index a21d4cd8..cc3b8e6e 100644
--- a/net/proxy_resolution/polling_proxy_config_service.cc
+++ b/net/proxy_resolution/polling_proxy_config_service.cc
@@ -183,7 +183,9 @@
     base::TimeDelta poll_interval,
     GetConfigFunction get_config_func,
     const NetworkTrafficAnnotationTag& traffic_annotation)
-    : core_(new Core(poll_interval, get_config_func, traffic_annotation)) {}
+    : core_(base::MakeRefCounted<Core>(poll_interval,
+                                       get_config_func,
+                                       traffic_annotation)) {}
 
 PollingProxyConfigService::~PollingProxyConfigService() {
   core_->Orphan();
diff --git a/net/proxy_resolution/proxy_config_service_android.cc b/net/proxy_resolution/proxy_config_service_android.cc
index 3395d114..4eb28c6 100644
--- a/net/proxy_resolution/proxy_config_service_android.cc
+++ b/net/proxy_resolution/proxy_config_service_android.cc
@@ -495,9 +495,10 @@
 ProxyConfigServiceAndroid::ProxyConfigServiceAndroid(
     const scoped_refptr<base::SequencedTaskRunner>& main_task_runner,
     const scoped_refptr<base::SequencedTaskRunner>& jni_task_runner)
-    : delegate_(new Delegate(main_task_runner,
-                             jni_task_runner,
-                             base::BindRepeating(&GetJavaProperty))) {
+    : delegate_(base::MakeRefCounted<Delegate>(
+          main_task_runner,
+          jni_task_runner,
+          base::BindRepeating(&GetJavaProperty))) {
   delegate_->SetupJNI();
   delegate_->FetchInitialConfig();
 }
@@ -528,9 +529,9 @@
     const scoped_refptr<base::SequencedTaskRunner>& main_task_runner,
     const scoped_refptr<base::SequencedTaskRunner>& jni_task_runner,
     GetPropertyCallback get_property_callback)
-    : delegate_(new Delegate(main_task_runner,
-                             jni_task_runner,
-                             get_property_callback)) {
+    : delegate_(base::MakeRefCounted<Delegate>(main_task_runner,
+                                               jni_task_runner,
+                                               get_property_callback)) {
   delegate_->SetupJNI();
   delegate_->FetchInitialConfig();
 }
diff --git a/net/proxy_resolution/proxy_config_service_linux.cc b/net/proxy_resolution/proxy_config_service_linux.cc
index dd7759b..abac1ab 100644
--- a/net/proxy_resolution/proxy_config_service_linux.cc
+++ b/net/proxy_resolution/proxy_config_service_linux.cc
@@ -238,7 +238,8 @@
 class SettingGetterImplGSettings
     : public ProxyConfigServiceLinux::SettingGetter {
  public:
-  SettingGetterImplGSettings() : debounce_timer_(new base::OneShotTimer()) {}
+  SettingGetterImplGSettings()
+      : debounce_timer_(std::make_unique<base::OneShotTimer>()) {}
 
   SettingGetterImplGSettings(const SettingGetterImplGSettings&) = delete;
   SettingGetterImplGSettings& operator=(const SettingGetterImplGSettings&) =
@@ -516,7 +517,7 @@
 class SettingGetterImplKDE : public ProxyConfigServiceLinux::SettingGetter {
  public:
   explicit SettingGetterImplKDE(base::Environment* env_var_getter)
-      : debounce_timer_(new base::OneShotTimer()),
+      : debounce_timer_(std::make_unique<base::OneShotTimer>()),
         env_var_getter_(env_var_getter) {
     // This has to be called on the UI thread (http://crbug.com/69057).
     base::ThreadRestrictions::ScopedAllowIO allow_io;
@@ -1234,8 +1235,7 @@
     case base::nix::DESKTOP_ENVIRONMENT_UNITY:
 #if defined(USE_GIO)
       {
-      std::unique_ptr<SettingGetterImplGSettings> gs_getter(
-          new SettingGetterImplGSettings());
+      auto gs_getter = std::make_unique<SettingGetterImplGSettings>();
       // We have to load symbols and check the GNOME version in use to decide
       // if we should use the gsettings getter. See CheckVersion().
       if (gs_getter->CheckVersion(env_var_getter_.get()))
@@ -1438,9 +1438,9 @@
 }
 
 ProxyConfigServiceLinux::ProxyConfigServiceLinux()
-    : delegate_(new Delegate(base::Environment::Create(),
-                             absl::nullopt,
-                             absl::nullopt)) {}
+    : delegate_(base::MakeRefCounted<Delegate>(base::Environment::Create(),
+                                               absl::nullopt,
+                                               absl::nullopt)) {}
 
 ProxyConfigServiceLinux::~ProxyConfigServiceLinux() {
   delegate_->PostDestroyTask();
@@ -1449,17 +1449,17 @@
 ProxyConfigServiceLinux::ProxyConfigServiceLinux(
     std::unique_ptr<base::Environment> env_var_getter,
     const NetworkTrafficAnnotationTag& traffic_annotation)
-    : delegate_(new Delegate(std::move(env_var_getter),
-                             absl::nullopt,
-                             traffic_annotation)) {}
+    : delegate_(base::MakeRefCounted<Delegate>(std::move(env_var_getter),
+                                               absl::nullopt,
+                                               traffic_annotation)) {}
 
 ProxyConfigServiceLinux::ProxyConfigServiceLinux(
     std::unique_ptr<base::Environment> env_var_getter,
     SettingGetter* setting_getter,
     const NetworkTrafficAnnotationTag& traffic_annotation)
-    : delegate_(new Delegate(std::move(env_var_getter),
-                             base::WrapUnique(setting_getter),
-                             traffic_annotation)) {}
+    : delegate_(base::MakeRefCounted<Delegate>(std::move(env_var_getter),
+                                               base::WrapUnique(setting_getter),
+                                               traffic_annotation)) {}
 
 void ProxyConfigServiceLinux::AddObserver(Observer* observer) {
   delegate_->AddObserver(observer);
diff --git a/net/proxy_resolution/proxy_config_service_linux_unittest.cc b/net/proxy_resolution/proxy_config_service_linux_unittest.cc
index a290811..944c4e0 100644
--- a/net/proxy_resolution/proxy_config_service_linux_unittest.cc
+++ b/net/proxy_resolution/proxy_config_service_linux_unittest.cc
@@ -768,7 +768,7 @@
   for (size_t i = 0; i < std::size(tests); ++i) {
     SCOPED_TRACE(base::StringPrintf("Test[%" PRIuS "] %s", i,
                                     tests[i].description.c_str()));
-    std::unique_ptr<MockEnvironment> env(new MockEnvironment);
+    auto env = std::make_unique<MockEnvironment>();
     MockSettingGetter* setting_getter = new MockSettingGetter;
     SyncConfigGetter sync_config_getter(new ProxyConfigServiceLinux(
         std::move(env), setting_getter, TRAFFIC_ANNOTATION_FOR_TESTS));
@@ -1097,7 +1097,7 @@
   for (size_t i = 0; i < std::size(tests); ++i) {
     SCOPED_TRACE(base::StringPrintf("Test[%" PRIuS "] %s", i,
                                     tests[i].description.c_str()));
-    std::unique_ptr<MockEnvironment> env(new MockEnvironment);
+    auto env = std::make_unique<MockEnvironment>();
     env->values = tests[i].values;
     MockSettingGetter* setting_getter = new MockSettingGetter;
     SyncConfigGetter sync_config_getter(new ProxyConfigServiceLinux(
@@ -1117,7 +1117,7 @@
 }
 
 TEST_F(ProxyConfigServiceLinuxTest, GSettingsNotification) {
-  std::unique_ptr<MockEnvironment> env(new MockEnvironment);
+  auto env = std::make_unique<MockEnvironment>();
   MockSettingGetter* setting_getter = new MockSettingGetter;
   ProxyConfigServiceLinux* service = new ProxyConfigServiceLinux(
       std::move(env), setting_getter, TRAFFIC_ANNOTATION_FOR_TESTS);
@@ -1708,7 +1708,7 @@
   for (size_t i = 0; i < std::size(tests); ++i) {
     SCOPED_TRACE(base::StringPrintf("Test[%" PRIuS "] %s", i,
                                     tests[i].description.c_str()));
-    std::unique_ptr<MockEnvironment> env(new MockEnvironment);
+    auto env = std::make_unique<MockEnvironment>();
     env->values = tests[i].env_values;
     // Force the KDE getter to be used and tell it where the test is.
     env->values.DESKTOP_SESSION = "kde4";
@@ -1758,7 +1758,7 @@
 
   {
     SCOPED_TRACE("KDE4, no .kde4 directory, verify fallback");
-    std::unique_ptr<MockEnvironment> env(new MockEnvironment);
+    auto env = std::make_unique<MockEnvironment>();
     env->values.DESKTOP_SESSION = "kde4";
     env->values.HOME = user_home_.value().c_str();
     SyncConfigGetter sync_config_getter(new ProxyConfigServiceLinux(
@@ -1779,7 +1779,7 @@
 
   {
     SCOPED_TRACE("KDE4, .kde4 directory present, use it");
-    std::unique_ptr<MockEnvironment> env(new MockEnvironment);
+    auto env = std::make_unique<MockEnvironment>();
     env->values.DESKTOP_SESSION = "kde4";
     env->values.HOME = user_home_.value().c_str();
     SyncConfigGetter sync_config_getter(new ProxyConfigServiceLinux(
@@ -1794,7 +1794,7 @@
 
   {
     SCOPED_TRACE("KDE3, .kde4 directory present, ignore it");
-    std::unique_ptr<MockEnvironment> env(new MockEnvironment);
+    auto env = std::make_unique<MockEnvironment>();
     env->values.DESKTOP_SESSION = "kde";
     env->values.HOME = user_home_.value().c_str();
     SyncConfigGetter sync_config_getter(new ProxyConfigServiceLinux(
@@ -1809,7 +1809,7 @@
 
   {
     SCOPED_TRACE("KDE4, .kde4 directory present, KDEHOME set to .kde");
-    std::unique_ptr<MockEnvironment> env(new MockEnvironment);
+    auto env = std::make_unique<MockEnvironment>();
     env->values.DESKTOP_SESSION = "kde4";
     env->values.HOME = user_home_.value().c_str();
     env->values.KDEHOME = kde_home_.value().c_str();
@@ -1829,7 +1829,7 @@
 
   {
     SCOPED_TRACE("KDE4, very old .kde4 directory present, use .kde");
-    std::unique_ptr<MockEnvironment> env(new MockEnvironment);
+    auto env = std::make_unique<MockEnvironment>();
     env->values.DESKTOP_SESSION = "kde4";
     env->values.HOME = user_home_.value().c_str();
     SyncConfigGetter sync_config_getter(new ProxyConfigServiceLinux(
@@ -1849,7 +1849,7 @@
 
   {
     SCOPED_TRACE("KDE5, .kde and .kde4 present, use .config");
-    std::unique_ptr<MockEnvironment> env(new MockEnvironment);
+    auto env = std::make_unique<MockEnvironment>();
     env->values.XDG_CURRENT_DESKTOP = "KDE";
     env->values.KDE_SESSION_VERSION = "5";
     env->values.HOME = user_home_.value().c_str();
@@ -1874,7 +1874,7 @@
                       "Proxy Config Script=http://version1/wpad.dat\n"));
 
   // Initialize the config service using kioslaverc.
-  std::unique_ptr<MockEnvironment> env(new MockEnvironment);
+  auto env = std::make_unique<MockEnvironment>();
   env->values.DESKTOP_SESSION = "kde4";
   env->values.HOME = user_home_.value().c_str();
   SyncConfigGetter sync_config_getter(new ProxyConfigServiceLinux(
@@ -2009,7 +2009,7 @@
   for (size_t i = 0; i < std::size(tests); ++i) {
     SCOPED_TRACE(base::StringPrintf("Test[%" PRIuS "] %s", i,
                                     tests[i].description.c_str()));
-    std::unique_ptr<MockEnvironment> env(new MockEnvironment);
+    auto env = std::make_unique<MockEnvironment>();
     env->values.XDG_CURRENT_DESKTOP = "KDE";
     env->values.KDE_SESSION_VERSION = "5";
     env->values.HOME = user_home_.value().c_str();
diff --git a/net/proxy_resolution/proxy_config_service_mac.cc b/net/proxy_resolution/proxy_config_service_mac.cc
index 84f4b6536..77d3cd8 100644
--- a/net/proxy_resolution/proxy_config_service_mac.cc
+++ b/net/proxy_resolution/proxy_config_service_mac.cc
@@ -198,7 +198,7 @@
     const scoped_refptr<base::SequencedTaskRunner>& sequenced_task_runner,
     const NetworkTrafficAnnotationTag& traffic_annotation)
     : forwarder_(this),
-      helper_(new Helper(this)),
+      helper_(base::MakeRefCounted<Helper>(this)),
       sequenced_task_runner_(sequenced_task_runner),
       traffic_annotation_(traffic_annotation) {
   DCHECK(sequenced_task_runner_.get());
diff --git a/net/proxy_resolution/win/dhcp_pac_file_adapter_fetcher_win_unittest.cc b/net/proxy_resolution/win/dhcp_pac_file_adapter_fetcher_win_unittest.cc
index b6d642f..d25ad3f 100644
--- a/net/proxy_resolution/win/dhcp_pac_file_adapter_fetcher_win_unittest.cc
+++ b/net/proxy_resolution/win/dhcp_pac_file_adapter_fetcher_win_unittest.cc
@@ -100,7 +100,7 @@
   };
 
   DhcpQuery* ImplCreateDhcpQuery() override {
-    dhcp_query_ = new DelayingDhcpQuery();
+    dhcp_query_ = base::MakeRefCounted<DelayingDhcpQuery>();
     dhcp_query_->dhcp_delay_ = dhcp_delay_;
     dhcp_query_->configured_url_ = configured_url_;
     return dhcp_query_.get();
@@ -150,7 +150,7 @@
  public:
   FetcherClient()
       : url_request_context_(CreateTestURLRequestContextBuilder()->Build()),
-        fetcher_(new MockDhcpPacFileAdapterFetcher(
+        fetcher_(std::make_unique<MockDhcpPacFileAdapterFetcher>(
             url_request_context_.get(),
             base::ThreadPool::CreateSequencedTaskRunner(
                 {base::MayBlock(),
diff --git a/net/proxy_resolution/win/dhcp_pac_file_fetcher_win.cc b/net/proxy_resolution/win/dhcp_pac_file_fetcher_win.cc
index 3cc79a9..a44faad6 100644
--- a/net/proxy_resolution/win/dhcp_pac_file_fetcher_win.cc
+++ b/net/proxy_resolution/win/dhcp_pac_file_fetcher_win.cc
@@ -574,7 +574,7 @@
 }
 
 DhcpPacFileFetcherWin::AdapterQuery::AdapterQuery()
-    : logging_info_(new DhcpAdapterNamesLoggingInfo()) {}
+    : logging_info_(std::make_unique<DhcpAdapterNamesLoggingInfo>()) {}
 
 void DhcpPacFileFetcherWin::AdapterQuery::GetCandidateAdapterNames() {
   logging_info_->error = ERROR_NO_DATA;
diff --git a/net/proxy_resolution/win/dhcp_pac_file_fetcher_win_unittest.cc b/net/proxy_resolution/win/dhcp_pac_file_fetcher_win_unittest.cc
index a4bb2d82..35c255c 100644
--- a/net/proxy_resolution/win/dhcp_pac_file_fetcher_win_unittest.cc
+++ b/net/proxy_resolution/win/dhcp_pac_file_fetcher_win_unittest.cc
@@ -53,7 +53,7 @@
  public:
   RealFetchTester()
       : context_(CreateTestURLRequestContextBuilder()->Build()),
-        fetcher_(new DhcpPacFileFetcherWin(context_.get())) {
+        fetcher_(std::make_unique<DhcpPacFileFetcherWin>(context_.get())) {
     // Make sure the test ends.
     timeout_.Start(FROM_HERE, base::Seconds(5), this,
                    &RealFetchTester::OnTimeout);
@@ -308,9 +308,8 @@
                                    int result,
                                    std::u16string pac_script,
                                    base::TimeDelta fetch_delay) {
-    std::unique_ptr<DummyDhcpPacFileAdapterFetcher> adapter_fetcher(
-        new DummyDhcpPacFileAdapterFetcher(url_request_context(),
-                                           GetTaskRunner()));
+    auto adapter_fetcher = std::make_unique<DummyDhcpPacFileAdapterFetcher>(
+        url_request_context(), GetTaskRunner());
     adapter_fetcher->Configure(
         did_finish, result, pac_script, fetch_delay.InMilliseconds());
     PushBackAdapter(adapter_name, adapter_fetcher.release());
@@ -347,7 +346,7 @@
     next_adapter_fetcher_index_ = 0;
     num_fetchers_created_ = 0;
     adapter_fetchers_.clear();
-    adapter_query_ = new MockAdapterQuery();
+    adapter_query_ = base::MakeRefCounted<MockAdapterQuery>();
     max_wait_ = TestTimeouts::tiny_timeout();
   }
 
@@ -434,9 +433,8 @@
 // the ReuseFetcher test at the bottom.
 void TestNormalCaseURLConfiguredOneAdapter(FetcherClient* client) {
   auto context = CreateTestURLRequestContextBuilder()->Build();
-  std::unique_ptr<DummyDhcpPacFileAdapterFetcher> adapter_fetcher(
-      new DummyDhcpPacFileAdapterFetcher(context.get(),
-                                         client->GetTaskRunner()));
+  auto adapter_fetcher = std::make_unique<DummyDhcpPacFileAdapterFetcher>(
+      context.get(), client->GetTaskRunner());
   adapter_fetcher->Configure(true, OK, u"bingo", 1);
   client->fetcher_.PushBackAdapter("a", adapter_fetcher.release());
   client->RunTest();
@@ -607,9 +605,8 @@
 
 void TestImmediateCancel(FetcherClient* client) {
   auto context = CreateTestURLRequestContextBuilder()->Build();
-  std::unique_ptr<DummyDhcpPacFileAdapterFetcher> adapter_fetcher(
-      new DummyDhcpPacFileAdapterFetcher(context.get(),
-                                         client->GetTaskRunner()));
+  auto adapter_fetcher = std::make_unique<DummyDhcpPacFileAdapterFetcher>(
+      context.get(), client->GetTaskRunner());
   adapter_fetcher->Configure(true, OK, u"bingo", 1);
   client->fetcher_.PushBackAdapter("a", adapter_fetcher.release());
   client->RunTest();
@@ -669,9 +666,8 @@
 
   FetcherClient client;
   auto context = CreateTestURLRequestContextBuilder()->Build();
-  std::unique_ptr<DummyDhcpPacFileAdapterFetcher> adapter_fetcher(
-      new DummyDhcpPacFileAdapterFetcher(context.get(),
-                                         client.GetTaskRunner()));
+  auto adapter_fetcher = std::make_unique<DummyDhcpPacFileAdapterFetcher>(
+      context.get(), client.GetTaskRunner());
   adapter_fetcher->Configure(true, OK, u"bingo", 1);
   client.fetcher_.PushBackAdapter("a", adapter_fetcher.release());
   client.RunTest();
diff --git a/net/quic/bidirectional_stream_quic_impl_unittest.cc b/net/quic/bidirectional_stream_quic_impl_unittest.cc
index 2cd013f8..d0522483 100644
--- a/net/quic/bidirectional_stream_quic_impl_unittest.cc
+++ b/net/quic/bidirectional_stream_quic_impl_unittest.cc
@@ -512,10 +512,10 @@
         base::make_span(mock_writes_.get(), writes_.size()));
     socket_data_->set_printer(&printer_);
 
-    std::unique_ptr<MockUDPClientSocket> socket(
-        new MockUDPClientSocket(socket_data_.get(), NetLog::Get()));
+    auto socket = std::make_unique<MockUDPClientSocket>(socket_data_.get(),
+                                                        NetLog::Get());
     socket->Connect(peer_addr_);
-    runner_ = new TestTaskRunner(&clock_);
+    runner_ = base::MakeRefCounted<TestTaskRunner>(&clock_);
     helper_ = std::make_unique<QuicChromiumConnectionHelper>(
         &clock_, &random_generator_);
     alarm_factory_ =
@@ -872,8 +872,8 @@
 
   scoped_refptr<IOBuffer> read_buffer =
       base::MakeRefCounted<IOBuffer>(kReadBufferSize);
-  std::unique_ptr<TestDelegateBase> delegate(
-      new TestDelegateBase(read_buffer.get(), kReadBufferSize));
+  auto delegate =
+      std::make_unique<TestDelegateBase>(read_buffer.get(), kReadBufferSize);
   delegate->set_trailers_expected(true);
   delegate->Start(&request, net_log_with_source(),
                   session()->CreateHandle(destination_));
@@ -980,16 +980,16 @@
   // Start first request.
   scoped_refptr<IOBuffer> read_buffer =
       base::MakeRefCounted<IOBuffer>(kReadBufferSize);
-  std::unique_ptr<TestDelegateBase> delegate(
-      new TestDelegateBase(read_buffer.get(), kReadBufferSize));
+  auto delegate =
+      std::make_unique<TestDelegateBase>(read_buffer.get(), kReadBufferSize);
   delegate->Start(&request, net_log_with_source(),
                   session()->CreateHandle(destination_));
 
   // Start second request.
   scoped_refptr<IOBuffer> read_buffer2 =
       base::MakeRefCounted<IOBuffer>(kReadBufferSize);
-  std::unique_ptr<TestDelegateBase> delegate2(
-      new TestDelegateBase(read_buffer2.get(), kReadBufferSize));
+  auto delegate2 =
+      std::make_unique<TestDelegateBase>(read_buffer2.get(), kReadBufferSize);
   delegate2->Start(&request, net_log_with_source(),
                    session()->CreateHandle(destination_));
 
@@ -1078,8 +1078,8 @@
 
   scoped_refptr<IOBuffer> read_buffer =
       base::MakeRefCounted<IOBuffer>(kReadBufferSize);
-  std::unique_ptr<TestDelegateBase> delegate(
-      new TestDelegateBase(read_buffer.get(), kReadBufferSize));
+  auto delegate =
+      std::make_unique<TestDelegateBase>(read_buffer.get(), kReadBufferSize);
   delegate->DoNotSendRequestHeadersAutomatically();
   delegate->Start(&request, net_log_with_source(),
                   session()->CreateHandle(destination_));
@@ -1209,8 +1209,8 @@
 
   scoped_refptr<IOBuffer> read_buffer =
       base::MakeRefCounted<IOBuffer>(kReadBufferSize);
-  std::unique_ptr<TestDelegateBase> delegate(
-      new TestDelegateBase(read_buffer.get(), kReadBufferSize));
+  auto delegate =
+      std::make_unique<TestDelegateBase>(read_buffer.get(), kReadBufferSize);
   delegate->DoNotSendRequestHeadersAutomatically();
   delegate->Start(&request, net_log_with_source(),
                   session()->CreateHandle(destination_));
@@ -1335,8 +1335,8 @@
 
   scoped_refptr<IOBuffer> read_buffer =
       base::MakeRefCounted<IOBuffer>(kReadBufferSize);
-  std::unique_ptr<TestDelegateBase> delegate(
-      new TestDelegateBase(read_buffer.get(), kReadBufferSize));
+  auto delegate =
+      std::make_unique<TestDelegateBase>(read_buffer.get(), kReadBufferSize);
   delegate->DoNotSendRequestHeadersAutomatically();
   delegate->Start(&request, net_log_with_source(),
                   session()->CreateHandle(destination_));
@@ -1439,8 +1439,8 @@
 
   scoped_refptr<IOBuffer> read_buffer =
       base::MakeRefCounted<IOBuffer>(kReadBufferSize);
-  std::unique_ptr<DeleteStreamDelegate> delegate(new DeleteStreamDelegate(
-      read_buffer.get(), kReadBufferSize, DeleteStreamDelegate::ON_FAILED));
+  auto delegate = std::make_unique<DeleteStreamDelegate>(
+      read_buffer.get(), kReadBufferSize, DeleteStreamDelegate::ON_FAILED);
   delegate->DoNotSendRequestHeadersAutomatically();
   delegate->Start(&request, net_log_with_source(),
                   session()->CreateHandle(destination_));
@@ -1476,8 +1476,8 @@
 
   scoped_refptr<IOBuffer> read_buffer =
       base::MakeRefCounted<IOBuffer>(kReadBufferSize);
-  std::unique_ptr<DeleteStreamDelegate> delegate(new DeleteStreamDelegate(
-      read_buffer.get(), kReadBufferSize, DeleteStreamDelegate::ON_FAILED));
+  auto delegate = std::make_unique<DeleteStreamDelegate>(
+      read_buffer.get(), kReadBufferSize, DeleteStreamDelegate::ON_FAILED);
   delegate->DoNotSendRequestHeadersAutomatically();
   delegate->Start(&request, net_log_with_source(),
                   session()->CreateHandle(destination_));
@@ -1527,8 +1527,8 @@
 
   scoped_refptr<IOBuffer> read_buffer =
       base::MakeRefCounted<IOBuffer>(kReadBufferSize);
-  std::unique_ptr<TestDelegateBase> delegate(
-      new TestDelegateBase(read_buffer.get(), kReadBufferSize));
+  auto delegate =
+      std::make_unique<TestDelegateBase>(read_buffer.get(), kReadBufferSize);
   delegate->Start(&request, net_log_with_source(),
                   session()->CreateHandle(destination_));
   ConfirmHandshake();
@@ -1615,8 +1615,8 @@
 
   scoped_refptr<IOBuffer> read_buffer =
       base::MakeRefCounted<IOBuffer>(kReadBufferSize);
-  std::unique_ptr<TestDelegateBase> delegate(
-      new TestDelegateBase(read_buffer.get(), kReadBufferSize));
+  auto delegate =
+      std::make_unique<TestDelegateBase>(read_buffer.get(), kReadBufferSize);
   delegate->set_trailers_expected(true);
   delegate->Start(&request, net_log_with_source(),
                   session()->CreateHandle(destination_));
@@ -1732,8 +1732,8 @@
 
   scoped_refptr<IOBuffer> read_buffer =
       base::MakeRefCounted<IOBuffer>(kReadBufferSize);
-  std::unique_ptr<TestDelegateBase> delegate(
-      new TestDelegateBase(read_buffer.get(), kReadBufferSize));
+  auto delegate =
+      std::make_unique<TestDelegateBase>(read_buffer.get(), kReadBufferSize);
   delegate->Start(&request, net_log_with_source(),
                   session()->CreateHandle(destination_));
   ConfirmHandshake();
@@ -1827,8 +1827,8 @@
 
   scoped_refptr<IOBuffer> read_buffer =
       base::MakeRefCounted<IOBuffer>(kReadBufferSize);
-  std::unique_ptr<TestDelegateBase> delegate(
-      new TestDelegateBase(read_buffer.get(), kReadBufferSize));
+  auto delegate =
+      std::make_unique<TestDelegateBase>(read_buffer.get(), kReadBufferSize);
   delegate->Start(&request, net_log_with_source(),
                   session()->CreateHandle(destination_));
   delegate->WaitUntilNextCallback(kOnStreamReady);
@@ -1880,8 +1880,8 @@
 
   scoped_refptr<IOBuffer> read_buffer =
       base::MakeRefCounted<IOBuffer>(kReadBufferSize);
-  std::unique_ptr<TestDelegateBase> delegate(
-      new TestDelegateBase(read_buffer.get(), kReadBufferSize));
+  auto delegate =
+      std::make_unique<TestDelegateBase>(read_buffer.get(), kReadBufferSize);
   delegate->Start(&request, net_log_with_source(),
                   session()->CreateHandle(destination_));
   delegate->WaitUntilNextCallback(kOnStreamReady);
@@ -1945,8 +1945,8 @@
 
   scoped_refptr<IOBuffer> read_buffer =
       base::MakeRefCounted<IOBuffer>(kReadBufferSize);
-  std::unique_ptr<TestDelegateBase> delegate(
-      new TestDelegateBase(read_buffer.get(), kReadBufferSize));
+  auto delegate =
+      std::make_unique<TestDelegateBase>(read_buffer.get(), kReadBufferSize);
   delegate->Start(&request, net_log_with_source(),
                   session()->CreateHandle(destination_));
   ConfirmHandshake();
@@ -2004,8 +2004,8 @@
 
   scoped_refptr<IOBuffer> read_buffer =
       base::MakeRefCounted<IOBuffer>(kReadBufferSize);
-  std::unique_ptr<TestDelegateBase> delegate(
-      new TestDelegateBase(read_buffer.get(), kReadBufferSize));
+  auto delegate =
+      std::make_unique<TestDelegateBase>(read_buffer.get(), kReadBufferSize);
   delegate->Start(&request, net_log_with_source(),
                   session()->CreateHandle(destination_));
   delegate->WaitUntilNextCallback(kOnFailed);
@@ -2028,8 +2028,8 @@
 
   scoped_refptr<IOBuffer> read_buffer =
       base::MakeRefCounted<IOBuffer>(kReadBufferSize);
-  std::unique_ptr<TestDelegateBase> delegate(
-      new TestDelegateBase(read_buffer.get(), kReadBufferSize));
+  auto delegate =
+      std::make_unique<TestDelegateBase>(read_buffer.get(), kReadBufferSize);
   delegate->Start(&request, net_log_with_source(),
                   session()->CreateHandle(destination_));
   delegate->WaitUntilNextCallback(kOnFailed);
@@ -2054,8 +2054,8 @@
 
   scoped_refptr<IOBuffer> read_buffer =
       base::MakeRefCounted<IOBuffer>(kReadBufferSize);
-  std::unique_ptr<DeleteStreamDelegate> delegate(new DeleteStreamDelegate(
-      read_buffer.get(), kReadBufferSize, DeleteStreamDelegate::ON_FAILED));
+  auto delegate = std::make_unique<DeleteStreamDelegate>(
+      read_buffer.get(), kReadBufferSize, DeleteStreamDelegate::ON_FAILED);
   delegate->Start(&request, net_log_with_source(),
                   session()->CreateHandle(destination_));
   ConfirmHandshake();
@@ -2087,9 +2087,9 @@
 
   scoped_refptr<IOBuffer> read_buffer =
       base::MakeRefCounted<IOBuffer>(kReadBufferSize);
-  std::unique_ptr<DeleteStreamDelegate> delegate(
-      new DeleteStreamDelegate(read_buffer.get(), kReadBufferSize,
-                               DeleteStreamDelegate::ON_STREAM_READY));
+  auto delegate = std::make_unique<DeleteStreamDelegate>(
+      read_buffer.get(), kReadBufferSize,
+      DeleteStreamDelegate::ON_STREAM_READY);
   delegate->Start(&request, net_log_with_source(),
                   session()->CreateHandle(destination_));
   ConfirmHandshake();
@@ -2121,8 +2121,8 @@
 
   scoped_refptr<IOBuffer> read_buffer =
       base::MakeRefCounted<IOBuffer>(kReadBufferSize);
-  std::unique_ptr<TestDelegateBase> delegate(
-      new TestDelegateBase(read_buffer.get(), kReadBufferSize));
+  auto delegate =
+      std::make_unique<TestDelegateBase>(read_buffer.get(), kReadBufferSize);
   delegate->Start(&request, net_log_with_source(),
                   session()->CreateHandle(destination_));
   ConfirmHandshake();
@@ -2179,9 +2179,9 @@
 
   scoped_refptr<IOBuffer> read_buffer =
       base::MakeRefCounted<IOBuffer>(kReadBufferSize);
-  std::unique_ptr<DeleteStreamDelegate> delegate(
-      new DeleteStreamDelegate(read_buffer.get(), kReadBufferSize,
-                               DeleteStreamDelegate::ON_HEADERS_RECEIVED));
+  auto delegate = std::make_unique<DeleteStreamDelegate>(
+      read_buffer.get(), kReadBufferSize,
+      DeleteStreamDelegate::ON_HEADERS_RECEIVED);
   delegate->Start(&request, net_log_with_source(),
                   session()->CreateHandle(destination_));
   ConfirmHandshake();
@@ -2230,8 +2230,8 @@
 
   scoped_refptr<IOBuffer> read_buffer =
       base::MakeRefCounted<IOBuffer>(kReadBufferSize);
-  std::unique_ptr<DeleteStreamDelegate> delegate(new DeleteStreamDelegate(
-      read_buffer.get(), kReadBufferSize, DeleteStreamDelegate::ON_DATA_READ));
+  auto delegate = std::make_unique<DeleteStreamDelegate>(
+      read_buffer.get(), kReadBufferSize, DeleteStreamDelegate::ON_DATA_READ);
   delegate->Start(&request, net_log_with_source(),
                   session()->CreateHandle(destination_));
   ConfirmHandshake();
@@ -2297,8 +2297,8 @@
 
   scoped_refptr<IOBuffer> read_buffer =
       base::MakeRefCounted<IOBuffer>(kReadBufferSize);
-  std::unique_ptr<TestDelegateBase> delegate(
-      new TestDelegateBase(read_buffer.get(), kReadBufferSize));
+  auto delegate =
+      std::make_unique<TestDelegateBase>(read_buffer.get(), kReadBufferSize);
 
   delegate->Start(&request, net_log_with_source(),
                   session()->CreateHandle(destination_));
@@ -2367,9 +2367,9 @@
 
   scoped_refptr<IOBuffer> read_buffer =
       base::MakeRefCounted<IOBuffer>(kReadBufferSize);
-  std::unique_ptr<DeleteStreamDelegate> delegate(
-      new DeleteStreamDelegate(read_buffer.get(), kReadBufferSize,
-                               DeleteStreamDelegate::ON_TRAILERS_RECEIVED));
+  auto delegate = std::make_unique<DeleteStreamDelegate>(
+      read_buffer.get(), kReadBufferSize,
+      DeleteStreamDelegate::ON_TRAILERS_RECEIVED);
   delegate->Start(&request, net_log_with_source(),
                   session()->CreateHandle(destination_));
   ConfirmHandshake();
@@ -2442,8 +2442,8 @@
 
   scoped_refptr<IOBuffer> read_buffer =
       base::MakeRefCounted<IOBuffer>(kReadBufferSize);
-  std::unique_ptr<TestDelegateBase> delegate(
-      new TestDelegateBase(read_buffer.get(), kReadBufferSize));
+  auto delegate =
+      std::make_unique<TestDelegateBase>(read_buffer.get(), kReadBufferSize);
   delegate->set_trailers_expected(true);
   // QuicChromiumClientSession::Handle::RequestStream() returns OK synchronously
   // because Initialize() has established a Session.
diff --git a/net/quic/crypto/proof_test_chromium.cc b/net/quic/crypto/proof_test_chromium.cc
index e8aa2131..8933e51 100644
--- a/net/quic/crypto/proof_test_chromium.cc
+++ b/net/quic/crypto/proof_test_chromium.cc
@@ -67,8 +67,8 @@
   string error_details;
   std::unique_ptr<quic::ProofVerifyContext> verify_context(
       quic::test::crypto_test_utils::ProofVerifyContextForTesting());
-  std::unique_ptr<TestProofVerifierCallback> callback(
-      new TestProofVerifierCallback(&comp_callback, &ok, &error_details));
+  auto callback = std::make_unique<TestProofVerifierCallback>(
+      &comp_callback, &ok, &error_details);
 
   quic::QuicAsyncStatus status = verifier->VerifyProof(
       hostname, port, server_config, quic_version, chlo_hash, certs, "", proof,
@@ -151,10 +151,9 @@
   quic::QuicSocketAddress server_addr;
   quic::QuicSocketAddress client_addr;
 
-  std::unique_ptr<quic::ProofSource::Callback> cb(
-      new TestCallback(&called, &ok, &chain, &proof));
-  std::unique_ptr<quic::ProofSource::Callback> first_cb(
-      new TestCallback(&first_called, &first_ok, &first_chain, &first_proof));
+  auto cb = std::make_unique<TestCallback>(&called, &ok, &chain, &proof);
+  auto first_cb = std::make_unique<TestCallback>(&first_called, &first_ok,
+                                                 &first_chain, &first_proof);
 
   // GetProof here expects the async method to invoke the callback
   // synchronously.
@@ -289,8 +288,7 @@
   quic::QuicCryptoProof proof;
   quic::QuicSocketAddress server_addr;
   quic::QuicSocketAddress client_addr;
-  std::unique_ptr<quic::ProofSource::Callback> cb(
-      new TestCallback(&called, &ok, &chain, &proof));
+  auto cb = std::make_unique<TestCallback>(&called, &ok, &chain, &proof);
 
   // GetProof here expects the async method to invoke the callback
   // synchronously.
diff --git a/net/quic/crypto/proof_verifier_chromium_test.cc b/net/quic/crypto/proof_verifier_chromium_test.cc
index 9b88c29..ca64d1f 100644
--- a/net/quic/crypto/proof_verifier_chromium_test.cc
+++ b/net/quic/crypto/proof_verifier_chromium_test.cc
@@ -170,8 +170,9 @@
 class ProofVerifierChromiumTest : public ::testing::Test {
  public:
   ProofVerifierChromiumTest()
-      : verify_context_(new ProofVerifyContextChromium(0 /*cert_verify_flags*/,
-                                                       NetLogWithSource())) {}
+      : verify_context_(std::make_unique<ProofVerifyContextChromium>(
+            0 /*cert_verify_flags*/,
+            NetLogWithSource())) {}
 
   void SetUp() override {
     EXPECT_CALL(ct_policy_enforcer_, CheckCompliance(_, _, _))
@@ -251,8 +252,7 @@
                                        &transport_security_state_, nullptr, {},
                                        NetworkIsolationKey());
 
-  std::unique_ptr<DummyProofVerifierCallback> callback(
-      new DummyProofVerifierCallback);
+  auto callback = std::make_unique<DummyProofVerifierCallback>();
   quic::QuicAsyncStatus status = proof_verifier.VerifyProof(
       kTestHostname, kTestPort, kTestConfig, kTestTransportVersion,
       kTestChloHash, certs_, kTestEmptySCT, GetTestSignature(),
@@ -286,8 +286,7 @@
                                        &transport_security_state_, nullptr, {},
                                        NetworkIsolationKey());
 
-  std::unique_ptr<DummyProofVerifierCallback> callback(
-      new DummyProofVerifierCallback);
+  auto callback = std::make_unique<DummyProofVerifierCallback>();
   quic::QuicAsyncStatus status = proof_verifier.VerifyProof(
       kTestHostname, kTestPort, kTestConfig, kTestTransportVersion,
       kTestChloHash, certs_, kTestEmptySCT, GetTestSignature(),
@@ -341,8 +340,7 @@
                                        &transport_security_state_, nullptr, {},
                                        NetworkIsolationKey());
 
-  std::unique_ptr<DummyProofVerifierCallback> callback(
-      new DummyProofVerifierCallback);
+  auto callback = std::make_unique<DummyProofVerifierCallback>();
   quic::QuicAsyncStatus status = proof_verifier.VerifyCertChain(
       kTestHostname, kTestPort, certs_, kTestEmptyOCSPResponse,
       ct::GetSCTListForTesting(), verify_context_.get(), &error_details_,
@@ -384,8 +382,7 @@
                                        &transport_security_state_, nullptr, {},
                                        NetworkIsolationKey());
 
-  std::unique_ptr<DummyProofVerifierCallback> callback(
-      new DummyProofVerifierCallback);
+  auto callback = std::make_unique<DummyProofVerifierCallback>();
   quic::QuicAsyncStatus status = proof_verifier.VerifyCertChain(
       kTestHostname, kTestPort, certs_, kTestEmptyOCSPResponse,
       ct::GetSCTListWithInvalidSCT(), verify_context_.get(), &error_details_,
@@ -402,8 +399,7 @@
                                        &transport_security_state_, nullptr, {},
                                        NetworkIsolationKey());
 
-  std::unique_ptr<DummyProofVerifierCallback> callback(
-      new DummyProofVerifierCallback);
+  auto callback = std::make_unique<DummyProofVerifierCallback>();
   quic::QuicAsyncStatus status = proof_verifier.VerifyProof(
       kTestHostname, kTestPort, kTestConfig, kTestTransportVersion,
       kTestChloHash, certs_, kTestEmptySCT, kTestEmptySignature,
@@ -427,8 +423,7 @@
                                        &transport_security_state_, nullptr, {},
                                        NetworkIsolationKey());
 
-  std::unique_ptr<DummyProofVerifierCallback> callback(
-      new DummyProofVerifierCallback);
+  auto callback = std::make_unique<DummyProofVerifierCallback>();
   quic::QuicAsyncStatus status = proof_verifier.VerifyProof(
       kTestHostname, kTestPort, kTestConfig, kTestTransportVersion,
       kTestChloHash, certs_, kTestEmptySCT, GetTestSignature(),
@@ -471,8 +466,7 @@
                                        &transport_security_state_, nullptr, {},
                                        NetworkIsolationKey());
 
-  std::unique_ptr<DummyProofVerifierCallback> callback(
-      new DummyProofVerifierCallback);
+  auto callback = std::make_unique<DummyProofVerifierCallback>();
   quic::QuicAsyncStatus status = proof_verifier.VerifyProof(
       kTestHostname, kTestPort, kTestConfig, kTestTransportVersion,
       kTestChloHash, certs_, kTestEmptySCT, GetTestSignature(),
@@ -519,8 +513,7 @@
                                        &transport_security_state_, nullptr, {},
                                        NetworkIsolationKey());
 
-  std::unique_ptr<DummyProofVerifierCallback> callback(
-      new DummyProofVerifierCallback);
+  auto callback = std::make_unique<DummyProofVerifierCallback>();
   quic::QuicAsyncStatus status = proof_verifier.VerifyProof(
       kTestHostname, kTestPort, kTestConfig, kTestTransportVersion,
       kTestChloHash, certs_, kTestEmptySCT, GetTestSignature(),
@@ -556,8 +549,7 @@
                                        &transport_security_state_, nullptr, {},
                                        NetworkIsolationKey());
 
-  std::unique_ptr<DummyProofVerifierCallback> callback(
-      new DummyProofVerifierCallback);
+  auto callback = std::make_unique<DummyProofVerifierCallback>();
   quic::QuicAsyncStatus status = proof_verifier.VerifyProof(
       kTestHostname, kTestPort, kTestConfig, kTestTransportVersion,
       kTestChloHash, certs_, kTestEmptySCT, GetTestSignature(),
@@ -596,8 +588,7 @@
                                        &transport_security_state_, nullptr, {},
                                        NetworkIsolationKey());
 
-  std::unique_ptr<DummyProofVerifierCallback> callback(
-      new DummyProofVerifierCallback);
+  auto callback = std::make_unique<DummyProofVerifierCallback>();
   quic::QuicAsyncStatus status = proof_verifier.VerifyProof(
       kCTAndPKPHost, kTestPort, kTestConfig, kTestTransportVersion,
       kTestChloHash, certs_, kTestEmptySCT, GetTestSignature(),
@@ -647,8 +638,7 @@
                                        &transport_security_state_, nullptr,
                                        {kCTAndPKPHost}, NetworkIsolationKey());
 
-  std::unique_ptr<DummyProofVerifierCallback> callback(
-      new DummyProofVerifierCallback);
+  auto callback = std::make_unique<DummyProofVerifierCallback>();
   quic::QuicAsyncStatus status = proof_verifier.VerifyProof(
       kCTAndPKPHost, kTestPort, kTestConfig, kTestTransportVersion,
       kTestChloHash, certs_, kTestEmptySCT, GetTestSignature(),
@@ -701,8 +691,7 @@
                                        &transport_security_state_, nullptr, {},
                                        network_isolation_key);
 
-  std::unique_ptr<DummyProofVerifierCallback> callback(
-      new DummyProofVerifierCallback);
+  auto callback = std::make_unique<DummyProofVerifierCallback>();
   quic::QuicAsyncStatus status = proof_verifier.VerifyProof(
       kCTAndPKPHost, kTestPort, kTestConfig, kTestTransportVersion,
       kTestChloHash, certs_, kTestEmptySCT, GetTestSignature(),
@@ -762,8 +751,7 @@
                                        &transport_security_state_, nullptr, {},
                                        NetworkIsolationKey());
 
-  std::unique_ptr<DummyProofVerifierCallback> callback(
-      new DummyProofVerifierCallback);
+  auto callback = std::make_unique<DummyProofVerifierCallback>();
   quic::QuicAsyncStatus status = proof_verifier.VerifyProof(
       kTestHostname, kTestPort, kTestConfig, kTestTransportVersion,
       kTestChloHash, certs_, kTestEmptySCT, GetTestSignature(),
@@ -822,8 +810,7 @@
                                        &transport_security_state_, nullptr, {},
                                        NetworkIsolationKey());
 
-  std::unique_ptr<DummyProofVerifierCallback> callback(
-      new DummyProofVerifierCallback);
+  auto callback = std::make_unique<DummyProofVerifierCallback>();
   quic::QuicAsyncStatus status = proof_verifier.VerifyProof(
       kCTAndPKPHost, kTestPort, kTestConfig, kTestTransportVersion,
       kTestChloHash, certs_, kTestEmptySCT, GetTestSignature(),
@@ -863,8 +850,7 @@
                                        &transport_security_state_, nullptr, {},
                                        NetworkIsolationKey());
 
-  std::unique_ptr<DummyProofVerifierCallback> callback(
-      new DummyProofVerifierCallback);
+  auto callback = std::make_unique<DummyProofVerifierCallback>();
   quic::QuicAsyncStatus status = proof_verifier.VerifyProof(
       kTestHostname, kTestPort, kTestConfig, kTestTransportVersion,
       kTestChloHash, certs_, kTestEmptySCT, GetTestSignature(),
@@ -895,8 +881,7 @@
                                        &transport_security_state_, nullptr,
                                        {kTestHostname}, NetworkIsolationKey());
 
-  std::unique_ptr<DummyProofVerifierCallback> callback(
-      new DummyProofVerifierCallback);
+  auto callback = std::make_unique<DummyProofVerifierCallback>();
   quic::QuicAsyncStatus status = proof_verifier.VerifyProof(
       kTestHostname, kTestPort, kTestConfig, kTestTransportVersion,
       kTestChloHash, certs_, kTestEmptySCT, GetTestSignature(),
@@ -932,8 +917,7 @@
                                        &transport_security_state_, nullptr,
                                        {""}, NetworkIsolationKey());
 
-  std::unique_ptr<DummyProofVerifierCallback> callback(
-      new DummyProofVerifierCallback);
+  auto callback = std::make_unique<DummyProofVerifierCallback>();
   quic::QuicAsyncStatus status = proof_verifier.VerifyProof(
       kTestHostname, kTestPort, kTestConfig, kTestTransportVersion,
       kTestChloHash, certs_, kTestEmptySCT, GetTestSignature(),
diff --git a/net/quic/crypto_test_utils_chromium.cc b/net/quic/crypto_test_utils_chromium.cc
index d34e2f2b..db68335 100644
--- a/net/quic/crypto_test_utils_chromium.cc
+++ b/net/quic/crypto_test_utils_chromium.cc
@@ -38,8 +38,7 @@
 namespace net::test {
 
 std::unique_ptr<quic::ProofSource> ProofSourceForTestingChromium() {
-  std::unique_ptr<net::ProofSourceChromium> source(
-      new net::ProofSourceChromium());
+  auto source = std::make_unique<net::ProofSourceChromium>();
   base::FilePath certs_dir = net::GetTestCertsDirectory();
   CHECK(source->Initialize(certs_dir.AppendASCII("quic-chain.pem"),
                            certs_dir.AppendASCII("quic-leaf-cert.key"),
diff --git a/net/quic/mock_crypto_client_stream_factory.cc b/net/quic/mock_crypto_client_stream_factory.cc
index 8f901443..af9a93d 100644
--- a/net/quic/mock_crypto_client_stream_factory.cc
+++ b/net/quic/mock_crypto_client_stream_factory.cc
@@ -15,13 +15,13 @@
 MockCryptoClientStreamFactory::~MockCryptoClientStreamFactory() = default;
 
 MockCryptoClientStreamFactory::MockCryptoClientStreamFactory()
-    : config_(new quic::QuicConfig()) {}
+    : config_(std::make_unique<quic::QuicConfig>()) {}
 
 void MockCryptoClientStreamFactory::SetConfig(const quic::QuicConfig& config) {
   config_ = std::make_unique<quic::QuicConfig>(config);
 }
 
-quic::QuicCryptoClientStream*
+std::unique_ptr<quic::QuicCryptoClientStream>
 MockCryptoClientStreamFactory::CreateQuicCryptoClientStream(
     const quic::QuicServerId& server_id,
     QuicChromiumClientSession* session,
@@ -32,9 +32,10 @@
     proof_verify_details = proof_verify_details_queue_.front();
     proof_verify_details_queue_.pop();
   }
-  raw_ptr<MockCryptoClientStream> stream = new MockCryptoClientStream(
-      server_id, session, nullptr, *(config_.get()), crypto_config,
-      handshake_mode_, proof_verify_details, use_mock_crypter_);
+  std::unique_ptr<MockCryptoClientStream> stream =
+      std::make_unique<MockCryptoClientStream>(
+          server_id, session, nullptr, *(config_.get()), crypto_config,
+          handshake_mode_, proof_verify_details, use_mock_crypter_);
   streams_.push_back(stream->GetWeakPtr());
   return stream;
 }
diff --git a/net/quic/mock_crypto_client_stream_factory.h b/net/quic/mock_crypto_client_stream_factory.h
index 0a4d6efc..7b0e801 100644
--- a/net/quic/mock_crypto_client_stream_factory.h
+++ b/net/quic/mock_crypto_client_stream_factory.h
@@ -30,7 +30,7 @@
 
   ~MockCryptoClientStreamFactory() override;
 
-  quic::QuicCryptoClientStream* CreateQuicCryptoClientStream(
+  std::unique_ptr<quic::QuicCryptoClientStream> CreateQuicCryptoClientStream(
       const quic::QuicServerId& server_id,
       QuicChromiumClientSession* session,
       std::unique_ptr<quic::ProofVerifyContext> proof_verify_context,
diff --git a/net/quic/quic_chromium_alarm_factory_test.cc b/net/quic/quic_chromium_alarm_factory_test.cc
index 4623d90..f40903e1 100644
--- a/net/quic/quic_chromium_alarm_factory_test.cc
+++ b/net/quic/quic_chromium_alarm_factory_test.cc
@@ -27,7 +27,7 @@
 class QuicChromiumAlarmFactoryTest : public ::testing::Test {
  protected:
   QuicChromiumAlarmFactoryTest()
-      : runner_(new TestTaskRunner(&clock_)),
+      : runner_(base::MakeRefCounted<TestTaskRunner>(&clock_)),
         alarm_factory_(runner_.get(), &clock_) {}
 
   scoped_refptr<TestTaskRunner> runner_;
diff --git a/net/quic/quic_chromium_client_session.cc b/net/quic/quic_chromium_client_session.cc
index b84d03f..9795ced 100644
--- a/net/quic/quic_chromium_client_session.cc
+++ b/net/quic/quic_chromium_client_session.cc
@@ -968,12 +968,13 @@
       server_info_(std::move(server_info)),
       task_runner_(task_runner),
       net_log_(NetLogWithSource::Make(net_log, NetLogSourceType::QUIC_SESSION)),
-      logger_(new QuicConnectionLogger(this,
-                                       connection_description,
-                                       std::move(socket_performance_watcher),
-                                       net_log_)),
+      logger_(std::make_unique<QuicConnectionLogger>(
+          this,
+          connection_description,
+          std::move(socket_performance_watcher),
+          net_log_)),
       http3_logger_(VersionUsesHttp3(connection->transport_version())
-                        ? new QuicHttp3Logger(net_log_)
+                        ? std::make_unique<QuicHttp3Logger>(net_log_)
                         : nullptr),
       push_delegate_(push_delegate),
       headers_include_h2_stream_dependency_(
@@ -987,12 +988,10 @@
       sockets_.back().get(), clock, this, yield_after_packets,
       yield_after_duration, net_log_));
   CHECK_EQ(packet_readers_.size(), sockets_.size());
-  crypto_stream_.reset(
-      crypto_client_stream_factory->CreateQuicCryptoClientStream(
-          session_key.server_id(), this,
-          std::make_unique<ProofVerifyContextChromium>(cert_verify_flags,
-                                                       net_log_),
-          crypto_config_->GetConfig()));
+  crypto_stream_ = crypto_client_stream_factory->CreateQuicCryptoClientStream(
+      session_key.server_id(), this,
+      std::make_unique<ProofVerifyContextChromium>(cert_verify_flags, net_log_),
+      crypto_config_->GetConfig());
   if (VersionUsesHttp3(transport_version()))
     set_debug_visitor(http3_logger_.get());
   connection->set_debug_visitor(logger_.get());
@@ -2992,12 +2991,11 @@
   }
 
   // Create new packet writer and reader on the probing socket.
-  std::unique_ptr<QuicChromiumPacketWriter> probing_writer(
-      new QuicChromiumPacketWriter(probing_socket.get(), task_runner_));
-  std::unique_ptr<QuicChromiumPacketReader> probing_reader(
-      new QuicChromiumPacketReader(probing_socket.get(), clock_, this,
-                                   yield_after_packets_, yield_after_duration_,
-                                   net_log_));
+  auto probing_writer = std::make_unique<QuicChromiumPacketWriter>(
+      probing_socket.get(), task_runner_);
+  auto probing_reader = std::make_unique<QuicChromiumPacketReader>(
+      probing_socket.get(), clock_, this, yield_after_packets_,
+      yield_after_duration_, net_log_);
 
   probing_reader->StartReading();
   path_validation_writer_delegate_.set_network(network);
@@ -3459,13 +3457,12 @@
   }
 
   // Create new packet reader and writer on the new socket.
-  std::unique_ptr<QuicChromiumPacketReader> new_reader(
-      new QuicChromiumPacketReader(socket.get(), clock_, this,
-                                   yield_after_packets_, yield_after_duration_,
-                                   net_log_));
+  auto new_reader = std::make_unique<QuicChromiumPacketReader>(
+      socket.get(), clock_, this, yield_after_packets_, yield_after_duration_,
+      net_log_);
   new_reader->StartReading();
-  std::unique_ptr<QuicChromiumPacketWriter> new_writer(
-      new QuicChromiumPacketWriter(socket.get(), task_runner_));
+  auto new_writer =
+      std::make_unique<QuicChromiumPacketWriter>(socket.get(), task_runner_);
 
   static_cast<QuicChromiumPacketWriter*>(connection()->writer())
       ->set_delegate(nullptr);
diff --git a/net/quic/quic_chromium_client_session_test.cc b/net/quic/quic_chromium_client_session_test.cc
index fed5564..865c1ee6 100644
--- a/net/quic/quic_chromium_client_session_test.cc
+++ b/net/quic/quic_chromium_client_session_test.cc
@@ -133,10 +133,11 @@
         config_(quic::test::DefaultQuicConfig()),
         crypto_config_(
             quic::test::crypto_test_utils::ProofVerifierForTesting()),
-        default_read_(new MockRead(SYNCHRONOUS, ERR_IO_PENDING, 0)),
-        socket_data_(
-            new SequencedSocketData(base::make_span(default_read_.get(), 1),
-                                    base::span<MockWrite>())),
+        default_read_(
+            std::make_unique<MockRead>(SYNCHRONOUS, ERR_IO_PENDING, 0)),
+        socket_data_(std::make_unique<SequencedSocketData>(
+            base::make_span(default_read_.get(), 1),
+            base::span<MockWrite>())),
         helper_(&clock_, &random_),
         transport_security_state_(std::make_unique<TransportSecurityState>()),
         session_key_(kServerHostname,
@@ -250,14 +251,13 @@
     ASSERT_THAT(session_->CryptoConnect(callback_.callback()), IsOk());
   }
 
-  QuicChromiumPacketWriter* CreateQuicChromiumPacketWriter(
+  std::unique_ptr<QuicChromiumPacketWriter> CreateQuicChromiumPacketWriter(
       DatagramClientSocket* socket,
       QuicChromiumClientSession* session) const {
-    std::unique_ptr<QuicChromiumPacketWriter> writer(
-        new QuicChromiumPacketWriter(
-            socket, base::ThreadTaskRunnerHandle::Get().get()));
+    auto writer = std::make_unique<QuicChromiumPacketWriter>(
+        socket, base::ThreadTaskRunnerHandle::Get().get());
     writer->set_delegate(session);
-    return writer.release();
+    return writer;
   }
 
   quic::QuicStreamId GetNthClientInitiatedBidirectionalStreamId(int n) {
@@ -2025,12 +2025,11 @@
   EXPECT_THAT(new_socket->Connect(kIpEndPoint), IsOk());
 
   // Create reader and writer.
-  std::unique_ptr<QuicChromiumPacketReader> new_reader(
-      new QuicChromiumPacketReader(new_socket.get(), &clock_, session_.get(),
-                                   kQuicYieldAfterPacketsRead,
-                                   quic::QuicTime::Delta::FromMilliseconds(
-                                       kQuicYieldAfterDurationMilliseconds),
-                                   net_log_with_source_));
+  auto new_reader = std::make_unique<QuicChromiumPacketReader>(
+      new_socket.get(), &clock_, session_.get(), kQuicYieldAfterPacketsRead,
+      quic::QuicTime::Delta::FromMilliseconds(
+          kQuicYieldAfterDurationMilliseconds),
+      net_log_with_source_);
   new_reader->StartReading();
   std::unique_ptr<QuicChromiumPacketWriter> new_writer(
       CreateQuicChromiumPacketWriter(new_socket.get(), session_.get()));
@@ -2132,12 +2131,11 @@
     EXPECT_THAT(new_socket->Connect(kIpEndPoint), IsOk());
 
     // Create reader and writer.
-    std::unique_ptr<QuicChromiumPacketReader> new_reader(
-        new QuicChromiumPacketReader(new_socket.get(), &clock_, session_.get(),
-                                     kQuicYieldAfterPacketsRead,
-                                     quic::QuicTime::Delta::FromMilliseconds(
-                                         kQuicYieldAfterDurationMilliseconds),
-                                     net_log_with_source_));
+    auto new_reader = std::make_unique<QuicChromiumPacketReader>(
+        new_socket.get(), &clock_, session_.get(), kQuicYieldAfterPacketsRead,
+        quic::QuicTime::Delta::FromMilliseconds(
+            kQuicYieldAfterDurationMilliseconds),
+        net_log_with_source_);
     new_reader->StartReading();
     std::unique_ptr<QuicChromiumPacketWriter> new_writer(
         CreateQuicChromiumPacketWriter(new_socket.get(), session_.get()));
@@ -2175,12 +2173,11 @@
   EXPECT_THAT(new_socket->Connect(kIpEndPoint), IsOk());
 
   // Create reader and writer.
-  std::unique_ptr<QuicChromiumPacketReader> new_reader(
-      new QuicChromiumPacketReader(new_socket.get(), &clock_, session_.get(),
-                                   kQuicYieldAfterPacketsRead,
-                                   quic::QuicTime::Delta::FromMilliseconds(
-                                       kQuicYieldAfterDurationMilliseconds),
-                                   net_log_with_source_));
+  auto new_reader = std::make_unique<QuicChromiumPacketReader>(
+      new_socket.get(), &clock_, session_.get(), kQuicYieldAfterPacketsRead,
+      quic::QuicTime::Delta::FromMilliseconds(
+          kQuicYieldAfterDurationMilliseconds),
+      net_log_with_source_);
   new_reader->StartReading();
   std::unique_ptr<QuicChromiumPacketWriter> new_writer(
       CreateQuicChromiumPacketWriter(new_socket.get(), session_.get()));
@@ -2265,12 +2262,11 @@
   EXPECT_THAT(new_socket->Connect(kIpEndPoint), IsOk());
 
   // Create reader and writer.
-  std::unique_ptr<QuicChromiumPacketReader> new_reader(
-      new QuicChromiumPacketReader(new_socket.get(), &clock_, session_.get(),
-                                   kQuicYieldAfterPacketsRead,
-                                   quic::QuicTime::Delta::FromMilliseconds(
-                                       kQuicYieldAfterDurationMilliseconds),
-                                   net_log_with_source_));
+  auto new_reader = std::make_unique<QuicChromiumPacketReader>(
+      new_socket.get(), &clock_, session_.get(), kQuicYieldAfterPacketsRead,
+      quic::QuicTime::Delta::FromMilliseconds(
+          kQuicYieldAfterDurationMilliseconds),
+      net_log_with_source_);
   new_reader->StartReading();
   std::unique_ptr<QuicChromiumPacketWriter> new_writer(
       CreateQuicChromiumPacketWriter(new_socket.get(), session_.get()));
diff --git a/net/quic/quic_crypto_client_stream_factory.cc b/net/quic/quic_crypto_client_stream_factory.cc
index 708e8dab..4b2bd7e4 100644
--- a/net/quic/quic_crypto_client_stream_factory.cc
+++ b/net/quic/quic_crypto_client_stream_factory.cc
@@ -15,15 +15,14 @@
 
 class DefaultCryptoStreamFactory : public QuicCryptoClientStreamFactory {
  public:
-  quic::QuicCryptoClientStream* CreateQuicCryptoClientStream(
+  std::unique_ptr<quic::QuicCryptoClientStream> CreateQuicCryptoClientStream(
       const quic::QuicServerId& server_id,
       QuicChromiumClientSession* session,
       std::unique_ptr<quic::ProofVerifyContext> proof_verify_context,
       quic::QuicCryptoClientConfig* crypto_config) override {
-    return new quic::QuicCryptoClientStream(server_id, session,
-                                            std::move(proof_verify_context),
-                                            crypto_config, session,
-                                            /*has_application_state = */ true);
+    return std::make_unique<quic::QuicCryptoClientStream>(
+        server_id, session, std::move(proof_verify_context), crypto_config,
+        session, /*has_application_state = */ true);
   }
 };
 
diff --git a/net/quic/quic_crypto_client_stream_factory.h b/net/quic/quic_crypto_client_stream_factory.h
index 0d7e267..b6d4a77 100644
--- a/net/quic/quic_crypto_client_stream_factory.h
+++ b/net/quic/quic_crypto_client_stream_factory.h
@@ -29,7 +29,8 @@
  public:
   virtual ~QuicCryptoClientStreamFactory() = default;
 
-  virtual quic::QuicCryptoClientStream* CreateQuicCryptoClientStream(
+  virtual std::unique_ptr<quic::QuicCryptoClientStream>
+  CreateQuicCryptoClientStream(
       const quic::QuicServerId& server_id,
       QuicChromiumClientSession* session,
       std::unique_ptr<quic::ProofVerifyContext> proof_verify_context,
diff --git a/net/quic/quic_end_to_end_unittest.cc b/net/quic/quic_end_to_end_unittest.cc
index 5b140fae..6ccb73a 100644
--- a/net/quic/quic_end_to_end_unittest.cc
+++ b/net/quic/quic_end_to_end_unittest.cc
@@ -88,9 +88,8 @@
 class QuicEndToEndTest : public ::testing::Test, public WithTaskEnvironment {
  protected:
   QuicEndToEndTest()
-      : host_resolver_impl_(CreateResolverImpl()),
-        host_resolver_(std::move(host_resolver_impl_)),
-        ssl_config_service_(new SSLConfigServiceDefaults),
+      : host_resolver_(CreateResolverImpl()),
+        ssl_config_service_(std::make_unique<SSLConfigServiceDefaults>()),
         proxy_resolution_service_(
             ConfiguredProxyResolutionService::CreateDirect()),
         auth_handler_factory_(HttpAuthHandlerFactory::CreateDefault()) {
@@ -124,8 +123,8 @@
 
   // Creates a mock host resolver in which test.example.com
   // resolves to localhost.
-  static MockHostResolver* CreateResolverImpl() {
-    MockHostResolver* resolver = new MockHostResolver();
+  static std::unique_ptr<MockHostResolver> CreateResolverImpl() {
+    auto resolver = std::make_unique<MockHostResolver>();
     resolver->rules()->AddRule("test.example.com", "127.0.0.1");
     return resolver;
   }
@@ -214,7 +213,6 @@
   }
 
   QuicContext quic_context_;
-  std::unique_ptr<MockHostResolver> host_resolver_impl_;
   MappedHostResolver host_resolver_;
   MockCertVerifier cert_verifier_;
   TransportSecurityState transport_security_state_;
diff --git a/net/quic/quic_http_stream_test.cc b/net/quic/quic_http_stream_test.cc
index f53723d..92b68da 100644
--- a/net/quic/quic_http_stream_test.cc
+++ b/net/quic/quic_http_stream_test.cc
@@ -343,10 +343,10 @@
         base::make_span(mock_writes_.get(), writes_.size()));
     socket_data_->set_printer(&printer_);
 
-    std::unique_ptr<MockUDPClientSocket> socket(
-        new MockUDPClientSocket(socket_data_.get(), NetLog::Get()));
+    auto socket = std::make_unique<MockUDPClientSocket>(socket_data_.get(),
+                                                        NetLog::Get());
     socket->Connect(peer_addr_);
-    runner_ = new TestTaskRunner(&clock_);
+    runner_ = base::MakeRefCounted<TestTaskRunner>(&clock_);
     send_algorithm_ = new quic::test::MockSendAlgorithm();
     EXPECT_CALL(*send_algorithm_, InRecovery()).WillRepeatedly(Return(false));
     EXPECT_CALL(*send_algorithm_, InSlowStart()).WillRepeatedly(Return(false));
diff --git a/net/quic/quic_network_transaction_unittest.cc b/net/quic/quic_network_transaction_unittest.cc
index 08a96a6d..076eb95 100644
--- a/net/quic/quic_network_transaction_unittest.cc
+++ b/net/quic/quic_network_transaction_unittest.cc
@@ -269,9 +269,8 @@
       return nullptr;
     }
     ++watcher_count_;
-    return std::unique_ptr<SocketPerformanceWatcher>(
-        new TestSocketPerformanceWatcher(&should_notify_updated_rtt_,
-                                         &rtt_notification_received_));
+    return std::make_unique<TestSocketPerformanceWatcher>(
+        &should_notify_updated_rtt_, &rtt_notification_received_);
   }
 
   size_t watcher_count() const { return watcher_count_; }
@@ -298,7 +297,7 @@
         client_headers_include_h2_stream_dependency_(
             GetParam().client_headers_include_h2_stream_dependency),
         supported_versions_(quic::test::SupportedVersions(version_)),
-        client_maker_(new QuicTestPacketMaker(
+        client_maker_(std::make_unique<QuicTestPacketMaker>(
             version_,
             quic::QuicUtils::CreateRandomConnectionId(
                 context_.random_generator()),
@@ -313,8 +312,9 @@
                       kDefaultServerHostName,
                       quic::Perspective::IS_SERVER,
                       false),
-        quic_task_runner_(new TestTaskRunner(context_.mock_clock())),
-        ssl_config_service_(new SSLConfigServiceDefaults),
+        quic_task_runner_(
+            base::MakeRefCounted<TestTaskRunner>(context_.mock_clock())),
+        ssl_config_service_(std::make_unique<SSLConfigServiceDefaults>()),
         proxy_resolution_service_(
             ConfiguredProxyResolutionService::CreateDirect()),
         auth_handler_factory_(HttpAuthHandlerFactory::CreateDefault()),
@@ -6252,8 +6252,8 @@
 
   request_.upload_data_stream = &upload_data;
 
-  std::unique_ptr<HttpNetworkTransaction> trans(
-      new HttpNetworkTransaction(DEFAULT_PRIORITY, session_.get()));
+  auto trans = std::make_unique<HttpNetworkTransaction>(DEFAULT_PRIORITY,
+                                                        session_.get());
   TestCompletionCallback callback;
   int rv = trans->Start(&request_, callback.callback(), net_log_with_source_);
   EXPECT_THAT(rv, IsError(ERR_IO_PENDING));
@@ -7021,7 +7021,7 @@
             GetParam().client_headers_include_h2_stream_dependency),
         supported_versions_(quic::test::SupportedVersions(version_)),
         destination_type_(GetParam().destination_type),
-        ssl_config_service_(new SSLConfigServiceDefaults),
+        ssl_config_service_(std::make_unique<SSLConfigServiceDefaults>()),
         proxy_resolution_service_(
             ConfiguredProxyResolutionService::CreateDirect()),
         auth_handler_factory_(HttpAuthHandlerFactory::CreateDefault()),
@@ -7156,8 +7156,7 @@
   }
 
   void AddRefusedSocketData() {
-    std::unique_ptr<StaticSocketDataProvider> refused_data(
-        new StaticSocketDataProvider());
+    auto refused_data = std::make_unique<StaticSocketDataProvider>();
     MockConnect refused_connect(SYNCHRONOUS, ERR_CONNECTION_REFUSED);
     refused_data->set_connect_data(refused_connect);
     socket_factory_.AddSocketDataProvider(refused_data.get());
@@ -7165,8 +7164,7 @@
   }
 
   void AddHangingSocketData() {
-    std::unique_ptr<StaticSocketDataProvider> hanging_data(
-        new StaticSocketDataProvider());
+    auto hanging_data = std::make_unique<StaticSocketDataProvider>();
     MockConnect hanging_connect(SYNCHRONOUS, ERR_IO_PENDING);
     hanging_data->set_connect_data(hanging_connect);
     socket_factory_.AddSocketDataProvider(hanging_data.get());
@@ -7376,8 +7374,8 @@
   AddHangingSocketData();
   AddHangingSocketData();
 
-  scoped_refptr<TestTaskRunner> quic_task_runner(
-      new TestTaskRunner(context_.mock_clock()));
+  auto quic_task_runner =
+      base::MakeRefCounted<TestTaskRunner>(context_.mock_clock());
   QuicStreamFactoryPeer::SetAlarmFactory(
       session_->quic_stream_factory(),
       std::make_unique<QuicChromiumAlarmFactory>(quic_task_runner.get(),
diff --git a/net/quic/quic_proxy_client_socket_unittest.cc b/net/quic/quic_proxy_client_socket_unittest.cc
index 11b4807..3754d9bd 100644
--- a/net/quic/quic_proxy_client_socket_unittest.cc
+++ b/net/quic/quic_proxy_client_socket_unittest.cc
@@ -188,7 +188,7 @@
         destination_endpoint_(url::kHttpsScheme, kOriginHost, kOriginPort),
         http_auth_cache_(
             false /* key_server_entries_by_network_isolation_key */),
-        host_resolver_(new MockCachingHostResolver()),
+        host_resolver_(std::make_unique<MockCachingHostResolver>()),
         http_auth_handler_factory_(HttpAuthHandlerFactory::CreateDefault()) {
     FLAGS_quic_enable_http3_grease_randomness = false;
     IPAddress ip(192, 0, 2, 33);
@@ -210,10 +210,10 @@
   }
 
   void Initialize() {
-    std::unique_ptr<MockUDPClientSocket> socket(new MockUDPClientSocket(
-        mock_quic_data_.InitializeAndGetSequencedSocketData(), NetLog::Get()));
+    auto socket = std::make_unique<MockUDPClientSocket>(
+        mock_quic_data_.InitializeAndGetSequencedSocketData(), NetLog::Get());
     socket->Connect(peer_addr_);
-    runner_ = new TestTaskRunner(&clock_);
+    runner_ = base::MakeRefCounted<TestTaskRunner>(&clock_);
     send_algorithm_ = new quic::test::MockSendAlgorithm();
     EXPECT_CALL(*send_algorithm_, InRecovery()).WillRepeatedly(Return(false));
     EXPECT_CALL(*send_algorithm_, InSlowStart()).WillRepeatedly(Return(false));
diff --git a/net/quic/quic_stream_factory_test.cc b/net/quic/quic_stream_factory_test.cc
index abe9f4b..02e9d57 100644
--- a/net/quic/quic_stream_factory_test.cc
+++ b/net/quic/quic_stream_factory_test.cc
@@ -162,8 +162,7 @@
       NetLog* net_log,
       const NetLogSource& source) override {
     SocketDataProvider* data_provider = mock_data().GetNext();
-    std::unique_ptr<MockUDPClientSocket> socket(
-        new MockUDPClientSocket(data_provider, net_log));
+    auto socket = std::make_unique<MockUDPClientSocket>(data_provider, net_log);
     socket->set_source_host(IPAddress(192, 0, 2, next_source_host_num_++));
     return std::move(socket);
   }
@@ -190,8 +189,7 @@
       NetLog* net_log,
       const NetLogSource& source) override {
     SocketDataProvider* data_provider = mock_data().GetNext();
-    std::unique_ptr<MockUDPClientSocket> socket(
-        new MockUDPClientSocket(data_provider, net_log));
+    auto socket = std::make_unique<MockUDPClientSocket>(data_provider, net_log);
     socket->set_source_port(next_source_port_num_++);
     return std::move(socket);
   }
@@ -204,12 +202,12 @@
  protected:
   QuicStreamFactoryTestBase(quic::ParsedQuicVersion version,
                             bool client_headers_include_h2_stream_dependency)
-      : host_resolver_(
-            new MockHostResolver(/*default_result=*/MockHostResolverBase::
-                                     RuleResolver::GetLocalhostResult())),
-        ssl_config_service_(new SSLConfigServiceDefaults),
-        socket_factory_(new MockClientSocketFactory),
-        runner_(new TestTaskRunner(context_.mock_clock())),
+      : host_resolver_(std::make_unique<MockHostResolver>(
+            /*default_result=*/MockHostResolverBase::RuleResolver::
+                GetLocalhostResult())),
+        ssl_config_service_(std::make_unique<SSLConfigServiceDefaults>()),
+        socket_factory_(std::make_unique<MockClientSocketFactory>()),
+        runner_(base::MakeRefCounted<TestTaskRunner>(context_.mock_clock())),
         version_(version),
         client_maker_(version_,
                       quic::QuicUtils::CreateRandomConnectionId(
diff --git a/net/server/http_server_unittest.cc b/net/server/http_server_unittest.cc
index a48b18a0..31ec489 100644
--- a/net/server/http_server_unittest.cc
+++ b/net/server/http_server_unittest.cc
@@ -181,8 +181,8 @@
   HttpServerTest() = default;
 
   void SetUp() override {
-    std::unique_ptr<ServerSocket> server_socket(
-        new TCPServerSocket(nullptr, NetLogSource()));
+    auto server_socket =
+        std::make_unique<TCPServerSocket>(nullptr, NetLogSource());
     server_socket->ListenWithAddressAndPort("127.0.0.1", 0, 1);
     server_ = std::make_unique<HttpServer>(std::move(server_socket), this);
     ASSERT_THAT(server_->GetLocalAddress(&server_address_), IsOk());
diff --git a/net/socket/client_socket_factory.cc b/net/socket/client_socket_factory.cc
index 52049ed..02d58f6 100644
--- a/net/socket/client_socket_factory.cc
+++ b/net/socket/client_socket_factory.cc
@@ -29,8 +29,7 @@
       DatagramSocket::BindType bind_type,
       NetLog* net_log,
       const NetLogSource& source) override {
-    return std::unique_ptr<DatagramClientSocket>(
-        new UDPClientSocket(bind_type, net_log, source));
+    return std::make_unique<UDPClientSocket>(bind_type, net_log, source);
   }
 
   std::unique_ptr<TransportClientSocket> CreateTransportClientSocket(
diff --git a/net/socket/fuzzed_socket_factory.cc b/net/socket/fuzzed_socket_factory.cc
index ec213e1..e130598 100644
--- a/net/socket/fuzzed_socket_factory.cc
+++ b/net/socket/fuzzed_socket_factory.cc
@@ -126,8 +126,7 @@
     NetworkQualityEstimator* network_quality_estimator,
     NetLog* net_log,
     const NetLogSource& source) {
-  std::unique_ptr<FuzzedSocket> socket(
-      new FuzzedSocket(data_provider_, net_log));
+  auto socket = std::make_unique<FuzzedSocket>(data_provider_, net_log);
   socket->set_fuzz_connect_result(fuzz_connect_result_);
   // Just use the first address.
   socket->set_remote_address(*addresses.begin());
diff --git a/net/socket/socket_posix.cc b/net/socket/socket_posix.cc
index 1e054bd7..92ffb1e 100644
--- a/net/socket/socket_posix.cc
+++ b/net/socket/socket_posix.cc
@@ -437,7 +437,7 @@
   if (new_socket < 0)
     return MapAcceptError(errno);
 
-  std::unique_ptr<SocketPosix> accepted_socket(new SocketPosix);
+  auto accepted_socket = std::make_unique<SocketPosix>();
   int rv = accepted_socket->AdoptConnectedSocket(new_socket, new_peer_address);
   if (rv != OK)
     return rv;
diff --git a/net/socket/socket_test_util.cc b/net/socket/socket_test_util.cc
index 3febbb5..926e6005 100644
--- a/net/socket/socket_test_util.cc
+++ b/net/socket/socket_test_util.cc
@@ -766,8 +766,7 @@
     NetLog* net_log,
     const NetLogSource& source) {
   SocketDataProvider* data_provider = mock_data_.GetNext();
-  std::unique_ptr<MockUDPClientSocket> socket(
-      new MockUDPClientSocket(data_provider, net_log));
+  auto socket = std::make_unique<MockUDPClientSocket>(data_provider, net_log);
   if (bind_type == DatagramSocket::RANDOM_BIND)
     socket->set_source_port(static_cast<uint16_t>(base::RandInt(1025, 65535)));
   udp_client_socket_ports_.push_back(socket->source_port());
@@ -847,8 +846,8 @@
     EXPECT_EQ(*next_ssl_data->expected_ech_config_list,
               ssl_config.ech_config_list);
   }
-  return std::unique_ptr<SSLClientSocket>(new MockSSLClientSocket(
-      std::move(stream_socket), host_and_port, ssl_config, next_ssl_data));
+  return std::make_unique<MockSSLClientSocket>(
+      std::move(stream_socket), host_and_port, ssl_config, next_ssl_data);
 }
 
 MockClientSocket::MockClientSocket(const NetLogWithSource& net_log)
@@ -2128,10 +2127,10 @@
     NetworkQualityEstimator* network_quality_estimator,
     NetLog* net_log,
     const NetLogSource& source) {
-  std::unique_ptr<MockTaggingStreamSocket> socket(new MockTaggingStreamSocket(
+  auto socket = std::make_unique<MockTaggingStreamSocket>(
       MockClientSocketFactory::CreateTransportClientSocket(
           addresses, std::move(socket_performance_watcher),
-          network_quality_estimator, net_log, source)));
+          network_quality_estimator, net_log, source));
   tcp_socket_ = socket.get();
   return std::move(socket);
 }
diff --git a/net/socket/socks5_client_socket_fuzzer.cc b/net/socket/socks5_client_socket_fuzzer.cc
index 5ea5f3f9..ed3ae4e 100644
--- a/net/socket/socks5_client_socket_fuzzer.cc
+++ b/net/socket/socks5_client_socket_fuzzer.cc
@@ -33,8 +33,8 @@
   FuzzedDataProvider data_provider(data, size);
 
   net::TestCompletionCallback callback;
-  std::unique_ptr<net::FuzzedSocket> fuzzed_socket(
-      new net::FuzzedSocket(&data_provider, net::NetLog::Get()));
+  auto fuzzed_socket =
+      std::make_unique<net::FuzzedSocket>(&data_provider, net::NetLog::Get());
   CHECK_EQ(net::OK, fuzzed_socket->Connect(callback.callback()));
 
   net::SOCKS5ClientSocket socket(std::move(fuzzed_socket),
diff --git a/net/socket/socks5_client_socket_unittest.cc b/net/socket/socks5_client_socket_unittest.cc
index 613d267..11e22f68 100644
--- a/net/socket/socks5_client_socket_unittest.cc
+++ b/net/socket/socks5_client_socket_unittest.cc
@@ -361,21 +361,22 @@
 
 TEST_F(SOCKS5ClientSocketTest, Tag) {
   StaticSocketDataProvider data;
-  MockTaggingStreamSocket* tagging_sock =
-      new MockTaggingStreamSocket(std::unique_ptr<StreamSocket>(
-          new MockTCPClientSocket(address_list_, NetLog::Get(), &data)));
+  auto tagging_sock = std::make_unique<MockTaggingStreamSocket>(
+      std::make_unique<MockTCPClientSocket>(address_list_, NetLog::Get(),
+                                            &data));
+  MockTaggingStreamSocket* raw_tagging_sock = tagging_sock.get();
 
   // |socket| takes ownership of |tagging_sock|, but keep a non-owning pointer
   // to it.
-  SOCKS5ClientSocket socket(std::unique_ptr<StreamSocket>(tagging_sock),
+  SOCKS5ClientSocket socket(std::move(tagging_sock),
                             HostPortPair("localhost", 80),
                             TRAFFIC_ANNOTATION_FOR_TESTS);
 
-  EXPECT_EQ(tagging_sock->tag(), SocketTag());
+  EXPECT_EQ(raw_tagging_sock->tag(), SocketTag());
 #if BUILDFLAG(IS_ANDROID)
   SocketTag tag(0x12345678, 0x87654321);
   socket.ApplySocketTag(tag);
-  EXPECT_EQ(tagging_sock->tag(), tag);
+  EXPECT_EQ(raw_tagging_sock->tag(), tag);
 #endif  // BUILDFLAG(IS_ANDROID)
 }
 
diff --git a/net/socket/socks_client_socket_fuzzer.cc b/net/socket/socks_client_socket_fuzzer.cc
index 58da3f1..76650a4 100644
--- a/net/socket/socks_client_socket_fuzzer.cc
+++ b/net/socket/socks_client_socket_fuzzer.cc
@@ -46,8 +46,8 @@
   }
 
   net::TestCompletionCallback callback;
-  std::unique_ptr<net::FuzzedSocket> fuzzed_socket(
-      new net::FuzzedSocket(&data_provider, net::NetLog::Get()));
+  auto fuzzed_socket =
+      std::make_unique<net::FuzzedSocket>(&data_provider, net::NetLog::Get());
   CHECK_EQ(net::OK, fuzzed_socket->Connect(callback.callback()));
 
   net::SOCKSClientSocket socket(
diff --git a/net/socket/socks_client_socket_unittest.cc b/net/socket/socks_client_socket_unittest.cc
index df7e47a1..0edba2c 100644
--- a/net/socket/socks_client_socket_unittest.cc
+++ b/net/socket/socks_client_socket_unittest.cc
@@ -63,8 +63,7 @@
 };
 
 SOCKSClientSocketTest::SOCKSClientSocketTest()
-  : host_resolver_(new MockHostResolver) {
-}
+    : host_resolver_(std::make_unique<MockHostResolver>()) {}
 
 // Set up platform before every test case
 void SOCKSClientSocketTest::SetUp() {
@@ -427,24 +426,25 @@
 
 TEST_F(SOCKSClientSocketTest, Tag) {
   StaticSocketDataProvider data;
-  MockTaggingStreamSocket* tagging_sock =
-      new MockTaggingStreamSocket(std::unique_ptr<StreamSocket>(
-          new MockTCPClientSocket(address_list_, NetLog::Get(), &data)));
+  auto tagging_sock = std::make_unique<MockTaggingStreamSocket>(
+      std::make_unique<MockTCPClientSocket>(address_list_, NetLog::Get(),
+                                            &data));
+  MockTaggingStreamSocket* raw_tagging_sock = tagging_sock.get();
 
-  std::unique_ptr<ClientSocketHandle> connection(new ClientSocketHandle);
+  auto connection = std::make_unique<ClientSocketHandle>();
   // |connection| takes ownership of |tagging_sock|, but keep a
   // non-owning pointer to it.
   MockHostResolver host_resolver;
   SOCKSClientSocket socket(
-      std::unique_ptr<StreamSocket>(tagging_sock),
-      HostPortPair("localhost", 80), NetworkIsolationKey(), DEFAULT_PRIORITY,
-      &host_resolver, SecureDnsPolicy::kAllow, TRAFFIC_ANNOTATION_FOR_TESTS);
+      std::move(tagging_sock), HostPortPair("localhost", 80),
+      NetworkIsolationKey(), DEFAULT_PRIORITY, &host_resolver,
+      SecureDnsPolicy::kAllow, TRAFFIC_ANNOTATION_FOR_TESTS);
 
-  EXPECT_EQ(tagging_sock->tag(), SocketTag());
+  EXPECT_EQ(raw_tagging_sock->tag(), SocketTag());
 #if BUILDFLAG(IS_ANDROID)
   SocketTag tag(0x12345678, 0x87654321);
   socket.ApplySocketTag(tag);
-  EXPECT_EQ(tagging_sock->tag(), tag);
+  EXPECT_EQ(raw_tagging_sock->tag(), tag);
 #endif  // BUILDFLAG(IS_ANDROID)
 }
 
diff --git a/net/socket/ssl_client_socket_unittest.cc b/net/socket/ssl_client_socket_unittest.cc
index 60e5fe0..5149a27c 100644
--- a/net/socket/ssl_client_socket_unittest.cc
+++ b/net/socket/ssl_client_socket_unittest.cc
@@ -836,8 +836,8 @@
       const SSLConfig& ssl_config,
       const HostPortPair& host_port_pair,
       int* result) {
-    std::unique_ptr<StreamSocket> transport(new TCPClientSocket(
-        addr_, nullptr, nullptr, NetLog::Get(), NetLogSource()));
+    auto transport = std::make_unique<TCPClientSocket>(
+        addr_, nullptr, nullptr, NetLog::Get(), NetLogSource());
     int rv = callback_.GetResult(transport->Connect(callback_.callback()));
     if (rv != OK) {
       LOG(ERROR) << "Could not connect to test server";
@@ -1125,10 +1125,10 @@
       std::unique_ptr<SSLClientSocket>* out_sock) {
     CHECK(embedded_test_server());
 
-    std::unique_ptr<StreamSocket> real_transport(
-        new TCPClientSocket(addr(), nullptr, nullptr, nullptr, NetLogSource()));
-    std::unique_ptr<FakeBlockingStreamSocket> transport(
-        new FakeBlockingStreamSocket(std::move(real_transport)));
+    auto real_transport = std::make_unique<TCPClientSocket>(
+        addr(), nullptr, nullptr, nullptr, NetLogSource());
+    auto transport =
+        std::make_unique<FakeBlockingStreamSocket>(std::move(real_transport));
     int rv = callback->GetResult(transport->Connect(callback->callback()));
     EXPECT_THAT(rv, IsOk());
 
@@ -1318,8 +1318,8 @@
 
     real_transport_ = std::make_unique<TCPClientSocket>(
         addr(), nullptr, nullptr, nullptr, NetLogSource());
-    std::unique_ptr<FakeBlockingStreamSocket> transport(
-        new FakeBlockingStreamSocket(std::move(real_transport_)));
+    auto transport =
+        std::make_unique<FakeBlockingStreamSocket>(std::move(real_transport_));
     FakeBlockingStreamSocket* raw_transport = transport.get();
 
     int rv = callback_.GetResult(transport->Connect(callback_.callback()));
@@ -1452,8 +1452,8 @@
       StartEmbeddedTestServer(EmbeddedTestServer::CERT_OK, GetServerConfig()));
 
   TestCompletionCallback callback;
-  std::unique_ptr<StreamSocket> transport(new TCPClientSocket(
-      addr(), nullptr, nullptr, NetLog::Get(), NetLogSource()));
+  auto transport = std::make_unique<TCPClientSocket>(
+      addr(), nullptr, nullptr, NetLog::Get(), NetLogSource());
   int rv = callback.GetResult(transport->Connect(callback.callback()));
   EXPECT_THAT(rv, IsOk());
 
@@ -1652,8 +1652,8 @@
       StartEmbeddedTestServer(EmbeddedTestServer::CERT_OK, GetServerConfig()));
 
   TestCompletionCallback callback;
-  std::unique_ptr<StreamSocket> transport(
-      new TCPClientSocket(addr(), nullptr, nullptr, nullptr, NetLogSource()));
+  auto transport = std::make_unique<TCPClientSocket>(addr(), nullptr, nullptr,
+                                                     nullptr, NetLogSource());
   EXPECT_EQ(0, transport->GetTotalReceivedBytes());
 
   int rv = callback.GetResult(transport->Connect(callback.callback()));
@@ -1709,10 +1709,10 @@
       StartEmbeddedTestServer(EmbeddedTestServer::CERT_OK, SSLServerConfig()));
 
   TestCompletionCallback callback;
-  std::unique_ptr<StreamSocket> real_transport(
-      new TCPClientSocket(addr(), nullptr, nullptr, nullptr, NetLogSource()));
-  std::unique_ptr<SynchronousErrorStreamSocket> transport(
-      new SynchronousErrorStreamSocket(std::move(real_transport)));
+  auto real_transport = std::make_unique<TCPClientSocket>(
+      addr(), nullptr, nullptr, nullptr, NetLogSource());
+  auto transport =
+      std::make_unique<SynchronousErrorStreamSocket>(std::move(real_transport));
   int rv = callback.GetResult(transport->Connect(callback.callback()));
   EXPECT_THAT(rv, IsOk());
 
@@ -1736,10 +1736,10 @@
       StartEmbeddedTestServer(EmbeddedTestServer::CERT_OK, GetServerConfig()));
 
   TestCompletionCallback callback;
-  std::unique_ptr<StreamSocket> real_transport(
-      new TCPClientSocket(addr(), nullptr, nullptr, nullptr, NetLogSource()));
-  std::unique_ptr<SynchronousErrorStreamSocket> transport(
-      new SynchronousErrorStreamSocket(std::move(real_transport)));
+  auto real_transport = std::make_unique<TCPClientSocket>(
+      addr(), nullptr, nullptr, nullptr, NetLogSource());
+  auto transport =
+      std::make_unique<SynchronousErrorStreamSocket>(std::move(real_transport));
   int rv = callback.GetResult(transport->Connect(callback.callback()));
   EXPECT_THAT(rv, IsOk());
 
@@ -1786,15 +1786,15 @@
       StartEmbeddedTestServer(EmbeddedTestServer::CERT_OK, GetServerConfig()));
 
   TestCompletionCallback callback;
-  std::unique_ptr<StreamSocket> real_transport(
-      new TCPClientSocket(addr(), nullptr, nullptr, nullptr, NetLogSource()));
+  auto real_transport = std::make_unique<TCPClientSocket>(
+      addr(), nullptr, nullptr, nullptr, NetLogSource());
   // Note: |error_socket|'s ownership is handed to |transport|, but a pointer
   // is retained in order to configure additional errors.
-  std::unique_ptr<SynchronousErrorStreamSocket> error_socket(
-      new SynchronousErrorStreamSocket(std::move(real_transport)));
+  auto error_socket =
+      std::make_unique<SynchronousErrorStreamSocket>(std::move(real_transport));
   SynchronousErrorStreamSocket* raw_error_socket = error_socket.get();
-  std::unique_ptr<FakeBlockingStreamSocket> transport(
-      new FakeBlockingStreamSocket(std::move(error_socket)));
+  auto transport =
+      std::make_unique<FakeBlockingStreamSocket>(std::move(error_socket));
   FakeBlockingStreamSocket* raw_transport = transport.get();
   int rv = callback.GetResult(transport->Connect(callback.callback()));
   EXPECT_THAT(rv, IsOk());
@@ -1851,15 +1851,15 @@
       StartEmbeddedTestServer(EmbeddedTestServer::CERT_OK, SSLServerConfig()));
 
   TestCompletionCallback callback;
-  std::unique_ptr<StreamSocket> real_transport(
-      new TCPClientSocket(addr(), nullptr, nullptr, nullptr, NetLogSource()));
+  auto real_transport = std::make_unique<TCPClientSocket>(
+      addr(), nullptr, nullptr, nullptr, NetLogSource());
   // Note: intermediate sockets' ownership are handed to |sock|, but a pointer
   // is retained in order to query them.
-  std::unique_ptr<SynchronousErrorStreamSocket> error_socket(
-      new SynchronousErrorStreamSocket(std::move(real_transport)));
+  auto error_socket =
+      std::make_unique<SynchronousErrorStreamSocket>(std::move(real_transport));
   SynchronousErrorStreamSocket* raw_error_socket = error_socket.get();
-  std::unique_ptr<CountingStreamSocket> counting_socket(
-      new CountingStreamSocket(std::move(error_socket)));
+  auto counting_socket =
+      std::make_unique<CountingStreamSocket>(std::move(error_socket));
   CountingStreamSocket* raw_counting_socket = counting_socket.get();
   int rv = callback.GetResult(counting_socket->Connect(callback.callback()));
   ASSERT_THAT(rv, IsOk());
@@ -1953,15 +1953,15 @@
       StartEmbeddedTestServer(EmbeddedTestServer::CERT_OK, GetServerConfig()));
 
   TestCompletionCallback callback;
-  std::unique_ptr<StreamSocket> real_transport(
-      new TCPClientSocket(addr(), nullptr, nullptr, nullptr, NetLogSource()));
+  auto real_transport = std::make_unique<TCPClientSocket>(
+      addr(), nullptr, nullptr, nullptr, NetLogSource());
   // Note: |error_socket|'s ownership is handed to |transport|, but a pointer
   // is retained in order to configure additional errors.
-  std::unique_ptr<SynchronousErrorStreamSocket> error_socket(
-      new SynchronousErrorStreamSocket(std::move(real_transport)));
+  auto error_socket =
+      std::make_unique<SynchronousErrorStreamSocket>(std::move(real_transport));
   SynchronousErrorStreamSocket* raw_error_socket = error_socket.get();
-  std::unique_ptr<FakeBlockingStreamSocket> transport(
-      new FakeBlockingStreamSocket(std::move(error_socket)));
+  auto transport =
+      std::make_unique<FakeBlockingStreamSocket>(std::move(error_socket));
   FakeBlockingStreamSocket* raw_transport = transport.get();
 
   int rv = callback.GetResult(transport->Connect(callback.callback()));
@@ -2037,15 +2037,15 @@
       StartEmbeddedTestServer(EmbeddedTestServer::CERT_OK, GetServerConfig()));
 
   TestCompletionCallback callback;
-  std::unique_ptr<StreamSocket> real_transport(
-      new TCPClientSocket(addr(), nullptr, nullptr, nullptr, NetLogSource()));
+  auto real_transport = std::make_unique<TCPClientSocket>(
+      addr(), nullptr, nullptr, nullptr, NetLogSource());
   // Note: |error_socket|'s ownership is handed to |transport|, but a pointer
   // is retained in order to configure additional errors.
-  std::unique_ptr<SynchronousErrorStreamSocket> error_socket(
-      new SynchronousErrorStreamSocket(std::move(real_transport)));
+  auto error_socket =
+      std::make_unique<SynchronousErrorStreamSocket>(std::move(real_transport));
   SynchronousErrorStreamSocket* raw_error_socket = error_socket.get();
-  std::unique_ptr<FakeBlockingStreamSocket> transport(
-      new FakeBlockingStreamSocket(std::move(error_socket)));
+  auto transport =
+      std::make_unique<FakeBlockingStreamSocket>(std::move(error_socket));
   FakeBlockingStreamSocket* raw_transport = transport.get();
 
   int rv = callback.GetResult(transport->Connect(callback.callback()));
@@ -2126,10 +2126,10 @@
       StartEmbeddedTestServer(EmbeddedTestServer::CERT_OK, SSLServerConfig()));
 
   TestCompletionCallback callback;
-  std::unique_ptr<StreamSocket> real_transport(
-      new TCPClientSocket(addr(), nullptr, nullptr, nullptr, NetLogSource()));
-  std::unique_ptr<SynchronousErrorStreamSocket> transport(
-      new SynchronousErrorStreamSocket(std::move(real_transport)));
+  auto real_transport = std::make_unique<TCPClientSocket>(
+      addr(), nullptr, nullptr, nullptr, NetLogSource());
+  auto transport =
+      std::make_unique<SynchronousErrorStreamSocket>(std::move(real_transport));
   int rv = callback.GetResult(transport->Connect(callback.callback()));
   EXPECT_THAT(rv, IsOk());
 
@@ -2152,10 +2152,10 @@
       StartEmbeddedTestServer(EmbeddedTestServer::CERT_OK, GetServerConfig()));
 
   TestCompletionCallback callback;
-  std::unique_ptr<StreamSocket> real_transport(
-      new TCPClientSocket(addr(), nullptr, nullptr, nullptr, NetLogSource()));
-  std::unique_ptr<SynchronousErrorStreamSocket> transport(
-      new SynchronousErrorStreamSocket(std::move(real_transport)));
+  auto real_transport = std::make_unique<TCPClientSocket>(
+      addr(), nullptr, nullptr, nullptr, NetLogSource());
+  auto transport =
+      std::make_unique<SynchronousErrorStreamSocket>(std::move(real_transport));
   int rv = callback.GetResult(transport->Connect(callback.callback()));
   EXPECT_THAT(rv, IsOk());
 
@@ -2183,13 +2183,13 @@
       StartEmbeddedTestServer(EmbeddedTestServer::CERT_OK, GetServerConfig()));
 
   TestCompletionCallback callback;
-  std::unique_ptr<StreamSocket> real_transport(
-      new TCPClientSocket(addr(), nullptr, nullptr, nullptr, NetLogSource()));
-  std::unique_ptr<SynchronousErrorStreamSocket> error_socket(
-      new SynchronousErrorStreamSocket(std::move(real_transport)));
+  auto real_transport = std::make_unique<TCPClientSocket>(
+      addr(), nullptr, nullptr, nullptr, NetLogSource());
+  auto error_socket =
+      std::make_unique<SynchronousErrorStreamSocket>(std::move(real_transport));
   SynchronousErrorStreamSocket* raw_error_socket = error_socket.get();
-  std::unique_ptr<FakeBlockingStreamSocket> transport(
-      new FakeBlockingStreamSocket(std::move(error_socket)));
+  auto transport =
+      std::make_unique<FakeBlockingStreamSocket>(std::move(error_socket));
   FakeBlockingStreamSocket* raw_transport = transport.get();
   int rv = callback.GetResult(transport->Connect(callback.callback()));
   EXPECT_THAT(rv, IsOk());
@@ -2266,10 +2266,10 @@
 
   TestCompletionCallback callback;
 
-  std::unique_ptr<StreamSocket> real_transport(
-      new TCPClientSocket(addr(), nullptr, nullptr, nullptr, NetLogSource()));
-  std::unique_ptr<ReadBufferingStreamSocket> transport(
-      new ReadBufferingStreamSocket(std::move(real_transport)));
+  auto real_transport = std::make_unique<TCPClientSocket>(
+      addr(), nullptr, nullptr, nullptr, NetLogSource());
+  auto transport =
+      std::make_unique<ReadBufferingStreamSocket>(std::move(real_transport));
   ReadBufferingStreamSocket* raw_transport = transport.get();
   int rv = callback.GetResult(transport->Connect(callback.callback()));
   ASSERT_THAT(rv, IsOk());
@@ -2341,8 +2341,8 @@
 
   TestCompletionCallback callback;
   log_observer_.SetObserverCaptureMode(NetLogCaptureMode::kEverything);
-  std::unique_ptr<StreamSocket> transport(new TCPClientSocket(
-      addr(), nullptr, nullptr, NetLog::Get(), NetLogSource()));
+  auto transport = std::make_unique<TCPClientSocket>(
+      addr(), nullptr, nullptr, NetLog::Get(), NetLogSource());
   int rv = callback.GetResult(transport->Connect(callback.callback()));
   EXPECT_THAT(rv, IsOk());
 
@@ -2410,7 +2410,7 @@
 
   TestCompletionCallback callback;
   std::unique_ptr<StreamSocket> transport(
-      new MockTCPClientSocket(addr(), nullptr, &data));
+      std::make_unique<MockTCPClientSocket>(addr(), nullptr, &data));
   int rv = callback.GetResult(transport->Connect(callback.callback()));
   EXPECT_THAT(rv, IsOk());
 
@@ -2470,8 +2470,8 @@
       StartEmbeddedTestServer(EmbeddedTestServer::CERT_OK, SSLServerConfig()));
 
   TestCompletionCallback callback;
-  std::unique_ptr<StreamSocket> transport(
-      new TCPClientSocket(addr(), nullptr, nullptr, nullptr, NetLogSource()));
+  auto transport = std::make_unique<TCPClientSocket>(addr(), nullptr, nullptr,
+                                                     nullptr, NetLogSource());
   int rv = callback.GetResult(transport->Connect(callback.callback()));
   EXPECT_THAT(rv, IsOk());
 
@@ -2959,10 +2959,10 @@
       StartEmbeddedTestServer(EmbeddedTestServer::CERT_OK, GetServerConfig()));
 
   TestCompletionCallback callback;
-  std::unique_ptr<StreamSocket> real_transport(
-      new TCPClientSocket(addr(), nullptr, nullptr, nullptr, NetLogSource()));
-  std::unique_ptr<FakeBlockingStreamSocket> transport(
-      new FakeBlockingStreamSocket(std::move(real_transport)));
+  auto real_transport = std::make_unique<TCPClientSocket>(
+      addr(), nullptr, nullptr, nullptr, NetLogSource());
+  auto transport =
+      std::make_unique<FakeBlockingStreamSocket>(std::move(real_transport));
   FakeBlockingStreamSocket* raw_transport = transport.get();
   ASSERT_THAT(callback.GetResult(transport->Connect(callback.callback())),
               IsOk());
@@ -3021,8 +3021,8 @@
   sock_.reset();
 
   // Using a different HostPortPair uses a different session cache key.
-  std::unique_ptr<StreamSocket> transport(new TCPClientSocket(
-      addr(), nullptr, nullptr, NetLog::Get(), NetLogSource()));
+  auto transport = std::make_unique<TCPClientSocket>(
+      addr(), nullptr, nullptr, NetLog::Get(), NetLogSource());
   TestCompletionCallback callback;
   ASSERT_THAT(callback.GetResult(transport->Connect(callback.callback())),
               IsOk());
@@ -3080,8 +3080,8 @@
     for (int i = 0; i < 3; i++) {
       SCOPED_TRACE(i);
 
-      std::unique_ptr<StreamSocket> transport(new TCPClientSocket(
-          addr(), nullptr, nullptr, NetLog::Get(), NetLogSource()));
+      auto transport = std::make_unique<TCPClientSocket>(
+          addr(), nullptr, nullptr, NetLog::Get(), NetLogSource());
       TestCompletionCallback callback;
       ASSERT_THAT(callback.GetResult(transport->Connect(callback.callback())),
                   IsOk());
@@ -4218,10 +4218,10 @@
       StartEmbeddedTestServer(EmbeddedTestServer::CERT_OK, SSLServerConfig()));
 
   TestCompletionCallback callback;
-  std::unique_ptr<StreamSocket> real_transport(
-      new TCPClientSocket(addr(), nullptr, nullptr, nullptr, NetLogSource()));
-  std::unique_ptr<FakeBlockingStreamSocket> transport(
-      new FakeBlockingStreamSocket(std::move(real_transport)));
+  auto real_transport = std::make_unique<TCPClientSocket>(
+      addr(), nullptr, nullptr, nullptr, NetLogSource());
+  auto transport =
+      std::make_unique<FakeBlockingStreamSocket>(std::move(real_transport));
   FakeBlockingStreamSocket* raw_transport = transport.get();
   int rv = callback.GetResult(transport->Connect(callback.callback()));
   ASSERT_THAT(rv, IsOk());
@@ -4253,10 +4253,10 @@
       StartEmbeddedTestServer(EmbeddedTestServer::CERT_OK, server_config));
 
   TestCompletionCallback callback;
-  std::unique_ptr<StreamSocket> real_transport(
-      new TCPClientSocket(addr(), nullptr, nullptr, nullptr, NetLogSource()));
-  std::unique_ptr<FakeBlockingStreamSocket> transport(
-      new FakeBlockingStreamSocket(std::move(real_transport)));
+  auto real_transport = std::make_unique<TCPClientSocket>(
+      addr(), nullptr, nullptr, nullptr, NetLogSource());
+  auto transport =
+      std::make_unique<FakeBlockingStreamSocket>(std::move(real_transport));
   FakeBlockingStreamSocket* raw_transport = transport.get();
   int rv = callback.GetResult(transport->Connect(callback.callback()));
   ASSERT_THAT(rv, IsOk());
@@ -4302,10 +4302,10 @@
       StartEmbeddedTestServer(EmbeddedTestServer::CERT_OK, server_config));
 
   TestCompletionCallback callback;
-  std::unique_ptr<StreamSocket> real_transport(
-      new TCPClientSocket(addr(), nullptr, nullptr, nullptr, NetLogSource()));
-  std::unique_ptr<FakeBlockingStreamSocket> transport(
-      new FakeBlockingStreamSocket(std::move(real_transport)));
+  auto real_transport = std::make_unique<TCPClientSocket>(
+      addr(), nullptr, nullptr, nullptr, NetLogSource());
+  auto transport =
+      std::make_unique<FakeBlockingStreamSocket>(std::move(real_transport));
   FakeBlockingStreamSocket* raw_transport = transport.get();
   int rv = callback.GetResult(transport->Connect(callback.callback()));
   ASSERT_THAT(rv, IsOk());
@@ -4352,10 +4352,10 @@
       StartEmbeddedTestServer(EmbeddedTestServer::CERT_OK, server_config));
 
   TestCompletionCallback callback;
-  std::unique_ptr<StreamSocket> real_transport(
-      new TCPClientSocket(addr(), nullptr, nullptr, nullptr, NetLogSource()));
-  std::unique_ptr<FakeBlockingStreamSocket> transport(
-      new FakeBlockingStreamSocket(std::move(real_transport)));
+  auto real_transport = std::make_unique<TCPClientSocket>(
+      addr(), nullptr, nullptr, nullptr, NetLogSource());
+  auto transport =
+      std::make_unique<FakeBlockingStreamSocket>(std::move(real_transport));
   FakeBlockingStreamSocket* raw_transport = transport.get();
   int rv = callback.GetResult(transport->Connect(callback.callback()));
   ASSERT_THAT(rv, IsOk());
@@ -4404,10 +4404,10 @@
       StartEmbeddedTestServer(EmbeddedTestServer::CERT_OK, server_config));
 
   TestCompletionCallback callback;
-  std::unique_ptr<StreamSocket> real_transport(
-      new TCPClientSocket(addr(), nullptr, nullptr, nullptr, NetLogSource()));
-  std::unique_ptr<FakeBlockingStreamSocket> transport(
-      new FakeBlockingStreamSocket(std::move(real_transport)));
+  auto real_transport = std::make_unique<TCPClientSocket>(
+      addr(), nullptr, nullptr, nullptr, NetLogSource());
+  auto transport =
+      std::make_unique<FakeBlockingStreamSocket>(std::move(real_transport));
   FakeBlockingStreamSocket* raw_transport = transport.get();
   int rv = callback.GetResult(transport->Connect(callback.callback()));
   ASSERT_THAT(rv, IsOk());
@@ -4451,10 +4451,10 @@
       StartEmbeddedTestServer(EmbeddedTestServer::CERT_OK, server_config));
 
   TestCompletionCallback callback;
-  std::unique_ptr<StreamSocket> real_transport(
-      new TCPClientSocket(addr(), nullptr, nullptr, nullptr, NetLogSource()));
-  std::unique_ptr<FakeBlockingStreamSocket> transport(
-      new FakeBlockingStreamSocket(std::move(real_transport)));
+  auto real_transport = std::make_unique<TCPClientSocket>(
+      addr(), nullptr, nullptr, nullptr, NetLogSource());
+  auto transport =
+      std::make_unique<FakeBlockingStreamSocket>(std::move(real_transport));
   FakeBlockingStreamSocket* raw_transport = transport.get();
   int rv = callback.GetResult(transport->Connect(callback.callback()));
   ASSERT_THAT(rv, IsOk());
@@ -4932,8 +4932,8 @@
       server_listener.Accept(&server_transport, server_callback.callback());
 
   TestCompletionCallback client_callback;
-  std::unique_ptr<TCPClientSocket> client_transport(new TCPClientSocket(
-      AddressList(server_address), nullptr, nullptr, nullptr, NetLogSource()));
+  auto client_transport = std::make_unique<TCPClientSocket>(
+      AddressList(server_address), nullptr, nullptr, nullptr, NetLogSource());
   int client_rv = client_transport->Connect(client_callback.callback());
 
   EXPECT_THAT(server_callback.GetResult(server_rv), IsOk());
@@ -5087,23 +5087,23 @@
   ASSERT_TRUE(
       StartEmbeddedTestServer(EmbeddedTestServer::CERT_OK, SSLServerConfig()));
 
-  std::unique_ptr<StreamSocket> transport(new TCPClientSocket(
-      addr(), nullptr, nullptr, NetLog::Get(), NetLogSource()));
+  auto transport = std::make_unique<TCPClientSocket>(
+      addr(), nullptr, nullptr, NetLog::Get(), NetLogSource());
 
-  MockTaggingStreamSocket* tagging_sock =
-      new MockTaggingStreamSocket(std::move(transport));
+  auto tagging_sock =
+      std::make_unique<MockTaggingStreamSocket>(std::move(transport));
+  MockTaggingStreamSocket* raw_tagging_sock = tagging_sock.get();
 
   // |sock| takes ownership of |tagging_sock|, but keep a
   // non-owning pointer to it.
-  std::unique_ptr<SSLClientSocket> sock(
-      CreateSSLClientSocket(std::unique_ptr<StreamSocket>(tagging_sock),
-                            host_port_pair(), SSLConfig()));
+  std::unique_ptr<SSLClientSocket> sock(CreateSSLClientSocket(
+      std::move(tagging_sock), host_port_pair(), SSLConfig()));
 
-  EXPECT_EQ(tagging_sock->tag(), SocketTag());
+  EXPECT_EQ(raw_tagging_sock->tag(), SocketTag());
 #if BUILDFLAG(IS_ANDROID)
   SocketTag tag(0x12345678, 0x87654321);
   sock->ApplySocketTag(tag);
-  EXPECT_EQ(tagging_sock->tag(), tag);
+  EXPECT_EQ(raw_tagging_sock->tag(), tag);
 #endif  // BUILDFLAG(IS_ANDROID)
 }
 
diff --git a/net/socket/ssl_connect_job_unittest.cc b/net/socket/ssl_connect_job_unittest.cc
index 8decba5..3d15325 100644
--- a/net/socket/ssl_connect_job_unittest.cc
+++ b/net/socket/ssl_connect_job_unittest.cc
@@ -97,35 +97,38 @@
       : WithTaskEnvironment(base::test::TaskEnvironment::TimeSource::MOCK_TIME),
         proxy_resolution_service_(
             ConfiguredProxyResolutionService::CreateDirect()),
-        ssl_config_service_(new SSLConfigServiceDefaults),
+        ssl_config_service_(std::make_unique<SSLConfigServiceDefaults>()),
         http_auth_handler_factory_(HttpAuthHandlerFactory::CreateDefault()),
         session_(CreateNetworkSession()),
-        direct_transport_socket_params_(new TransportSocketParams(
-            url::SchemeHostPort(url::kHttpsScheme, "host", 443),
-            NetworkIsolationKey(),
-            SecureDnsPolicy::kAllow,
-            OnHostResolutionCallback(),
-            /*supported_alpns=*/{"h2", "http/1.1"})),
+        direct_transport_socket_params_(
+            base::MakeRefCounted<TransportSocketParams>(
+                url::SchemeHostPort(url::kHttpsScheme, "host", 443),
+                NetworkIsolationKey(),
+                SecureDnsPolicy::kAllow,
+                OnHostResolutionCallback(),
+                /*supported_alpns=*/
+                base::flat_set<std::string>({"h2", "http/1.1"}))),
         proxy_transport_socket_params_(
-            new TransportSocketParams(HostPortPair("proxy", 443),
-                                      NetworkIsolationKey(),
-                                      SecureDnsPolicy::kAllow,
-                                      OnHostResolutionCallback(),
-                                      /*supported_alpns=*/{})),
-        socks_socket_params_(
-            new SOCKSSocketParams(proxy_transport_socket_params_,
-                                  true,
-                                  HostPortPair("sockshost", 443),
-                                  NetworkIsolationKey(),
-                                  TRAFFIC_ANNOTATION_FOR_TESTS)),
-        http_proxy_socket_params_(
-            new HttpProxySocketParams(proxy_transport_socket_params_,
-                                      nullptr /* ssl_params */,
-                                      false /* is_quic */,
-                                      HostPortPair("host", 80),
-                                      /*tunnel=*/true,
-                                      TRAFFIC_ANNOTATION_FOR_TESTS,
-                                      NetworkIsolationKey())),
+            base::MakeRefCounted<TransportSocketParams>(
+                HostPortPair("proxy", 443),
+                NetworkIsolationKey(),
+                SecureDnsPolicy::kAllow,
+                OnHostResolutionCallback(),
+                /*supported_alpns=*/base::flat_set<std::string>({}))),
+        socks_socket_params_(base::MakeRefCounted<SOCKSSocketParams>(
+            proxy_transport_socket_params_,
+            true,
+            HostPortPair("sockshost", 443),
+            NetworkIsolationKey(),
+            TRAFFIC_ANNOTATION_FOR_TESTS)),
+        http_proxy_socket_params_(base::MakeRefCounted<HttpProxySocketParams>(
+            proxy_transport_socket_params_,
+            nullptr /* ssl_params */,
+            false /* is_quic */,
+            HostPortPair("host", 80),
+            /*tunnel=*/true,
+            TRAFFIC_ANNOTATION_FOR_TESTS,
+            NetworkIsolationKey())),
         common_connect_job_params_(session_->CreateCommonConnectJobParams()) {}
 
   ~SSLConnectJobTest() override = default;
@@ -158,7 +161,7 @@
         "Basic realm=MyRealm1", AuthCredentials(kFoo, kBar), "/");
   }
 
-  HttpNetworkSession* CreateNetworkSession() {
+  std::unique_ptr<HttpNetworkSession> CreateNetworkSession() {
     HttpNetworkSessionContext session_context;
     session_context.host_resolver = &host_resolver_;
     session_context.cert_verifier = &cert_verifier_;
@@ -171,7 +174,8 @@
         http_auth_handler_factory_.get();
     session_context.http_server_properties = &http_server_properties_;
     session_context.quic_context = &quic_context_;
-    return new HttpNetworkSession(HttpNetworkSessionParams(), session_context);
+    return std::make_unique<HttpNetworkSession>(HttpNetworkSessionParams(),
+                                                session_context);
   }
 
  protected:
diff --git a/net/socket/ssl_server_socket_unittest.cc b/net/socket/ssl_server_socket_unittest.cc
index 7323b9b..71b37bf 100644
--- a/net/socket/ssl_server_socket_unittest.cc
+++ b/net/socket/ssl_server_socket_unittest.cc
@@ -349,13 +349,14 @@
 class SSLServerSocketTest : public PlatformTest, public WithTaskEnvironment {
  public:
   SSLServerSocketTest()
-      : ssl_config_service_(new TestSSLConfigService(SSLContextConfig())),
-        cert_verifier_(new MockCertVerifier()),
-        client_cert_verifier_(new MockClientCertVerifier()),
-        transport_security_state_(new TransportSecurityState),
-        ct_policy_enforcer_(new MockCTPolicyEnforcer),
-        ssl_client_session_cache_(
-            new SSLClientSessionCache(SSLClientSessionCache::Config())) {}
+      : ssl_config_service_(
+            std::make_unique<TestSSLConfigService>(SSLContextConfig())),
+        cert_verifier_(std::make_unique<MockCertVerifier>()),
+        client_cert_verifier_(std::make_unique<MockClientCertVerifier>()),
+        transport_security_state_(std::make_unique<TransportSecurityState>()),
+        ct_policy_enforcer_(std::make_unique<MockCTPolicyEnforcer>()),
+        ssl_client_session_cache_(std::make_unique<SSLClientSessionCache>(
+            SSLClientSessionCache::Config())) {}
 
   void SetUp() override {
     PlatformTest::SetUp();
diff --git a/net/socket/tcp_client_socket_unittest.cc b/net/socket/tcp_client_socket_unittest.cc
index 4d5d3f1b..0dd88c4 100644
--- a/net/socket/tcp_client_socket_unittest.cc
+++ b/net/socket/tcp_client_socket_unittest.cc
@@ -330,8 +330,7 @@
   for (size_t i = 0; i < kNumIPs; ++i)
     ip_list.push_back(IPAddress(72, 14, 213, i));
 
-  std::unique_ptr<TestSocketPerformanceWatcher> watcher(
-      new TestSocketPerformanceWatcher());
+  auto watcher = std::make_unique<TestSocketPerformanceWatcher>();
   TestSocketPerformanceWatcher* watcher_ptr = watcher.get();
 
   std::vector<std::string> aliases({"example.com"});
diff --git a/net/socket/tcp_socket_unittest.cc b/net/socket/tcp_socket_unittest.cc
index 28264b4..19f345d 100644
--- a/net/socket/tcp_socket_unittest.cc
+++ b/net/socket/tcp_socket_unittest.cc
@@ -178,8 +178,8 @@
 
     TestCompletionCallback connect_callback;
 
-    std::unique_ptr<TestSocketPerformanceWatcher> watcher(
-        new TestSocketPerformanceWatcher(should_notify_updated_rtt));
+    auto watcher = std::make_unique<TestSocketPerformanceWatcher>(
+        should_notify_updated_rtt);
     TestSocketPerformanceWatcher* watcher_ptr = watcher.get();
 
     TCPSocket connecting_socket(std::move(watcher), nullptr, NetLogSource());
diff --git a/net/socket/tcp_socket_win.cc b/net/socket/tcp_socket_win.cc
index 6c36411b..0950280 100644
--- a/net/socket/tcp_socket_win.cc
+++ b/net/socket/tcp_socket_win.cc
@@ -307,7 +307,7 @@
     return result;
   }
 
-  core_ = new Core(this);
+  core_ = base::MakeRefCounted<Core>(this);
   peer_address_ = std::make_unique<IPEndPoint>(peer_address);
 
   return OK;
@@ -804,8 +804,8 @@
     net_log_.EndEventWithNetErrorCode(NetLogEventType::TCP_ACCEPT, net_error);
     return net_error;
   }
-  std::unique_ptr<TCPSocketWin> tcp_socket(
-      new TCPSocketWin(nullptr, net_log_.net_log(), net_log_.source()));
+  auto tcp_socket = std::make_unique<TCPSocketWin>(nullptr, net_log_.net_log(),
+                                                   net_log_.source());
   int adopt_result = tcp_socket->AdoptConnectedSocket(new_socket, ip_end_point);
   if (adopt_result != OK) {
     net_log_.EndEventWithNetErrorCode(NetLogEventType::TCP_ACCEPT,
@@ -853,7 +853,7 @@
     return CreateNetLogIPEndPointParams(peer_address_.get());
   });
 
-  core_ = new Core(this);
+  core_ = base::MakeRefCounted<Core>(this);
 
   // WSAEventSelect sets the socket to non-blocking mode as a side effect.
   // Our connect() and recv() calls require that the socket be non-blocking.
diff --git a/net/socket/udp_socket_perftest.cc b/net/socket/udp_socket_perftest.cc
index 7ad78a9e..2a878e3 100644
--- a/net/socket/udp_socket_perftest.cc
+++ b/net/socket/udp_socket_perftest.cc
@@ -112,8 +112,7 @@
   // Setup the server to listen.
   IPEndPoint bind_address;
   CreateUDPAddress("127.0.0.1", kPort, &bind_address);
-  std::unique_ptr<UDPServerSocket> server(
-      new UDPServerSocket(nullptr, NetLogSource()));
+  auto server = std::make_unique<UDPServerSocket>(nullptr, NetLogSource());
   if (use_nonblocking_io)
     server->UseNonBlockingIO();
   int rv = server->Listen(bind_address);
@@ -122,8 +121,8 @@
   // Setup the client.
   IPEndPoint server_address;
   CreateUDPAddress("127.0.0.1", kPort, &server_address);
-  std::unique_ptr<UDPClientSocket> client(new UDPClientSocket(
-      DatagramSocket::DEFAULT_BIND, nullptr, NetLogSource()));
+  auto client = std::make_unique<UDPClientSocket>(DatagramSocket::DEFAULT_BIND,
+                                                  nullptr, NetLogSource());
   if (use_nonblocking_io)
     client->UseNonBlockingIO();
   rv = client->Connect(server_address);
diff --git a/net/socket/udp_socket_posix.cc b/net/socket/udp_socket_posix.cc
index 01fe429..57b2fa5 100644
--- a/net/socket/udp_socket_posix.cc
+++ b/net/socket/udp_socket_posix.cc
@@ -131,7 +131,7 @@
                                net::NetLog* net_log,
                                const net::NetLogSource& source)
     : write_async_watcher_(std::make_unique<WriteAsyncWatcher>(this)),
-      sender_(new UDPSocketPosixSender()),
+      sender_(base::MakeRefCounted<UDPSocketPosixSender>()),
       socket_(kInvalidSocket),
       bind_type_(bind_type),
       read_socket_watcher_(FROM_HERE),
@@ -299,7 +299,7 @@
     SockaddrStorage storage;
     if (getpeername(socket_, storage.addr, &storage.addr_len))
       return MapSystemError(errno);
-    std::unique_ptr<IPEndPoint> address(new IPEndPoint());
+    auto address = std::make_unique<IPEndPoint>();
     if (!address->FromSockAddr(storage.addr, storage.addr_len))
       return ERR_ADDRESS_INVALID;
     remote_address_ = std::move(address);
@@ -319,7 +319,7 @@
     SockaddrStorage storage;
     if (getsockname(socket_, storage.addr, &storage.addr_len))
       return MapSystemError(errno);
-    std::unique_ptr<IPEndPoint> address(new IPEndPoint());
+    auto address = std::make_unique<IPEndPoint>();
     if (!address->FromSockAddr(storage.addr, storage.addr_len))
       return ERR_ADDRESS_INVALID;
     local_address_ = std::move(address);
diff --git a/net/socket/udp_socket_posix_unittest.cc b/net/socket/udp_socket_posix_unittest.cc
index a9ad3fe..0dc6170d 100644
--- a/net/socket/udp_socket_posix_unittest.cc
+++ b/net/socket/udp_socket_posix_unittest.cc
@@ -89,7 +89,7 @@
                      net::NetLog* net_log,
                      const net::NetLogSource& source)
       : UDPSocketPosix(bind_type, net_log, source) {
-    sender_ = new MockUDPSocketPosixSender();
+    sender_ = base::MakeRefCounted<MockUDPSocketPosixSender>();
   }
 
   MockUDPSocketPosixSender* sender() {
diff --git a/net/socket/udp_socket_unittest.cc b/net/socket/udp_socket_unittest.cc
index d1e981a..f2ed2dd 100644
--- a/net/socket/udp_socket_unittest.cc
+++ b/net/socket/udp_socket_unittest.cc
@@ -145,7 +145,7 @@
   int SendToSocket(UDPSocket* socket,
                    std::string msg,
                    const IPEndPoint& address) {
-    scoped_refptr<StringIOBuffer> io_buffer = new StringIOBuffer(msg);
+    auto io_buffer = base::MakeRefCounted<StringIOBuffer>(msg);
     TestCompletionCallback callback;
     int rv = socket->SendTo(io_buffer.get(), io_buffer->size(), address,
                             callback.callback());
@@ -177,8 +177,8 @@
   RecordingNetLogObserver net_log_observer;
   // Setup the server to listen.
   IPEndPoint server_address(IPAddress::IPv4Localhost(), 0 /* port */);
-  std::unique_ptr<UDPServerSocket> server(
-      new UDPServerSocket(NetLog::Get(), NetLogSource()));
+  auto server =
+      std::make_unique<UDPServerSocket>(NetLog::Get(), NetLogSource());
   if (use_nonblocking_io)
     server->UseNonBlockingIO();
   server->AllowAddressReuse();
@@ -343,10 +343,10 @@
   IPEndPoint listen_address;
   ASSERT_TRUE(CreateUDPAddress("0.0.0.0", 0 /* port */, &listen_address));
 
-  std::unique_ptr<UDPServerSocket> server1(
-      new UDPServerSocket(NetLog::Get(), NetLogSource()));
-  std::unique_ptr<UDPServerSocket> server2(
-      new UDPServerSocket(NetLog::Get(), NetLogSource()));
+  auto server1 =
+      std::make_unique<UDPServerSocket>(NetLog::Get(), NetLogSource());
+  auto server2 =
+      std::make_unique<UDPServerSocket>(NetLog::Get(), NetLogSource());
   server1->AllowAddressReuse();
   server1->AllowBroadcast();
   server2->AllowAddressReuse();
diff --git a/net/socket/udp_socket_win.cc b/net/socket/udp_socket_win.cc
index 3ff2b87..554d7fe9 100644
--- a/net/socket/udp_socket_win.cc
+++ b/net/socket/udp_socket_win.cc
@@ -268,7 +268,7 @@
   if (socket_ == INVALID_SOCKET)
     return MapSystemError(WSAGetLastError());
   if (!use_non_blocking_io_) {
-    core_ = new Core(this);
+    core_ = base::MakeRefCounted<Core>(this);
   } else {
     read_write_event_.Set(WSACreateEvent());
     WSAEventSelect(socket_, read_write_event_.Get(), FD_READ | FD_WRITE);
diff --git a/net/socket/unix_domain_client_socket_posix_unittest.cc b/net/socket/unix_domain_client_socket_posix_unittest.cc
index 5d17b7a..756fa04 100644
--- a/net/socket/unix_domain_client_socket_posix_unittest.cc
+++ b/net/socket/unix_domain_client_socket_posix_unittest.cc
@@ -194,7 +194,7 @@
   // to be sure it hasn't gotten accidentally closed.
   SockaddrStorage addr;
   ASSERT_TRUE(FillUnixAddress(socket_path_, false, &addr));
-  std::unique_ptr<SocketPosix> adopter(new SocketPosix);
+  auto adopter = std::make_unique<SocketPosix>();
   adopter->AdoptConnectedSocket(client_socket_fd, addr);
   UnixDomainClientSocket rewrapped_socket(std::move(adopter));
   EXPECT_TRUE(rewrapped_socket.IsConnected());
diff --git a/net/socket/unix_domain_server_socket_posix.cc b/net/socket/unix_domain_server_socket_posix.cc
index c579b467..9e69fa9 100644
--- a/net/socket/unix_domain_server_socket_posix.cc
+++ b/net/socket/unix_domain_server_socket_posix.cc
@@ -72,7 +72,7 @@
     return ERR_ADDRESS_INVALID;
   }
 
-  std::unique_ptr<SocketPosix> socket(new SocketPosix);
+  auto socket = std::make_unique<SocketPosix>();
   int rv = socket->Open(AF_UNIX);
   DCHECK_NE(ERR_IO_PENDING, rv);
   if (rv != OK)
diff --git a/net/socket/websocket_transport_client_socket_pool_unittest.cc b/net/socket/websocket_transport_client_socket_pool_unittest.cc
index 679e5d3c..2ec79710 100644
--- a/net/socket/websocket_transport_client_socket_pool_unittest.cc
+++ b/net/socket/websocket_transport_client_socket_pool_unittest.cc
@@ -546,7 +546,7 @@
 // The lock on the endpoint is released when a ClientSocketHandle is deleted.
 TEST_F(WebSocketTransportClientSocketPoolTest, LockReleasedOnHandleDelete) {
   TestCompletionCallback callback;
-  std::unique_ptr<ClientSocketHandle> handle(new ClientSocketHandle);
+  auto handle = std::make_unique<ClientSocketHandle>();
   int rv =
       handle->Init(group_id_, params_, absl::nullopt /* proxy_annotation_tag */,
                    LOW, SocketTag(), ClientSocketPool::RespectLimits::ENABLED,
diff --git a/net/spdy/spdy_buffer.cc b/net/spdy/spdy_buffer.cc
index aaf447e..319a8bc 100644
--- a/net/spdy/spdy_buffer.cc
+++ b/net/spdy/spdy_buffer.cc
@@ -60,12 +60,12 @@
 };
 
 SpdyBuffer::SpdyBuffer(std::unique_ptr<spdy::SpdySerializedFrame> frame)
-    : shared_frame_(new SharedFrame(std::move(frame))) {}
+    : shared_frame_(base::MakeRefCounted<SharedFrame>(std::move(frame))) {}
 
 // The given data may not be strictly a SPDY frame; we (ab)use
 // |frame_| just as a container.
 SpdyBuffer::SpdyBuffer(const char* data, size_t size)
-    : shared_frame_(new SharedFrame()) {
+    : shared_frame_(base::MakeRefCounted<SharedFrame>()) {
   CHECK_GT(size, 0u);
   CHECK_LE(size, kMaxSpdyFrameSize);
   shared_frame_->data = MakeSpdySerializedFrame(data, size);
diff --git a/net/spdy/spdy_http_utils.cc b/net/spdy/spdy_http_utils.cc
index 30e0be4..147d9fc 100644
--- a/net/spdy/spdy_http_utils.cc
+++ b/net/spdy/spdy_http_utils.cc
@@ -83,7 +83,7 @@
     } while (end != value.npos);
   }
 
-  response->headers = new HttpResponseHeaders(raw_headers);
+  response->headers = base::MakeRefCounted<HttpResponseHeaders>(raw_headers);
 
   // When there are multiple location headers the response is a potential
   // response smuggling attack.
diff --git a/net/ssl/client_cert_store_nss_unittest.cc b/net/ssl/client_cert_store_nss_unittest.cc
index 9339ad0..54d13f0 100644
--- a/net/ssl/client_cert_store_nss_unittest.cc
+++ b/net/ssl/client_cert_store_nss_unittest.cc
@@ -91,8 +91,8 @@
   ASSERT_TRUE(base::ReadFileToString(
       GetTestCertsDirectory().AppendASCII("client_1.pk8"), &pkcs8_key));
 
-  std::unique_ptr<ClientCertStoreNSS> store(
-      new ClientCertStoreNSS(ClientCertStoreNSS::PasswordDelegateFactory()));
+  auto store = std::make_unique<ClientCertStoreNSS>(
+      ClientCertStoreNSS::PasswordDelegateFactory());
 
   // These test keys are RSA keys.
   std::vector<uint16_t> expected = SSLPrivateKey::DefaultAlgorithmPreferences(
@@ -200,8 +200,8 @@
 
   ASSERT_TRUE(ImportClientCertToSlot(cert.get(), test_db.slot()));
 
-  std::unique_ptr<ClientCertStoreNSS> store(
-      new ClientCertStoreNSS(ClientCertStoreNSS::PasswordDelegateFactory()));
+  auto store = std::make_unique<ClientCertStoreNSS>(
+      ClientCertStoreNSS::PasswordDelegateFactory());
 
   // These test keys are RSA keys.
   std::vector<uint16_t> expected = SSLPrivateKey::DefaultAlgorithmPreferences(
diff --git a/net/ssl/threaded_ssl_private_key.cc b/net/ssl/threaded_ssl_private_key.cc
index cc2ac529..01030b0d 100644
--- a/net/ssl/threaded_ssl_private_key.cc
+++ b/net/ssl/threaded_ssl_private_key.cc
@@ -52,7 +52,7 @@
 ThreadedSSLPrivateKey::ThreadedSSLPrivateKey(
     std::unique_ptr<ThreadedSSLPrivateKey::Delegate> delegate,
     scoped_refptr<base::SingleThreadTaskRunner> task_runner)
-    : core_(new Core(std::move(delegate))),
+    : core_(base::MakeRefCounted<Core>(std::move(delegate))),
       task_runner_(std::move(task_runner)) {}
 
 std::string ThreadedSSLPrivateKey::GetProviderName() {
diff --git a/net/test/ct_test_util.cc b/net/test/ct_test_util.cc
index 299aee2..ea6da8a 100644
--- a/net/test/ct_test_util.cc
+++ b/net/test/ct_test_util.cc
@@ -209,7 +209,7 @@
 
 void GetX509CertSCT(scoped_refptr<SignedCertificateTimestamp>* sct_ref) {
   CHECK(sct_ref != nullptr);
-  *sct_ref = new SignedCertificateTimestamp();
+  *sct_ref = base::MakeRefCounted<SignedCertificateTimestamp>();
   SignedCertificateTimestamp *const sct(sct_ref->get());
   sct->version = ct::SignedCertificateTimestamp::V1;
   sct->log_id = HexDecode(kTestKeyId);
@@ -226,7 +226,7 @@
 
 void GetPrecertSCT(scoped_refptr<SignedCertificateTimestamp>* sct_ref) {
   CHECK(sct_ref != nullptr);
-  *sct_ref = new SignedCertificateTimestamp();
+  *sct_ref = base::MakeRefCounted<SignedCertificateTimestamp>();
   SignedCertificateTimestamp *const sct(sct_ref->get());
   sct->version = ct::SignedCertificateTimestamp::V1;
   sct->log_id = HexDecode(kTestKeyId);
diff --git a/net/test/embedded_test_server/http2_connection.cc b/net/test/embedded_test_server/http2_connection.cc
index 6622b96..12632bdb 100644
--- a/net/test/embedded_test_server/http2_connection.cc
+++ b/net/test/embedded_test_server/http2_connection.cc
@@ -373,7 +373,7 @@
 bool Http2Connection::OnEndHeadersForStream(
     http2::adapter::Http2StreamId stream_id) {
   HttpRequest::HeaderMap header_map = header_map_[stream_id];
-  std::unique_ptr<HttpRequest> request(new HttpRequest());
+  auto request = std::make_unique<HttpRequest>();
   request->relative_url = header_map[":path"];
   request->base_url = GURL(header_map[":authority"]);
   request->method_string = header_map[":method"];
diff --git a/net/test/net_test_suite.cc b/net/test/net_test_suite.cc
index e702a26..b27889a 100644
--- a/net/test/net_test_suite.cc
+++ b/net/test/net_test_suite.cc
@@ -67,7 +67,8 @@
 }
 
 void NetTestSuite::InitializeTestThreadNoNetworkChangeNotifier() {
-  host_resolver_proc_ = new net::RuleBasedHostResolverProc(nullptr);
+  host_resolver_proc_ =
+      base::MakeRefCounted<net::RuleBasedHostResolverProc>(nullptr);
   scoped_host_resolver_proc_.Init(host_resolver_proc_.get());
   // In case any attempts are made to resolve host names, force them all to
   // be mapped to localhost.  This prevents DNS queries from being sent in
diff --git a/net/test/quic_simple_test_server.cc b/net/test/quic_simple_test_server.cc
index 9cf1c13..e18c59e2 100644
--- a/net/test/quic_simple_test_server.cc
+++ b/net/test/quic_simple_test_server.cc
@@ -167,7 +167,7 @@
   // Set up server certs.
   base::FilePath directory;
   directory = test_files_root;
-  std::unique_ptr<ProofSourceChromium> proof_source(new ProofSourceChromium());
+  auto proof_source = std::make_unique<ProofSourceChromium>();
   CHECK(proof_source->Initialize(directory.AppendASCII("quic-chain.pem"),
                                  directory.AppendASCII("quic-leaf-cert.key"),
                                  base::FilePath()));
diff --git a/net/test/spawned_test_server/remote_test_server_spawner_request.cc b/net/test/spawned_test_server/remote_test_server_spawner_request.cc
index 78daf75..f56dd4c 100644
--- a/net/test/spawned_test_server/remote_test_server_spawner_request.cc
+++ b/net/test/spawned_test_server/remote_test_server_spawner_request.cc
@@ -196,8 +196,9 @@
     const GURL& url,
     const std::string& post_data)
     : io_task_runner_(io_task_runner),
-      core_(new Core()),
-      allowed_port_(new ScopedPortException(url.EffectiveIntPort())) {
+      core_(std::make_unique<Core>()),
+      allowed_port_(
+          std::make_unique<ScopedPortException>(url.EffectiveIntPort())) {
   io_task_runner_->PostTask(
       FROM_HERE, base::BindOnce(&Core::SendRequest,
                                 base::Unretained(core_.get()), url, post_data));
diff --git a/net/test/url_request/ssl_certificate_error_job.cc b/net/test/url_request/ssl_certificate_error_job.cc
index 635c237..216eb90 100644
--- a/net/test/url_request/ssl_certificate_error_job.cc
+++ b/net/test/url_request/ssl_certificate_error_job.cc
@@ -51,9 +51,8 @@
 
 void SSLCertificateErrorJob::AddUrlHandler() {
   URLRequestFilter* filter = URLRequestFilter::GetInstance();
-  filter->AddHostnameInterceptor(
-      "https", kMockHostname,
-      std::unique_ptr<URLRequestInterceptor>(new MockJobInterceptor()));
+  filter->AddHostnameInterceptor("https", kMockHostname,
+                                 std::make_unique<MockJobInterceptor>());
 }
 
 GURL SSLCertificateErrorJob::GetMockUrl() {
diff --git a/net/test/url_request/url_request_failed_job.cc b/net/test/url_request/url_request_failed_job.cc
index ec93428..4bc5769b 100644
--- a/net/test/url_request/url_request_failed_job.cc
+++ b/net/test/url_request/url_request_failed_job.cc
@@ -135,12 +135,10 @@
     const std::string& hostname) {
   URLRequestFilter* filter = URLRequestFilter::GetInstance();
   // Add |hostname| to URLRequestFilter for HTTP and HTTPS.
-  filter->AddHostnameInterceptor(
-      "http", hostname,
-      std::unique_ptr<URLRequestInterceptor>(new MockJobInterceptor()));
-  filter->AddHostnameInterceptor(
-      "https", hostname,
-      std::unique_ptr<URLRequestInterceptor>(new MockJobInterceptor()));
+  filter->AddHostnameInterceptor("http", hostname,
+                                 std::make_unique<MockJobInterceptor>());
+  filter->AddHostnameInterceptor("https", hostname,
+                                 std::make_unique<MockJobInterceptor>());
 }
 
 // static
@@ -182,7 +180,8 @@
     return;
   }
   const std::string headers = "HTTP/1.1 200 OK";
-  response_info_.headers = new net::HttpResponseHeaders(headers);
+  response_info_.headers =
+      base::MakeRefCounted<net::HttpResponseHeaders>(headers);
   total_received_bytes_ = headers.size();
   NotifyHeadersComplete();
 }
diff --git a/net/test/url_request/url_request_mock_http_job.cc b/net/test/url_request/url_request_mock_http_job.cc
index 5fff646f..dd726cef 100644
--- a/net/test/url_request/url_request_mock_http_job.cc
+++ b/net/test/url_request/url_request_mock_http_job.cc
@@ -112,16 +112,14 @@
 // static
 std::unique_ptr<URLRequestInterceptor> URLRequestMockHTTPJob::CreateInterceptor(
     const base::FilePath& base_path) {
-  return std::unique_ptr<URLRequestInterceptor>(
-      new MockJobInterceptor(base_path, false));
+  return std::make_unique<MockJobInterceptor>(base_path, false);
 }
 
 // static
 std::unique_ptr<URLRequestInterceptor>
 URLRequestMockHTTPJob::CreateInterceptorForSingleFile(
     const base::FilePath& file) {
-  return std::unique_ptr<URLRequestInterceptor>(
-      new MockJobInterceptor(file, true));
+  return std::make_unique<MockJobInterceptor>(file, true);
 }
 
 URLRequestMockHTTPJob::URLRequestMockHTTPJob(URLRequest* request,
@@ -175,7 +173,7 @@
 
 // Private const version.
 void URLRequestMockHTTPJob::GetResponseInfoConst(HttpResponseInfo* info) const {
-  info->headers = new HttpResponseHeaders(raw_headers_);
+  info->headers = base::MakeRefCounted<HttpResponseHeaders>(raw_headers_);
 }
 
 int64_t URLRequestMockHTTPJob::GetTotalReceivedBytes() const {
diff --git a/net/test/url_request/url_request_test_job_backed_by_file.cc b/net/test/url_request/url_request_test_job_backed_by_file.cc
index 8e906a1..2972c08 100644
--- a/net/test/url_request/url_request_test_job_backed_by_file.cc
+++ b/net/test/url_request/url_request_test_job_backed_by_file.cc
@@ -53,7 +53,7 @@
     const scoped_refptr<base::TaskRunner>& file_task_runner)
     : URLRequestJob(request),
       file_path_(file_path),
-      stream_(new FileStream(file_task_runner)),
+      stream_(std::make_unique<FileStream>(file_task_runner)),
       file_task_runner_(file_task_runner) {}
 
 void URLRequestTestJobBackedByFile::Start() {
diff --git a/net/tools/cachetool/cachetool.cc b/net/tools/cachetool/cachetool.cc
index aa8f4440..1735d87 100644
--- a/net/tools/cachetool/cachetool.cc
+++ b/net/tools/cachetool/cachetool.cc
@@ -605,7 +605,8 @@
   if (truncated_response_info)
     std::cerr << "WARNING: Truncated HTTP response." << std::endl;
 
-  response_info.headers = new net::HttpResponseHeaders(raw_headers);
+  response_info.headers =
+      base::MakeRefCounted<net::HttpResponseHeaders>(raw_headers);
   PersistResponseInfo(command_marshal, key, response_info);
 }
 
diff --git a/net/tools/content_decoder_tool/content_decoder_tool_unittest.cc b/net/tools/content_decoder_tool/content_decoder_tool_unittest.cc
index 24cc0c4..83656cf 100644
--- a/net/tools/content_decoder_tool/content_decoder_tool_unittest.cc
+++ b/net/tools/content_decoder_tool/content_decoder_tool_unittest.cc
@@ -88,7 +88,7 @@
 TEST_F(ContentDecoderToolTest, TestBrotli) {
   // In Cronet build, brotli sources are excluded due to binary size concern.
   // In such cases, skip the test.
-  std::unique_ptr<MockSourceStream> mock_source_stream(new MockSourceStream());
+  auto mock_source_stream = std::make_unique<MockSourceStream>();
   bool brotli_disabled =
       CreateBrotliSourceStream(std::move(mock_source_stream)) == nullptr;
   if (brotli_disabled)
diff --git a/net/tools/dump_cache/dump_files.cc b/net/tools/dump_cache/dump_files.cc
index bf5862c..6aa77c5 100644
--- a/net/tools/dump_cache/dump_files.cc
+++ b/net/tools/dump_cache/dump_files.cc
@@ -82,7 +82,7 @@
   size_t offset = address.start_block() * address.BlockSize() +
                   disk_cache::kBlockHeaderSize;
 
-  std::unique_ptr<int32_t[]> buffer(new int32_t[length]);
+  auto buffer = std::make_unique<int32_t[]>(length);
   if (!file->Read(buffer.get(), length, offset))
     return;
 
@@ -196,7 +196,7 @@
   }
 
   base::FilePath index_name(path_.Append(kIndexName));
-  index_file_ = new disk_cache::MappedFile;
+  index_file_ = base::MakeRefCounted<disk_cache::MappedFile>();
   index_ = reinterpret_cast<disk_cache::Index*>(
       index_file_->Init(index_name, 0));
   if (!index_) {
@@ -294,7 +294,7 @@
     return false;
 
   size_t size = address.num_blocks() * address.BlockSize();
-  std::unique_ptr<char[]> buffer(new char[size]);
+  auto buffer = std::make_unique<char[]>(size);
 
   size_t offset = address.start_block() * address.BlockSize() +
                   disk_cache::kBlockHeaderSize;
diff --git a/net/tools/huffman_trie/huffman/huffman_builder.cc b/net/tools/huffman_trie/huffman/huffman_builder.cc
index ac32ce95..cc7945a 100644
--- a/net/tools/huffman_trie/huffman/huffman_builder.cc
+++ b/net/tools/huffman_trie/huffman/huffman_builder.cc
@@ -147,8 +147,8 @@
     uint32_t count_a = a->count();
     uint32_t count_b = b->count();
 
-    std::unique_ptr<HuffmanNode> parent(
-        new HuffmanNode(0, count_a + count_b, std::move(a), std::move(b)));
+    auto parent = std::make_unique<HuffmanNode>(0, count_a + count_b,
+                                                std::move(a), std::move(b));
 
     nodes.erase(nodes.begin());
     nodes[0] = std::move(parent);
diff --git a/net/tools/huffman_trie/trie/trie_writer.cc b/net/tools/huffman_trie/trie/trie_writer.cc
index 3d3af921..6121705 100644
--- a/net/tools/huffman_trie/trie/trie_writer.cc
+++ b/net/tools/huffman_trie/trie/trie_writer.cc
@@ -105,8 +105,8 @@
 
   ReversedEntries reversed_entries;
   for (auto* const entry : entries) {
-    std::unique_ptr<ReversedEntry> reversed_entry(
-        new ReversedEntry(ReverseName(entry->name()), entry));
+    auto reversed_entry =
+        std::make_unique<ReversedEntry>(ReverseName(entry->name()), entry);
     reversed_entries.push_back(std::move(reversed_entry));
   }
 
diff --git a/net/tools/net_watcher/net_watcher.cc b/net/tools/net_watcher/net_watcher.cc
index 7c75c37b7..733aa14 100644
--- a/net/tools/net_watcher/net_watcher.cc
+++ b/net/tools/net_watcher/net_watcher.cc
@@ -180,8 +180,8 @@
       ignored_interfaces.insert(ignored_netif);
     }
   }
-  std::unique_ptr<net::NetworkChangeNotifier> network_change_notifier(
-      new net::NetworkChangeNotifierLinux(ignored_interfaces));
+  auto network_change_notifier =
+      std::make_unique<net::NetworkChangeNotifierLinux>(ignored_interfaces);
 #else
   std::unique_ptr<net::NetworkChangeNotifier> network_change_notifier(
       net::NetworkChangeNotifier::CreateIfNeeded());
diff --git a/net/tools/quic/quic_simple_client.cc b/net/tools/quic/quic_simple_client.cc
index e355be1..726fccc 100644
--- a/net/tools/quic/quic_simple_client.cc
+++ b/net/tools/quic/quic_simple_client.cc
@@ -45,8 +45,7 @@
           config,
           CreateQuicConnectionHelper(),
           CreateQuicAlarmFactory(),
-          base::WrapUnique(
-              new QuicClientMessageLooplNetworkHelper(&clock_, this)),
+          std::make_unique<QuicClientMessageLooplNetworkHelper>(&clock_, this),
           std::move(proof_verifier),
           nullptr) {
   set_server_address(server_address);
diff --git a/net/tools/quic/quic_simple_server.cc b/net/tools/quic/quic_simple_server.cc
index 7d993f9..e3fe4489 100644
--- a/net/tools/quic/quic_simple_server.cc
+++ b/net/tools/quic/quic_simple_server.cc
@@ -111,8 +111,8 @@
   dispatcher_ = std::make_unique<quic::QuicSimpleDispatcher>(
       &config_, &crypto_config_, &version_manager_,
       std::unique_ptr<quic::QuicConnectionHelperInterface>(helper_),
-      std::unique_ptr<quic::QuicCryptoServerStreamBase::Helper>(
-          new QuicSimpleServerSessionHelper(quic::QuicRandom::GetInstance())),
+      std::make_unique<QuicSimpleServerSessionHelper>(
+          quic::QuicRandom::GetInstance()),
       std::unique_ptr<quic::QuicAlarmFactory>(alarm_factory_),
       quic_simple_server_backend_, quic::kQuicDefaultConnectionIdLength);
   QuicSimpleServerPacketWriter* writer =
diff --git a/net/tools/quic/quic_simple_server_test.cc b/net/tools/quic/quic_simple_server_test.cc
index d46fbdf..9681310e 100644
--- a/net/tools/quic/quic_simple_server_test.cc
+++ b/net/tools/quic/quic_simple_server_test.cc
@@ -35,9 +35,8 @@
                     &crypto_config_,
                     &version_manager_,
                     std::make_unique<quic::test::MockQuicConnectionHelper>(),
-                    std::unique_ptr<quic::QuicCryptoServerStreamBase::Helper>(
-                        new QuicSimpleServerSessionHelper(
-                            quic::QuicRandom::GetInstance())),
+                    std::make_unique<QuicSimpleServerSessionHelper>(
+                        quic::QuicRandom::GetInstance()),
                     std::make_unique<quic::test::MockAlarmFactory>(),
                     &memory_cache_backend_) {
     dispatcher_.InitializeWithWriter(nullptr);
diff --git a/net/tools/transport_security_state_generator/input_file_parsers.cc b/net/tools/transport_security_state_generator/input_file_parsers.cc
index 8442610..1edd25a 100644
--- a/net/tools/transport_security_state_generator/input_file_parsers.cc
+++ b/net/tools/transport_security_state_generator/input_file_parsers.cc
@@ -355,8 +355,7 @@
       return false;
     }
 
-    std::unique_ptr<TransportSecurityStateEntry> entry(
-        new TransportSecurityStateEntry());
+    auto entry = std::make_unique<TransportSecurityStateEntry>();
     const std::string* maybe_hostname = parsed.FindStringKey(kNameJSONKey);
     if (!maybe_hostname) {
       LOG(ERROR) << "Could not extract the hostname for entry "
@@ -439,7 +438,7 @@
     std::string report_uri =
         maybe_report_uri ? *maybe_report_uri : std::string();
 
-    std::unique_ptr<Pinset> pinset(new Pinset(name, report_uri));
+    auto pinset = std::make_unique<Pinset>(name, report_uri);
 
     const base::Value* pinset_static_hashes_list =
         parsed.FindListKey("static_spki_hashes");
diff --git a/net/tools/transport_security_state_generator/preloaded_state_generator.cc b/net/tools/transport_security_state_generator/preloaded_state_generator.cc
index 25de947..4023b18 100644
--- a/net/tools/transport_security_state_generator/preloaded_state_generator.cc
+++ b/net/tools/transport_security_state_generator/preloaded_state_generator.cc
@@ -144,9 +144,8 @@
   std::vector<std::unique_ptr<TransportSecurityStateTrieEntry>> trie_entries;
   std::vector<huffman_trie::TrieEntry*> raw_trie_entries;
   for (const auto& entry : entries) {
-    std::unique_ptr<TransportSecurityStateTrieEntry> trie_entry(
-        new TransportSecurityStateTrieEntry(expect_ct_report_uri_map,
-                                            pinsets_map, entry.get()));
+    auto trie_entry = std::make_unique<TransportSecurityStateTrieEntry>(
+        expect_ct_report_uri_map, pinsets_map, entry.get());
     raw_trie_entries.push_back(trie_entry.get());
     trie_entries.push_back(std::move(trie_entry));
   }
diff --git a/net/url_request/http_with_dns_over_https_unittest.cc b/net/url_request/http_with_dns_over_https_unittest.cc
index 43c94da..7f09ac2 100644
--- a/net/url_request/http_with_dns_over_https_unittest.cc
+++ b/net/url_request/http_with_dns_over_https_unittest.cc
@@ -206,8 +206,7 @@
 
   std::unique_ptr<test_server::HttpResponse> HandleDefaultRequest(
       const test_server::HttpRequest& request) {
-    std::unique_ptr<test_server::BasicHttpResponse> http_response(
-        new test_server::BasicHttpResponse);
+    auto http_response = std::make_unique<test_server::BasicHttpResponse>();
     test_https_requests_served_++;
     http_response->set_content(kTestBody);
     http_response->set_content_type("text/html");
diff --git a/net/url_request/report_sender.cc b/net/url_request/report_sender.cc
index 269658b..e2deec5 100644
--- a/net/url_request/report_sender.cc
+++ b/net/url_request/report_sender.cc
@@ -80,8 +80,7 @@
   url_request->set_method("POST");
 
   std::vector<char> report_data(report.begin(), report.end());
-  std::unique_ptr<UploadElementReader> reader(
-      new UploadOwnedBytesElementReader(&report_data));
+  auto reader = std::make_unique<UploadOwnedBytesElementReader>(&report_data);
   url_request->set_upload(
       ElementsUploadDataStream::CreateWithReader(std::move(reader), 0));
 
diff --git a/net/url_request/report_sender_unittest.cc b/net/url_request/report_sender_unittest.cc
index e1f5d81..56eec03a 100644
--- a/net/url_request/report_sender_unittest.cc
+++ b/net/url_request/report_sender_unittest.cc
@@ -91,7 +91,7 @@
 
  protected:
   void GetResponseInfo(HttpResponseInfo* info) override {
-    info->headers = new HttpResponseHeaders(
+    info->headers = base::MakeRefCounted<HttpResponseHeaders>(
         "HTTP/1.1 500 Internal Server Error\n"
         "Content-type: text/plain\n"
         "Content-Length: 0\n");
@@ -215,8 +215,7 @@
     URLRequestMockDataJob::AddUrlHandler();
     URLRequestFilter::GetInstance()->AddHostnameInterceptor(
         "http", kServerErrorHostname,
-        std::unique_ptr<URLRequestInterceptor>(
-            new MockServerErrorJobInterceptor()));
+        std::make_unique<MockServerErrorJobInterceptor>());
   }
 
   void TearDown() override { URLRequestFilter::GetInstance()->ClearHandlers(); }
@@ -334,8 +333,8 @@
 
   EXPECT_EQ(0u, network_delegate().num_requests());
 
-  std::unique_ptr<ReportSender> reporter(
-      new ReportSender(context(), TRAFFIC_ANNOTATION_FOR_TESTS));
+  auto reporter =
+      std::make_unique<ReportSender>(context(), TRAFFIC_ANNOTATION_FOR_TESTS);
   reporter->Send(url, "application/foobar", kDummyReport, NetworkIsolationKey(),
                  base::OnceCallback<void()>(),
                  base::OnceCallback<void(const GURL&, int, int)>());
diff --git a/net/url_request/url_request_context_builder.cc b/net/url_request/url_request_context_builder.cc
index dc41e47e..fee9b78 100644
--- a/net/url_request/url_request_context_builder.cc
+++ b/net/url_request/url_request_context_builder.cc
@@ -444,8 +444,8 @@
   if (cookie_store_set_by_client_) {
     storage->set_cookie_store(std::move(cookie_store_));
   } else {
-    std::unique_ptr<CookieStore> cookie_store(new CookieMonster(
-        nullptr /* store */, context->net_log(), first_party_sets_enabled_));
+    auto cookie_store = std::make_unique<CookieMonster>(
+        nullptr /* store */, context->net_log(), first_party_sets_enabled_);
     storage->set_cookie_store(std::move(cookie_store));
   }
 
diff --git a/net/url_request/url_request_filter_unittest.cc b/net/url_request/url_request_filter_unittest.cc
index c330f61..953f6a7 100644
--- a/net/url_request/url_request_filter_unittest.cc
+++ b/net/url_request/url_request_filter_unittest.cc
@@ -67,8 +67,7 @@
 
   // Check AddUrlInterceptor checks for invalid URLs.
   EXPECT_FALSE(filter->AddUrlInterceptor(
-      GURL(),
-      std::unique_ptr<URLRequestInterceptor>(new TestURLRequestInterceptor())));
+      GURL(), std::make_unique<TestURLRequestInterceptor>()));
 
   // Check URLRequestInterceptor URL matching.
   filter->ClearHandlers();
diff --git a/net/url_request/url_request_quic_perftest.cc b/net/url_request/url_request_quic_perftest.cc
index 32289022..56f9a4c 100644
--- a/net/url_request/url_request_quic_perftest.cc
+++ b/net/url_request/url_request_quic_perftest.cc
@@ -83,8 +83,7 @@
 
 std::unique_ptr<test_server::HttpResponse> HandleRequest(
     const test_server::HttpRequest& request) {
-  std::unique_ptr<test_server::BasicHttpResponse> http_response(
-      new test_server::BasicHttpResponse());
+  auto http_response = std::make_unique<test_server::BasicHttpResponse>();
   std::string alpn =
       quic::AlpnForVersion(DefaultSupportedQuicVersions().front());
   http_response->AddCustomHeader(
@@ -112,7 +111,7 @@
     StartQuicServer();
 
     // Host mapping.
-    std::unique_ptr<MockHostResolver> resolver(new MockHostResolver());
+    auto resolver = std::make_unique<MockHostResolver>();
     resolver->rules()->AddRule(kAltSvcHost, "127.0.0.1");
     auto host_resolver =
         std::make_unique<MappedHostResolver>(std::move(resolver));
diff --git a/net/url_request/url_request_quic_unittest.cc b/net/url_request/url_request_quic_unittest.cc
index f15604b8..ad623f2 100644
--- a/net/url_request/url_request_quic_unittest.cc
+++ b/net/url_request/url_request_quic_unittest.cc
@@ -247,7 +247,7 @@
         server_->Listen(net::IPEndPoint(net::IPAddress::IPv4AllZeros(), 0));
     EXPECT_GE(rv, 0) << "Quic server fails to start";
 
-    std::unique_ptr<MockHostResolver> resolver(new MockHostResolver());
+    auto resolver = std::make_unique<MockHostResolver>();
     resolver->rules()->AddRule("test.example.com", "127.0.0.1");
     host_resolver_ = std::make_unique<MappedHostResolver>(std::move(resolver));
     // Use a mapped host resolver so that request for test.example.com
diff --git a/net/url_request/url_request_test_util.cc b/net/url_request/url_request_test_util.cc
index 32d681e..7e1bd7ea 100644
--- a/net/url_request/url_request_test_util.cc
+++ b/net/url_request/url_request_test_util.cc
@@ -390,8 +390,8 @@
   next_states_[req_id] |= kStageBeforeStartTransaction;
 
   if (!redirect_on_headers_received_url_.is_empty()) {
-    *override_response_headers =
-        new HttpResponseHeaders(original_response_headers->raw_headers());
+    *override_response_headers = base::MakeRefCounted<HttpResponseHeaders>(
+        original_response_headers->raw_headers());
     (*override_response_headers)->ReplaceStatusLine("HTTP/1.1 302 Found");
     (*override_response_headers)->RemoveHeader("Location");
     (*override_response_headers)
@@ -402,8 +402,8 @@
     // Since both values are absl::optionals, can just copy this over.
     *preserve_fragment_on_redirect_url = preserve_fragment_on_redirect_url_;
   } else if (add_header_to_first_response_ && is_first_response) {
-    *override_response_headers =
-        new HttpResponseHeaders(original_response_headers->raw_headers());
+    *override_response_headers = base::MakeRefCounted<HttpResponseHeaders>(
+        original_response_headers->raw_headers());
     (*override_response_headers)
         ->AddHeader("X-Network-Delegate", "Greetings, planet");
   }
diff --git a/net/url_request/url_request_throttler_manager.cc b/net/url_request/url_request_throttler_manager.cc
index 5927ee91..c5d4911 100644
--- a/net/url_request/url_request_throttler_manager.cc
+++ b/net/url_request/url_request_throttler_manager.cc
@@ -68,7 +68,7 @@
 
   // Create the entry if needed.
   if (entry.get() == nullptr) {
-    entry = new URLRequestThrottlerEntry(this, url_id);
+    entry = base::MakeRefCounted<URLRequestThrottlerEntry>(this, url_id);
 
     // We only disable back-off throttling on an entry that we have
     // just constructed.  This is to allow unit tests to explicitly override
diff --git a/net/url_request/url_request_throttler_simulation_unittest.cc b/net/url_request/url_request_throttler_simulation_unittest.cc
index bcf37963..9d79f695 100644
--- a/net/url_request/url_request_throttler_simulation_unittest.cc
+++ b/net/url_request/url_request_throttler_simulation_unittest.cc
@@ -225,7 +225,7 @@
     if (num_ticks % ticks_per_column)
       ++num_columns;
     DCHECK_LE(num_columns, terminal_width);
-    std::unique_ptr<int[]> columns(new int[num_columns]);
+    auto columns = std::make_unique<int[]>(num_columns);
     for (int tx = 0; tx < num_ticks; ++tx) {
       int cx = tx / ticks_per_column;
       if (tx % ticks_per_column == 0)
@@ -488,27 +488,26 @@
   for (size_t i = 0; i < kNumAttackers; ++i) {
     // Use a tiny time_between_requests so the attackers will ping the
     // server at every tick of the simulation.
-    scoped_refptr<MockURLRequestThrottlerEntry> throttler_entry(
-        new MockURLRequestThrottlerEntry(&manager));
+    auto throttler_entry =
+        base::MakeRefCounted<MockURLRequestThrottlerEntry>(&manager);
     if (!enable_throttling)
       throttler_entry->DisableBackoffThrottling();
 
-    std::unique_ptr<Requester> attacker(
-        new Requester(throttler_entry.get(), base::Milliseconds(1), server,
-                      attacker_results));
+    auto attacker = std::make_unique<Requester>(
+        throttler_entry.get(), base::Milliseconds(1), server, attacker_results);
     attacker->SetStartupJitter(base::Seconds(120));
     simulation.AddActor(attacker.get());
     requesters.push_back(std::move(attacker));
   }
   for (size_t i = 0; i < kNumClients; ++i) {
     // Normal clients only make requests every 2 minutes, plus/minus 1 minute.
-    scoped_refptr<MockURLRequestThrottlerEntry> throttler_entry(
-        new MockURLRequestThrottlerEntry(&manager));
+    auto throttler_entry =
+        base::MakeRefCounted<MockURLRequestThrottlerEntry>(&manager);
     if (!enable_throttling)
       throttler_entry->DisableBackoffThrottling();
 
-    std::unique_ptr<Requester> client(new Requester(
-        throttler_entry.get(), base::Minutes(2), server, client_results));
+    auto client = std::make_unique<Requester>(
+        throttler_entry.get(), base::Minutes(2), server, client_results);
     client->SetStartupJitter(base::Seconds(120));
     client->SetRequestJitter(base::Minutes(1));
     simulation.AddActor(client.get());
@@ -585,8 +584,8 @@
   server.SetDowntime(start_downtime, duration);
 
   URLRequestThrottlerManager manager;
-  scoped_refptr<MockURLRequestThrottlerEntry> throttler_entry(
-      new MockURLRequestThrottlerEntry(&manager));
+  auto throttler_entry =
+      base::MakeRefCounted<MockURLRequestThrottlerEntry>(&manager);
   if (!enable_throttling)
     throttler_entry->DisableBackoffThrottling();
 
diff --git a/net/url_request/url_request_throttler_unittest.cc b/net/url_request/url_request_throttler_unittest.cc
index 98c2aea..49fa1a21 100644
--- a/net/url_request/url_request_throttler_unittest.cc
+++ b/net/url_request/url_request_throttler_unittest.cc
@@ -181,7 +181,7 @@
   request_->SetLoadFlags(0);
 
   now_ = TimeTicks::Now();
-  entry_ = new MockURLRequestThrottlerEntry(&manager_);
+  entry_ = base::MakeRefCounted<MockURLRequestThrottlerEntry>(&manager_);
   entry_->ResetToBlank(now_);
 }
 
diff --git a/net/url_request/url_request_unittest.cc b/net/url_request/url_request_unittest.cc
index 10bfbf4..95a20fcc 100644
--- a/net/url_request/url_request_unittest.cc
+++ b/net/url_request/url_request_unittest.cc
@@ -335,8 +335,7 @@
 }
 
 std::unique_ptr<UploadDataStream> CreateSimpleUploadData(const char* data) {
-  std::unique_ptr<UploadElementReader> reader(
-      new UploadBytesElementReader(data, strlen(data)));
+  auto reader = std::make_unique<UploadBytesElementReader>(data, strlen(data));
   return ElementsUploadDataStream::CreateWithReader(std::move(reader), 0);
 }
 
@@ -3732,12 +3731,11 @@
     scoped_refptr<HttpResponseHeaders>* override_response_headers,
     const IPEndPoint& endpoint,
     absl::optional<GURL>* preserve_fragment_on_redirect_url) {
-  HttpResponseHeaders* new_response_headers =
-      new HttpResponseHeaders(original_response_headers->raw_headers());
+  *override_response_headers = base::MakeRefCounted<HttpResponseHeaders>(
+      original_response_headers->raw_headers());
 
-  new_response_headers->SetHeader("Date", fixed_date_);
+  (*override_response_headers)->SetHeader("Date", fixed_date_);
 
-  *override_response_headers = new_response_headers;
   return TestNetworkDelegate::OnHeadersReceived(
       request, std::move(callback), original_response_headers,
       override_response_headers, endpoint, preserve_fragment_on_redirect_url);
@@ -4044,8 +4042,7 @@
     return nullptr;
   }
 
-  std::unique_ptr<test_server::BasicHttpResponse> http_response(
-      new test_server::BasicHttpResponse);
+  auto http_response = std::make_unique<test_server::BasicHttpResponse>();
   http_response->set_code(HTTP_FOUND);
   http_response->AddCustomHeader("Location",
                                  "http://www.destination.com/foo.js");
@@ -4676,12 +4673,11 @@
     return nullptr;
   }
 
-  std::unique_ptr<test_server::BasicHttpResponse> http_response(
-      new test_server::BasicHttpResponse);
+  auto http_response = std::make_unique<test_server::BasicHttpResponse>();
   http_response->set_code(HTTP_UNAUTHORIZED);
   http_response->AddCustomHeader("WWW-Authenticate",
                                  "Basic realm=\"WallyWorld\"");
-  return std::move(http_response);
+  return http_response;
 }
 
 }  // namespace
@@ -5919,7 +5915,7 @@
     ASSERT_EQ(true, base::GetFileSize(path, &size64));
     ASSERT_LE(size64, std::numeric_limits<int>::max());
     int size = static_cast<int>(size64);
-    std::unique_ptr<char[]> buf(new char[size]);
+    auto buf = std::make_unique<char[]>(size);
 
     ASSERT_EQ(size, base::ReadFile(path, buf.get(), size));
 
@@ -6004,8 +6000,7 @@
     std::unique_ptr<URLRequest> r(default_context().CreateRequest(
         http_test_server()->GetURL("/echo"), DEFAULT_PRIORITY, &d,
         TRAFFIC_ANNOTATION_FOR_TESTS));
-    std::unique_ptr<ChunkedUploadDataStream> upload_data_stream(
-        new ChunkedUploadDataStream(0));
+    auto upload_data_stream = std::make_unique<ChunkedUploadDataStream>(0);
     std::unique_ptr<ChunkedUploadDataStream::Writer> writer =
         upload_data_stream->CreateWriter();
     r->set_upload(std::move(upload_data_stream));
@@ -6028,8 +6023,7 @@
     std::unique_ptr<URLRequest> r(default_context().CreateRequest(
         http_test_server()->GetURL("/echo"), DEFAULT_PRIORITY, &d,
         TRAFFIC_ANNOTATION_FOR_TESTS));
-    std::unique_ptr<ChunkedUploadDataStream> upload_data_stream(
-        new ChunkedUploadDataStream(0));
+    auto upload_data_stream = std::make_unique<ChunkedUploadDataStream>(0);
     std::unique_ptr<ChunkedUploadDataStream::Writer> writer =
         upload_data_stream->CreateWriter();
     r->set_upload(std::move(upload_data_stream));
@@ -6051,8 +6045,7 @@
     std::unique_ptr<URLRequest> r(default_context().CreateRequest(
         http_test_server()->GetURL("/echo"), DEFAULT_PRIORITY, &d,
         TRAFFIC_ANNOTATION_FOR_TESTS));
-    std::unique_ptr<ChunkedUploadDataStream> upload_data_stream(
-        new ChunkedUploadDataStream(0));
+    auto upload_data_stream = std::make_unique<ChunkedUploadDataStream>(0);
     std::unique_ptr<ChunkedUploadDataStream::Writer> writer =
         upload_data_stream->CreateWriter();
     r->set_upload(std::move(upload_data_stream));
diff --git a/net/websockets/websocket_basic_stream_test.cc b/net/websockets/websocket_basic_stream_test.cc
index 83318aa..1786a4e 100644
--- a/net/websockets/websocket_basic_stream_test.cc
+++ b/net/websockets/websocket_basic_stream_test.cc
@@ -842,7 +842,7 @@
   const size_t kWireSize = kPayloadSize + kLargeFrameHeaderSize;
   const size_t kExpectedFrameCount =
       (kWireSize + kReadBufferSize - 1) / kReadBufferSize;
-  std::unique_ptr<char[]> big_frame(new char[kWireSize]);
+  auto big_frame = std::make_unique<char[]>(kWireSize);
   memcpy(big_frame.get(), "\x81\x7F", 2);
   base::WriteBigEndian(big_frame.get() + 2, kPayloadSize);
   memset(big_frame.get() + kLargeFrameHeaderSize, 'A', kPayloadSize);
diff --git a/net/websockets/websocket_channel_test.cc b/net/websockets/websocket_channel_test.cc
index e9976dd2d..8c3e9ad 100644
--- a/net/websockets/websocket_channel_test.cc
+++ b/net/websockets/websocket_channel_test.cc
@@ -2655,7 +2655,7 @@
   connect_data_.socket_url = wss_url;
   AuthChallengeInfo auth_info;
   absl::optional<AuthCredentials> credentials;
-  scoped_refptr<HttpResponseHeaders> response_headers =
+  auto response_headers =
       base::MakeRefCounted<HttpResponseHeaders>("HTTP/1.1 200 OK");
   IPEndPoint remote_endpoint(net::IPAddress(127, 0, 0, 1), 80);
 
diff --git a/services/metrics/ukm_api.md b/services/metrics/ukm_api.md
index 1a8feee..bd959a30 100644
--- a/services/metrics/ukm_api.md
+++ b/services/metrics/ukm_api.md
@@ -171,7 +171,37 @@
     .Record(ukm_recorder.get());
 ```
 
-3) Within blink/renderer, use `blink::Document::UkmRecorder()`.
+3) Within blink/renderer, use one of the following methods:
+
+* `blink::Document::UkmRecorder()`
+* `blink::ExecutionContext::UkmRecorder()`
+* `blink::ResourceFetcher::UkmRecorder()`
+
+4) If you do not have access to any of the methods in 3), establish a remote
+connection to a UkmRecorderInterface and use a MojoUkmRecorder to get a
+UkmRecorder.
+
+```cpp
+mojo::PendingRemote<ukm::mojom::UkmRecorderInterface> recorder;
+
+// This step depends on how the Metrics service is embedded in the application.
+BindUkmRecorderSomewhere(recorder.InitWithNewPipeAndPassReceiver());
+
+ukm_recorder = std::make_unique<ukm::MojoUkmRecorder>(std::move(recorder));
+ukm::builders::MyEvent(source_id)
+    .SetMyMetric(metric_value)
+    .Record(ukm_recorder.get());
+```
+Depending on which directory you are getting the UkmRecorder from, you need the
+correct interface binder to replace the `BindUkmRecorderSomewhere()` part above.
+Some options are:
+
+* blink/renderer: `Platform::Current()->GetBrowserInterfaceBroker()->GetInterface()`
+* content/renderer: `content::RenderThread::Get()->BindHostReceiver()`
+
+Note: Establishing a new remote connection each time (i.e. per frame, etc.) has
+overhead, so try to avoid opening a new one each time.
+
 
 ### Get A ukm::SourceId
 
diff --git a/services/network/cors/cors_url_loader.cc b/services/network/cors/cors_url_loader.cc
index 26e34d9a..a48e9c59 100644
--- a/services/network/cors/cors_url_loader.cc
+++ b/services/network/cors/cors_url_loader.cc
@@ -258,7 +258,8 @@
     const net::IsolationInfo& isolation_info,
     mojo::PendingRemote<mojom::DevToolsObserver> devtools_observer,
     const mojom::ClientSecurityState* factory_client_security_state,
-    NetworkServiceMemoryCache* memory_cache)
+    NetworkServiceMemoryCache* memory_cache,
+    const CrossOriginEmbedderPolicy& cross_origin_embedder_policy)
     : receiver_(this, std::move(loader_receiver)),
       process_id_(process_id),
       request_id_(request_id),
@@ -279,6 +280,7 @@
       isolation_info_(isolation_info),
       factory_client_security_state_(factory_client_security_state),
       memory_cache_(memory_cache),
+      cross_origin_embedder_policy_(cross_origin_embedder_policy),
       devtools_observer_(std::move(devtools_observer)),
       // CORS preflight related events are logged in a series of URL_REQUEST
       // logs.
@@ -845,8 +847,9 @@
   // Check whether a fresh entry exists in the in-memory cache.
   absl::optional<std::string> cache_key;
   if (memory_cache_) {
-    cache_key = memory_cache_->CanServe(
-        request_, isolation_info_.network_isolation_key());
+    cache_key = memory_cache_->CanServe(request_,
+                                        isolation_info_.network_isolation_key(),
+                                        cross_origin_embedder_policy_);
   }
 
   if (cache_key.has_value()) {
diff --git a/services/network/cors/cors_url_loader.h b/services/network/cors/cors_url_loader.h
index 8d7be465..55d3685f 100644
--- a/services/network/cors/cors_url_loader.h
+++ b/services/network/cors/cors_url_loader.h
@@ -15,6 +15,7 @@
 #include "net/traffic_annotation/network_traffic_annotation.h"
 #include "services/network/cors/preflight_controller.h"
 #include "services/network/public/cpp/cors/cors_error_status.h"
+#include "services/network/public/cpp/cross_origin_embedder_policy.h"
 #include "services/network/public/mojom/client_security_state.mojom-forward.h"
 #include "services/network/public/mojom/devtools_observer.mojom.h"
 #include "services/network/public/mojom/fetch_api.mojom.h"
@@ -67,7 +68,8 @@
       const net::IsolationInfo& isolation_info,
       mojo::PendingRemote<mojom::DevToolsObserver> devtools_observer,
       const mojom::ClientSecurityState* factory_client_security_state,
-      NetworkServiceMemoryCache* memory_cache);
+      NetworkServiceMemoryCache* memory_cache,
+      const CrossOriginEmbedderPolicy& cross_origin_embedder_policy);
 
   CorsURLLoader(const CorsURLLoader&) = delete;
   CorsURLLoader& operator=(const CorsURLLoader&) = delete;
@@ -274,6 +276,8 @@
   // Outlives `this`, or nullptr when the in-memory cache is disabled.
   const raw_ptr<NetworkServiceMemoryCache> memory_cache_;
 
+  const CrossOriginEmbedderPolicy cross_origin_embedder_policy_;
+
   bool has_authorization_covered_by_wildcard_ = false;
 
   // Whether the current preflight request is 1) solely sent for PNA, not for
diff --git a/services/network/cors/cors_url_loader_factory.cc b/services/network/cors/cors_url_loader_factory.cc
index 8d40fc5..c1fbc63 100644
--- a/services/network/cors/cors_url_loader_factory.cc
+++ b/services/network/cors/cors_url_loader_factory.cc
@@ -304,7 +304,7 @@
         GetAllowAnyCorsExemptHeaderForBrowser(),
         context_->cors_non_wildcard_request_headers_support(), isolation_info_,
         std::move(devtools_observer), client_security_state_.get(),
-        context_->GetMemoryCache());
+        context_->GetMemoryCache(), cross_origin_embedder_policy_);
     auto* raw_loader = loader.get();
     OnCorsURLLoaderCreated(std::move(loader));
     raw_loader->Start();
diff --git a/services/network/network_service_memory_cache.cc b/services/network/network_service_memory_cache.cc
index 495794b1..0de7034c 100644
--- a/services/network/network_service_memory_cache.cc
+++ b/services/network/network_service_memory_cache.cc
@@ -17,6 +17,7 @@
 #include "services/network/network_context.h"
 #include "services/network/network_service_memory_cache_url_loader.h"
 #include "services/network/network_service_memory_cache_writer.h"
+#include "services/network/public/cpp/cross_origin_resource_policy.h"
 #include "services/network/public/cpp/features.h"
 #include "services/network/public/cpp/resource_request.h"
 #include "services/network/url_loader.h"
@@ -172,7 +173,8 @@
 
 absl::optional<std::string> NetworkServiceMemoryCache::CanServe(
     const ResourceRequest& resource_request,
-    const net::NetworkIsolationKey& network_isolation_key) {
+    const net::NetworkIsolationKey& network_isolation_key,
+    const CrossOriginEmbedderPolicy& cross_origin_embedder_policy) {
   // TODO(https://crbug.com/1339708): Support automatically assigned network
   // isolation key for request from browsers. See comments in
   // CorsURLLoaderFactory::CorsURLLoaderFactory.
@@ -192,8 +194,6 @@
     return absl::nullopt;
   }
 
-  // TODO(https://crbug.com/1339708): Perform CORP checks.
-
   std::string cache_key = GenerateCacheKeyForResourceRequest(
       resource_request, network_isolation_key);
 
@@ -202,6 +202,16 @@
     return absl::nullopt;
 
   const mojom::URLResponseHeadPtr& response = it->second->response_head;
+
+  absl::optional<mojom::BlockedByResponseReason> blocked_reason =
+      CrossOriginResourcePolicy::IsBlocked(
+          /*request_url=*/url, /*original_url=*/url,
+          resource_request.request_initiator, *response, resource_request.mode,
+          resource_request.destination, cross_origin_embedder_policy,
+          /*reporter=*/nullptr);
+  if (blocked_reason.has_value())
+    return absl::nullopt;
+
   net::ValidationType validation_type = response->headers->RequiresValidation(
       response->request_time, response->response_time, GetCurrentTime());
   if (validation_type != net::VALIDATION_NONE) {
diff --git a/services/network/network_service_memory_cache.h b/services/network/network_service_memory_cache.h
index 8f32596..19b9d720 100644
--- a/services/network/network_service_memory_cache.h
+++ b/services/network/network_service_memory_cache.h
@@ -31,6 +31,7 @@
 
 class NetworkServiceMemoryCacheURLLoader;
 class NetworkServiceMemoryCacheWriter;
+struct CrossOriginEmbedderPolicy;
 struct ResourceRequest;
 
 // An in-memory HTTP cache. NetworkContext owns the in-memory cache.
@@ -69,7 +70,8 @@
   // used synchronously.
   absl::optional<std::string> CanServe(
       const ResourceRequest& resource_request,
-      const net::NetworkIsolationKey& network_isolation_key);
+      const net::NetworkIsolationKey& network_isolation_key,
+      const CrossOriginEmbedderPolicy& cross_origin_embedder_policy);
 
   // Creates and starts a custom URLLoader that serves a response from the
   // in-memory cache, instead of creating a network::URLLoader. Must be called
diff --git a/services/network/network_service_memory_cache_unittest.cc b/services/network/network_service_memory_cache_unittest.cc
index 1f12bdb..6a53701 100644
--- a/services/network/network_service_memory_cache_unittest.cc
+++ b/services/network/network_service_memory_cache_unittest.cc
@@ -24,6 +24,7 @@
 #include "services/network/network_service.h"
 #include "services/network/network_service_memory_cache_writer.h"
 #include "services/network/public/cpp/cors/origin_access_list.h"
+#include "services/network/public/cpp/cross_origin_embedder_policy.h"
 #include "services/network/public/cpp/features.h"
 #include "services/network/public/mojom/url_loader.mojom.h"
 #include "services/network/public/mojom/url_loader_factory.mojom.h"
@@ -196,13 +197,23 @@
     net::SchemefulSite site(request.url);
     net::NetworkIsolationKey network_isolation_key(/*top_frame_site=*/site,
                                                    /*frame_site=*/site);
-    return memory_cache().CanServe(request, network_isolation_key).has_value();
+    return CanServeFromMemoryCache(request, network_isolation_key);
   }
 
   bool CanServeFromMemoryCache(
       const ResourceRequest& request,
       net::NetworkIsolationKey& network_isolation_key) {
-    return memory_cache().CanServe(request, network_isolation_key).has_value();
+    return CanServeFromMemoryCache(request, network_isolation_key,
+                                   CrossOriginEmbedderPolicy());
+  }
+
+  bool CanServeFromMemoryCache(
+      const ResourceRequest& request,
+      net::NetworkIsolationKey& network_isolation_key,
+      const CrossOriginEmbedderPolicy& cross_origin_embedder_policy) {
+    return memory_cache()
+        .CanServe(request, network_isolation_key, cross_origin_embedder_policy)
+        .has_value();
   }
 
  private:
@@ -408,6 +419,26 @@
       CanServeFromMemoryCache(request, other_site_network_isolation_key));
 }
 
+TEST_F(NetworkServiceMemoryCacheTest, CanServe_CorpBlocked) {
+  ResourceRequest request = CreateRequest("/cacheable");
+  StoreResponseToMemoryCache(request);
+
+  request.mode = mojom::RequestMode::kNoCors;
+  request.request_initiator =
+      url::Origin::Create(GURL("https://other-origin.test/"));
+
+  net::SchemefulSite site(request.url);
+  net::NetworkIsolationKey network_isolation_key(/*top_frame_site=*/site,
+                                                 /*frame_site=*/site);
+
+  CrossOriginEmbedderPolicy cross_origin_embedder_policy;
+  cross_origin_embedder_policy.value =
+      mojom::CrossOriginEmbedderPolicyValue::kRequireCorp;
+
+  ASSERT_FALSE(CanServeFromMemoryCache(request, network_isolation_key,
+                                       cross_origin_embedder_policy));
+}
+
 TEST_F(NetworkServiceMemoryCacheTest, UpdateStoredCache) {
   ResourceRequest request = CreateRequest("/cacheable");
 
@@ -417,8 +448,8 @@
   net::NetworkIsolationKey network_isolation_key(/*top_frame_site=*/site,
                                                  /*frame_site=*/site);
 
-  absl::optional<std::string> cache_key =
-      memory_cache().CanServe(request, network_isolation_key);
+  absl::optional<std::string> cache_key = memory_cache().CanServe(
+      request, network_isolation_key, CrossOriginEmbedderPolicy());
   ASSERT_TRUE(cache_key.has_value());
   mojom::URLResponseHeadPtr response =
       memory_cache().GetResponseHeadForTesting(*cache_key);
diff --git a/services/network/sct_auditing/sct_auditing_handler_unittest.cc b/services/network/sct_auditing/sct_auditing_handler_unittest.cc
index 6a40cd03..c922285 100644
--- a/services/network/sct_auditing/sct_auditing_handler_unittest.cc
+++ b/services/network/sct_auditing/sct_auditing_handler_unittest.cc
@@ -221,7 +221,8 @@
 }
 
 // Tests that if reporting is disabled, reports are not created.
-TEST_F(SCTAuditingHandlerTest, DisableReporting) {
+// crbug.com/1341847 Disable the test due to flakiness
+TEST_F(SCTAuditingHandlerTest, DISABLED_DisableReporting) {
   // Create a report which would normally trigger a send.
   const net::HostPortPair host_port_pair("example.com", 443);
   net::SignedCertificateTimestampAndStatusList sct_list;
diff --git a/styleguide/c++/c++-features.md b/styleguide/c++/c++-features.md
index eb739f4..0cc3dcc 100644
--- a/styleguide/c++/c++-features.md
+++ b/styleguide/c++/c++-features.md
@@ -1719,6 +1719,39 @@
 [discussion thread](https://groups.google.com/a/chromium.org/g/cxx/c/ZspmuJPpv6s/m/wYYTCiRwAAAJ).
 ***
 
+### FunctionRef <sup>[allowed]</sup>
+
+```c++
+absl::FunctionRef
+```
+
+**Description:** Type for holding a non-owning reference to an object of any
+invocable type.
+
+**Documentation:**
+[function_ref.h](https://source.chromium.org/chromium/chromium/src/+/main:third_party/abseil-cpp/absl/functional/function_ref.h)
+
+**Notes:**
+*** promo
+- Unlike `base::OnceCallback` and `base::RepeatingCallback`, `absl::FunctionRef`
+  supports capturing lambdas.
+- Use when passing an invocable object to a function that synchronously calls
+  the invocable object, e.g. `ForEachFrame(absl::FunctionRef<void(Frame&)>)`.
+  This can often result in clearer code than code that is templated to accept
+  lambdas, e.g. with `template <typename Invocable> void
+  ForEachFrame(Invocable invocable)`, it is much less obvious what arguments
+  will be passed to `invocable`.
+- For now, `base::OnceCallback` and `base::RepeatingCallback` intentionally
+  disallow conversions to `absl::FunctionRef`, under the theory that the
+  callback should be a capturing lambda instead. Attempting to use this
+  conversion will trigger a `static_assert` requesting additional feedback for
+  use cases where this conversion would be valuable.
+- *Important:* `absl::FunctionRef` must not outlive the function call. Like
+  `base::StringPiece`, `absl::FunctionRef` is a *non-owning* reference. Using a
+  `absl::FunctionRef` as a class field is highly suspicious.
+- [Discussion thread](https://groups.google.com/a/chromium.org/g/cxx/c/JVN4E4IIYA0/m/V0EVUVLiBwAJ)
+***
+
 ## Abseil Banned Library Features {#absl-blocklist}
 
 The following Abseil library features are not allowed in the Chromium codebase.
@@ -1893,23 +1926,6 @@
 Overlaps with `base/ranges/algorithm.h`.
 ***
 
-### FunctionRef <sup>[tbd]</sup>
-
-```c++
-absl::FunctionRef
-```
-
-**Description:** Type for holding a non-owning reference to an object of any
-invocable type.
-
-**Documentation:**
-[function_ref.h](https://source.chromium.org/chromium/chromium/src/+/main:third_party/abseil-cpp/absl/functional/function_ref.h)
-
-**Notes:**
-*** promo
-None
-***
-
 ### Random <sup>[tbd]</sup>
 
 ```c++
diff --git a/testing/buildbot/chromium.android.fyi.json b/testing/buildbot/chromium.android.fyi.json
index a284e8c..8d19e54 100644
--- a/testing/buildbot/chromium.android.fyi.json
+++ b/testing/buildbot/chromium.android.fyi.json
@@ -8331,15 +8331,15 @@
       {
         "args": [
           "--additional-apk=apks/WebLayerShellSystemWebView.apk",
+          "--webview-apk-path=apks/SystemWebView.apk",
           "--test-runner-outdir",
           ".",
+          "--client-outdir",
+          "../../weblayer_instrumentation_test_M103/out/Release",
           "--implementation-outdir",
           ".",
           "--test-expectations",
           "../../weblayer/browser/android/javatests/skew/expectations.txt",
-          "--webview-apk-path=apks/SystemWebView.apk",
-          "--client-outdir",
-          "../../weblayer_instrumentation_test_M103/out/Release",
           "--client-version=103",
           "--gs-results-bucket=chromium-result-details",
           "--recover-devices",
@@ -8365,7 +8365,7 @@
             {
               "cipd_package": "chromium/testing/weblayer-x86",
               "location": "weblayer_instrumentation_test_M103",
-              "revision": "version:103.0.5060.117"
+              "revision": "version:103.0.5060.118"
             },
             {
               "cipd_package": "infra/tools/luci/logdog/butler/${platform}",
@@ -8416,15 +8416,15 @@
       {
         "args": [
           "--additional-apk=apks/WebLayerShellSystemWebView.apk",
+          "--webview-apk-path=apks/SystemWebView.apk",
           "--test-runner-outdir",
           ".",
+          "--client-outdir",
+          "../../weblayer_instrumentation_test_M104/out/Release",
           "--implementation-outdir",
           ".",
           "--test-expectations",
           "../../weblayer/browser/android/javatests/skew/expectations.txt",
-          "--webview-apk-path=apks/SystemWebView.apk",
-          "--client-outdir",
-          "../../weblayer_instrumentation_test_M104/out/Release",
           "--client-version=104",
           "--gs-results-bucket=chromium-result-details",
           "--recover-devices",
@@ -8450,7 +8450,7 @@
             {
               "cipd_package": "chromium/testing/weblayer-x86",
               "location": "weblayer_instrumentation_test_M104",
-              "revision": "version:104.0.5112.35"
+              "revision": "version:104.0.5112.36"
             },
             {
               "cipd_package": "infra/tools/luci/logdog/butler/${platform}",
@@ -8841,15 +8841,15 @@
       {
         "args": [
           "--additional-apk=apks/WebLayerShellSystemWebView.apk",
+          "--webview-apk-path=apks/AOSP_SystemWebView.apk",
           "--test-runner-outdir",
           ".",
           "--client-outdir",
           ".",
-          "--test-expectations",
-          "../../weblayer/browser/android/javatests/skew/expectations.txt",
-          "--webview-apk-path=apks/AOSP_SystemWebView.apk",
           "--implementation-outdir",
           "../../weblayer_instrumentation_test_M103/out/Release",
+          "--test-expectations",
+          "../../weblayer/browser/android/javatests/skew/expectations.txt",
           "--impl-version=103",
           "--gs-results-bucket=chromium-result-details",
           "--recover-devices",
@@ -8875,7 +8875,7 @@
             {
               "cipd_package": "chromium/testing/weblayer-x86",
               "location": "weblayer_instrumentation_test_M103",
-              "revision": "version:103.0.5060.117"
+              "revision": "version:103.0.5060.118"
             },
             {
               "cipd_package": "infra/tools/luci/logdog/butler/${platform}",
@@ -8926,15 +8926,15 @@
       {
         "args": [
           "--additional-apk=apks/WebLayerShellSystemWebView.apk",
+          "--webview-apk-path=apks/AOSP_SystemWebView.apk",
           "--test-runner-outdir",
           ".",
           "--client-outdir",
           ".",
-          "--test-expectations",
-          "../../weblayer/browser/android/javatests/skew/expectations.txt",
-          "--webview-apk-path=apks/AOSP_SystemWebView.apk",
           "--implementation-outdir",
           "../../weblayer_instrumentation_test_M104/out/Release",
+          "--test-expectations",
+          "../../weblayer/browser/android/javatests/skew/expectations.txt",
           "--impl-version=104",
           "--gs-results-bucket=chromium-result-details",
           "--recover-devices",
@@ -8960,7 +8960,7 @@
             {
               "cipd_package": "chromium/testing/weblayer-x86",
               "location": "weblayer_instrumentation_test_M104",
-              "revision": "version:104.0.5112.35"
+              "revision": "version:104.0.5112.36"
             },
             {
               "cipd_package": "infra/tools/luci/logdog/butler/${platform}",
diff --git a/testing/buildbot/chromium.android.json b/testing/buildbot/chromium.android.json
index 18df060..341aa34 100644
--- a/testing/buildbot/chromium.android.json
+++ b/testing/buildbot/chromium.android.json
@@ -46508,15 +46508,15 @@
       {
         "args": [
           "--additional-apk=apks/WebLayerShellSystemWebView.apk",
+          "--webview-apk-path=apks/SystemWebView.apk",
           "--test-runner-outdir",
           ".",
+          "--client-outdir",
+          "../../weblayer_instrumentation_test_M103/out/Release",
           "--implementation-outdir",
           ".",
           "--test-expectations",
           "../../weblayer/browser/android/javatests/skew/expectations.txt",
-          "--webview-apk-path=apks/SystemWebView.apk",
-          "--client-outdir",
-          "../../weblayer_instrumentation_test_M103/out/Release",
           "--client-version=103",
           "--gs-results-bucket=chromium-result-details",
           "--recover-devices",
@@ -46542,7 +46542,7 @@
             {
               "cipd_package": "chromium/testing/weblayer-x86",
               "location": "weblayer_instrumentation_test_M103",
-              "revision": "version:103.0.5060.117"
+              "revision": "version:103.0.5060.118"
             },
             {
               "cipd_package": "infra/tools/luci/logdog/butler/${platform}",
@@ -46593,15 +46593,15 @@
       {
         "args": [
           "--additional-apk=apks/WebLayerShellSystemWebView.apk",
+          "--webview-apk-path=apks/SystemWebView.apk",
           "--test-runner-outdir",
           ".",
+          "--client-outdir",
+          "../../weblayer_instrumentation_test_M104/out/Release",
           "--implementation-outdir",
           ".",
           "--test-expectations",
           "../../weblayer/browser/android/javatests/skew/expectations.txt",
-          "--webview-apk-path=apks/SystemWebView.apk",
-          "--client-outdir",
-          "../../weblayer_instrumentation_test_M104/out/Release",
           "--client-version=104",
           "--gs-results-bucket=chromium-result-details",
           "--recover-devices",
@@ -46627,7 +46627,7 @@
             {
               "cipd_package": "chromium/testing/weblayer-x86",
               "location": "weblayer_instrumentation_test_M104",
-              "revision": "version:104.0.5112.35"
+              "revision": "version:104.0.5112.36"
             },
             {
               "cipd_package": "infra/tools/luci/logdog/butler/${platform}",
@@ -47018,15 +47018,15 @@
       {
         "args": [
           "--additional-apk=apks/WebLayerShellSystemWebView.apk",
+          "--webview-apk-path=apks/AOSP_SystemWebView.apk",
           "--test-runner-outdir",
           ".",
           "--client-outdir",
           ".",
-          "--test-expectations",
-          "../../weblayer/browser/android/javatests/skew/expectations.txt",
-          "--webview-apk-path=apks/AOSP_SystemWebView.apk",
           "--implementation-outdir",
           "../../weblayer_instrumentation_test_M103/out/Release",
+          "--test-expectations",
+          "../../weblayer/browser/android/javatests/skew/expectations.txt",
           "--impl-version=103",
           "--gs-results-bucket=chromium-result-details",
           "--recover-devices",
@@ -47052,7 +47052,7 @@
             {
               "cipd_package": "chromium/testing/weblayer-x86",
               "location": "weblayer_instrumentation_test_M103",
-              "revision": "version:103.0.5060.117"
+              "revision": "version:103.0.5060.118"
             },
             {
               "cipd_package": "infra/tools/luci/logdog/butler/${platform}",
@@ -47103,15 +47103,15 @@
       {
         "args": [
           "--additional-apk=apks/WebLayerShellSystemWebView.apk",
+          "--webview-apk-path=apks/AOSP_SystemWebView.apk",
           "--test-runner-outdir",
           ".",
           "--client-outdir",
           ".",
-          "--test-expectations",
-          "../../weblayer/browser/android/javatests/skew/expectations.txt",
-          "--webview-apk-path=apks/AOSP_SystemWebView.apk",
           "--implementation-outdir",
           "../../weblayer_instrumentation_test_M104/out/Release",
+          "--test-expectations",
+          "../../weblayer/browser/android/javatests/skew/expectations.txt",
           "--impl-version=104",
           "--gs-results-bucket=chromium-result-details",
           "--recover-devices",
@@ -47137,7 +47137,7 @@
             {
               "cipd_package": "chromium/testing/weblayer-x86",
               "location": "weblayer_instrumentation_test_M104",
-              "revision": "version:104.0.5112.35"
+              "revision": "version:104.0.5112.36"
             },
             {
               "cipd_package": "infra/tools/luci/logdog/butler/${platform}",
@@ -47532,15 +47532,15 @@
       {
         "args": [
           "--additional-apk=apks/ChromePublic.apk",
+          "--webview-apk-path=apks/SystemWebView.apk",
           "--test-runner-outdir",
           ".",
+          "--client-outdir",
+          "../../weblayer_instrumentation_test_M103/out/Release",
           "--implementation-outdir",
           ".",
           "--test-expectations",
           "../../weblayer/browser/android/javatests/skew/expectations.txt",
-          "--webview-apk-path=apks/SystemWebView.apk",
-          "--client-outdir",
-          "../../weblayer_instrumentation_test_M103/out/Release",
           "--client-version=103",
           "--gs-results-bucket=chromium-result-details",
           "--recover-devices",
@@ -47566,7 +47566,7 @@
             {
               "cipd_package": "chromium/testing/weblayer-x86",
               "location": "weblayer_instrumentation_test_M103",
-              "revision": "version:103.0.5060.117"
+              "revision": "version:103.0.5060.118"
             },
             {
               "cipd_package": "infra/tools/luci/logdog/butler/${platform}",
@@ -47617,15 +47617,15 @@
       {
         "args": [
           "--additional-apk=apks/ChromePublic.apk",
+          "--webview-apk-path=apks/SystemWebView.apk",
           "--test-runner-outdir",
           ".",
+          "--client-outdir",
+          "../../weblayer_instrumentation_test_M104/out/Release",
           "--implementation-outdir",
           ".",
           "--test-expectations",
           "../../weblayer/browser/android/javatests/skew/expectations.txt",
-          "--webview-apk-path=apks/SystemWebView.apk",
-          "--client-outdir",
-          "../../weblayer_instrumentation_test_M104/out/Release",
           "--client-version=104",
           "--gs-results-bucket=chromium-result-details",
           "--recover-devices",
@@ -47651,7 +47651,7 @@
             {
               "cipd_package": "chromium/testing/weblayer-x86",
               "location": "weblayer_instrumentation_test_M104",
-              "revision": "version:104.0.5112.35"
+              "revision": "version:104.0.5112.36"
             },
             {
               "cipd_package": "infra/tools/luci/logdog/butler/${platform}",
@@ -48042,15 +48042,15 @@
       {
         "args": [
           "--additional-apk=apks/ChromePublic.apk",
+          "--webview-apk-path=apks/AOSP_SystemWebView.apk",
           "--test-runner-outdir",
           ".",
           "--client-outdir",
           ".",
-          "--test-expectations",
-          "../../weblayer/browser/android/javatests/skew/expectations.txt",
-          "--webview-apk-path=apks/AOSP_SystemWebView.apk",
           "--implementation-outdir",
           "../../weblayer_instrumentation_test_M103/out/Release",
+          "--test-expectations",
+          "../../weblayer/browser/android/javatests/skew/expectations.txt",
           "--impl-version=103",
           "--gs-results-bucket=chromium-result-details",
           "--recover-devices",
@@ -48076,7 +48076,7 @@
             {
               "cipd_package": "chromium/testing/weblayer-x86",
               "location": "weblayer_instrumentation_test_M103",
-              "revision": "version:103.0.5060.117"
+              "revision": "version:103.0.5060.118"
             },
             {
               "cipd_package": "infra/tools/luci/logdog/butler/${platform}",
@@ -48127,15 +48127,15 @@
       {
         "args": [
           "--additional-apk=apks/ChromePublic.apk",
+          "--webview-apk-path=apks/AOSP_SystemWebView.apk",
           "--test-runner-outdir",
           ".",
           "--client-outdir",
           ".",
-          "--test-expectations",
-          "../../weblayer/browser/android/javatests/skew/expectations.txt",
-          "--webview-apk-path=apks/AOSP_SystemWebView.apk",
           "--implementation-outdir",
           "../../weblayer_instrumentation_test_M104/out/Release",
+          "--test-expectations",
+          "../../weblayer/browser/android/javatests/skew/expectations.txt",
           "--impl-version=104",
           "--gs-results-bucket=chromium-result-details",
           "--recover-devices",
@@ -48161,7 +48161,7 @@
             {
               "cipd_package": "chromium/testing/weblayer-x86",
               "location": "weblayer_instrumentation_test_M104",
-              "revision": "version:104.0.5112.35"
+              "revision": "version:104.0.5112.36"
             },
             {
               "cipd_package": "infra/tools/luci/logdog/butler/${platform}",
@@ -48624,15 +48624,15 @@
       {
         "args": [
           "--additional-apk=apks/WebLayerShellSystemWebView.apk",
+          "--webview-apk-path=apks/SystemWebView.apk",
           "--test-runner-outdir",
           ".",
+          "--client-outdir",
+          "../../weblayer_instrumentation_test_M103/out/Release",
           "--implementation-outdir",
           ".",
           "--test-expectations",
           "../../weblayer/browser/android/javatests/skew/expectations.txt",
-          "--webview-apk-path=apks/SystemWebView.apk",
-          "--client-outdir",
-          "../../weblayer_instrumentation_test_M103/out/Release",
           "--client-version=103",
           "--gs-results-bucket=chromium-result-details",
           "--recover-devices",
@@ -48658,7 +48658,7 @@
             {
               "cipd_package": "chromium/testing/weblayer-x86",
               "location": "weblayer_instrumentation_test_M103",
-              "revision": "version:103.0.5060.117"
+              "revision": "version:103.0.5060.118"
             },
             {
               "cipd_package": "infra/tools/luci/logdog/butler/${platform}",
@@ -48709,15 +48709,15 @@
       {
         "args": [
           "--additional-apk=apks/WebLayerShellSystemWebView.apk",
+          "--webview-apk-path=apks/SystemWebView.apk",
           "--test-runner-outdir",
           ".",
+          "--client-outdir",
+          "../../weblayer_instrumentation_test_M104/out/Release",
           "--implementation-outdir",
           ".",
           "--test-expectations",
           "../../weblayer/browser/android/javatests/skew/expectations.txt",
-          "--webview-apk-path=apks/SystemWebView.apk",
-          "--client-outdir",
-          "../../weblayer_instrumentation_test_M104/out/Release",
           "--client-version=104",
           "--gs-results-bucket=chromium-result-details",
           "--recover-devices",
@@ -48743,7 +48743,7 @@
             {
               "cipd_package": "chromium/testing/weblayer-x86",
               "location": "weblayer_instrumentation_test_M104",
-              "revision": "version:104.0.5112.35"
+              "revision": "version:104.0.5112.36"
             },
             {
               "cipd_package": "infra/tools/luci/logdog/butler/${platform}",
@@ -49134,15 +49134,15 @@
       {
         "args": [
           "--additional-apk=apks/WebLayerShellSystemWebView.apk",
+          "--webview-apk-path=apks/SystemWebView.apk",
           "--test-runner-outdir",
           ".",
           "--client-outdir",
           ".",
-          "--test-expectations",
-          "../../weblayer/browser/android/javatests/skew/expectations.txt",
-          "--webview-apk-path=apks/SystemWebView.apk",
           "--implementation-outdir",
           "../../weblayer_instrumentation_test_M103/out/Release",
+          "--test-expectations",
+          "../../weblayer/browser/android/javatests/skew/expectations.txt",
           "--impl-version=103",
           "--gs-results-bucket=chromium-result-details",
           "--recover-devices",
@@ -49168,7 +49168,7 @@
             {
               "cipd_package": "chromium/testing/weblayer-x86",
               "location": "weblayer_instrumentation_test_M103",
-              "revision": "version:103.0.5060.117"
+              "revision": "version:103.0.5060.118"
             },
             {
               "cipd_package": "infra/tools/luci/logdog/butler/${platform}",
@@ -49219,15 +49219,15 @@
       {
         "args": [
           "--additional-apk=apks/WebLayerShellSystemWebView.apk",
+          "--webview-apk-path=apks/SystemWebView.apk",
           "--test-runner-outdir",
           ".",
           "--client-outdir",
           ".",
-          "--test-expectations",
-          "../../weblayer/browser/android/javatests/skew/expectations.txt",
-          "--webview-apk-path=apks/SystemWebView.apk",
           "--implementation-outdir",
           "../../weblayer_instrumentation_test_M104/out/Release",
+          "--test-expectations",
+          "../../weblayer/browser/android/javatests/skew/expectations.txt",
           "--impl-version=104",
           "--gs-results-bucket=chromium-result-details",
           "--recover-devices",
@@ -49253,7 +49253,7 @@
             {
               "cipd_package": "chromium/testing/weblayer-x86",
               "location": "weblayer_instrumentation_test_M104",
-              "revision": "version:104.0.5112.35"
+              "revision": "version:104.0.5112.36"
             },
             {
               "cipd_package": "infra/tools/luci/logdog/butler/${platform}",
@@ -49716,15 +49716,15 @@
       {
         "args": [
           "--additional-apk=apks/WebLayerShellSystemWebView.apk",
+          "--webview-apk-path=apks/SystemWebView.apk",
           "--test-runner-outdir",
           ".",
+          "--client-outdir",
+          "../../weblayer_instrumentation_test_M103/out/Release",
           "--implementation-outdir",
           ".",
           "--test-expectations",
           "../../weblayer/browser/android/javatests/skew/expectations.txt",
-          "--webview-apk-path=apks/SystemWebView.apk",
-          "--client-outdir",
-          "../../weblayer_instrumentation_test_M103/out/Release",
           "--client-version=103",
           "--gs-results-bucket=chromium-result-details",
           "--recover-devices",
@@ -49750,7 +49750,7 @@
             {
               "cipd_package": "chromium/testing/weblayer-x86",
               "location": "weblayer_instrumentation_test_M103",
-              "revision": "version:103.0.5060.117"
+              "revision": "version:103.0.5060.118"
             },
             {
               "cipd_package": "infra/tools/luci/logdog/butler/${platform}",
@@ -49801,15 +49801,15 @@
       {
         "args": [
           "--additional-apk=apks/WebLayerShellSystemWebView.apk",
+          "--webview-apk-path=apks/SystemWebView.apk",
           "--test-runner-outdir",
           ".",
+          "--client-outdir",
+          "../../weblayer_instrumentation_test_M104/out/Release",
           "--implementation-outdir",
           ".",
           "--test-expectations",
           "../../weblayer/browser/android/javatests/skew/expectations.txt",
-          "--webview-apk-path=apks/SystemWebView.apk",
-          "--client-outdir",
-          "../../weblayer_instrumentation_test_M104/out/Release",
           "--client-version=104",
           "--gs-results-bucket=chromium-result-details",
           "--recover-devices",
@@ -49835,7 +49835,7 @@
             {
               "cipd_package": "chromium/testing/weblayer-x86",
               "location": "weblayer_instrumentation_test_M104",
-              "revision": "version:104.0.5112.35"
+              "revision": "version:104.0.5112.36"
             },
             {
               "cipd_package": "infra/tools/luci/logdog/butler/${platform}",
@@ -50226,15 +50226,15 @@
       {
         "args": [
           "--additional-apk=apks/WebLayerShellSystemWebView.apk",
+          "--webview-apk-path=apks/SystemWebView.apk",
           "--test-runner-outdir",
           ".",
           "--client-outdir",
           ".",
-          "--test-expectations",
-          "../../weblayer/browser/android/javatests/skew/expectations.txt",
-          "--webview-apk-path=apks/SystemWebView.apk",
           "--implementation-outdir",
           "../../weblayer_instrumentation_test_M103/out/Release",
+          "--test-expectations",
+          "../../weblayer/browser/android/javatests/skew/expectations.txt",
           "--impl-version=103",
           "--gs-results-bucket=chromium-result-details",
           "--recover-devices",
@@ -50260,7 +50260,7 @@
             {
               "cipd_package": "chromium/testing/weblayer-x86",
               "location": "weblayer_instrumentation_test_M103",
-              "revision": "version:103.0.5060.117"
+              "revision": "version:103.0.5060.118"
             },
             {
               "cipd_package": "infra/tools/luci/logdog/butler/${platform}",
@@ -50311,15 +50311,15 @@
       {
         "args": [
           "--additional-apk=apks/WebLayerShellSystemWebView.apk",
+          "--webview-apk-path=apks/SystemWebView.apk",
           "--test-runner-outdir",
           ".",
           "--client-outdir",
           ".",
-          "--test-expectations",
-          "../../weblayer/browser/android/javatests/skew/expectations.txt",
-          "--webview-apk-path=apks/SystemWebView.apk",
           "--implementation-outdir",
           "../../weblayer_instrumentation_test_M104/out/Release",
+          "--test-expectations",
+          "../../weblayer/browser/android/javatests/skew/expectations.txt",
           "--impl-version=104",
           "--gs-results-bucket=chromium-result-details",
           "--recover-devices",
@@ -50345,7 +50345,7 @@
             {
               "cipd_package": "chromium/testing/weblayer-x86",
               "location": "weblayer_instrumentation_test_M104",
-              "revision": "version:104.0.5112.35"
+              "revision": "version:104.0.5112.36"
             },
             {
               "cipd_package": "infra/tools/luci/logdog/butler/${platform}",
diff --git a/testing/buildbot/chromium.chromiumos.json b/testing/buildbot/chromium.chromiumos.json
index 99a9983f..d1019984 100644
--- a/testing/buildbot/chromium.chromiumos.json
+++ b/testing/buildbot/chromium.chromiumos.json
@@ -5688,21 +5688,21 @@
       {
         "args": [
           "--test-launcher-filter-file=../../testing/buildbot/filters/linux-lacros.interactive_ui_tests.filter;../../testing/buildbot/filters/linux-lacros.interactive_ui_tests.skew.filter",
-          "--ash-chrome-path-override=../../lacros_version_skew_tests_v105.0.5162.0/test_ash_chrome"
+          "--ash-chrome-path-override=../../lacros_version_skew_tests_v105.0.5163.0/test_ash_chrome"
         ],
         "isolate_profile_data": true,
         "merge": {
           "args": [],
           "script": "//testing/merge_scripts/standard_gtest_merge.py"
         },
-        "name": "interactive_ui_tests Lacros version skew testing ash 105.0.5162.0",
+        "name": "interactive_ui_tests Lacros version skew testing ash 105.0.5163.0",
         "swarming": {
           "can_use_on_swarming_builders": true,
           "cipd_packages": [
             {
               "cipd_package": "chromium/testing/linux-ash-chromium/x86_64/ash.zip",
-              "location": "lacros_version_skew_tests_v105.0.5162.0",
-              "revision": "version:105.0.5162.0"
+              "location": "lacros_version_skew_tests_v105.0.5163.0",
+              "revision": "version:105.0.5163.0"
             }
           ],
           "dimension_sets": [
@@ -5715,7 +5715,7 @@
         },
         "test": "interactive_ui_tests",
         "test_id_prefix": "ninja://chrome/test:interactive_ui_tests/",
-        "variant_id": "Lacros version skew testing ash 105.0.5162.0"
+        "variant_id": "Lacros version skew testing ash 105.0.5163.0"
       },
       {
         "isolate_profile_data": true,
@@ -5853,21 +5853,21 @@
       {
         "args": [
           "--test-launcher-filter-file=../../testing/buildbot/filters/linux-lacros.lacros_chrome_browsertests.skew.filter",
-          "--ash-chrome-path-override=../../lacros_version_skew_tests_v105.0.5162.0/test_ash_chrome"
+          "--ash-chrome-path-override=../../lacros_version_skew_tests_v105.0.5163.0/test_ash_chrome"
         ],
         "isolate_profile_data": true,
         "merge": {
           "args": [],
           "script": "//testing/merge_scripts/standard_gtest_merge.py"
         },
-        "name": "lacros_chrome_browsertests Lacros version skew testing ash 105.0.5162.0",
+        "name": "lacros_chrome_browsertests Lacros version skew testing ash 105.0.5163.0",
         "swarming": {
           "can_use_on_swarming_builders": true,
           "cipd_packages": [
             {
               "cipd_package": "chromium/testing/linux-ash-chromium/x86_64/ash.zip",
-              "location": "lacros_version_skew_tests_v105.0.5162.0",
-              "revision": "version:105.0.5162.0"
+              "location": "lacros_version_skew_tests_v105.0.5163.0",
+              "revision": "version:105.0.5163.0"
             }
           ],
           "dimension_sets": [
@@ -5879,7 +5879,7 @@
         },
         "test": "lacros_chrome_browsertests",
         "test_id_prefix": "ninja://chrome/test:lacros_chrome_browsertests/",
-        "variant_id": "Lacros version skew testing ash 105.0.5162.0"
+        "variant_id": "Lacros version skew testing ash 105.0.5163.0"
       },
       {
         "args": [
@@ -5999,21 +5999,21 @@
       {
         "args": [
           "--test-launcher-filter-file=../../testing/buildbot/filters/linux-lacros.lacros_chrome_browsertests.skew.filter",
-          "--ash-chrome-path-override=../../lacros_version_skew_tests_v105.0.5162.0/test_ash_chrome"
+          "--ash-chrome-path-override=../../lacros_version_skew_tests_v105.0.5163.0/test_ash_chrome"
         ],
         "isolate_profile_data": true,
         "merge": {
           "args": [],
           "script": "//testing/merge_scripts/standard_gtest_merge.py"
         },
-        "name": "lacros_chrome_browsertests_run_in_series Lacros version skew testing ash 105.0.5162.0",
+        "name": "lacros_chrome_browsertests_run_in_series Lacros version skew testing ash 105.0.5163.0",
         "swarming": {
           "can_use_on_swarming_builders": true,
           "cipd_packages": [
             {
               "cipd_package": "chromium/testing/linux-ash-chromium/x86_64/ash.zip",
-              "location": "lacros_version_skew_tests_v105.0.5162.0",
-              "revision": "version:105.0.5162.0"
+              "location": "lacros_version_skew_tests_v105.0.5163.0",
+              "revision": "version:105.0.5163.0"
             }
           ],
           "dimension_sets": [
@@ -6025,7 +6025,7 @@
         },
         "test": "lacros_chrome_browsertests_run_in_series",
         "test_id_prefix": "ninja://chrome/test:lacros_chrome_browsertests_run_in_series/",
-        "variant_id": "Lacros version skew testing ash 105.0.5162.0"
+        "variant_id": "Lacros version skew testing ash 105.0.5163.0"
       },
       {
         "isolate_profile_data": true,
diff --git a/testing/buildbot/chromium.fyi.json b/testing/buildbot/chromium.fyi.json
index 83f0964..d1d66f0 100644
--- a/testing/buildbot/chromium.fyi.json
+++ b/testing/buildbot/chromium.fyi.json
@@ -92974,21 +92974,21 @@
       {
         "args": [
           "--test-launcher-filter-file=../../testing/buildbot/filters/linux-lacros.interactive_ui_tests.filter;../../testing/buildbot/filters/linux-lacros.interactive_ui_tests.skew.filter",
-          "--ash-chrome-path-override=../../lacros_version_skew_tests_v105.0.5162.0/test_ash_chrome"
+          "--ash-chrome-path-override=../../lacros_version_skew_tests_v105.0.5163.0/test_ash_chrome"
         ],
         "isolate_profile_data": true,
         "merge": {
           "args": [],
           "script": "//testing/merge_scripts/standard_gtest_merge.py"
         },
-        "name": "interactive_ui_tests Lacros version skew testing ash 105.0.5162.0",
+        "name": "interactive_ui_tests Lacros version skew testing ash 105.0.5163.0",
         "swarming": {
           "can_use_on_swarming_builders": true,
           "cipd_packages": [
             {
               "cipd_package": "chromium/testing/linux-ash-chromium/x86_64/ash.zip",
-              "location": "lacros_version_skew_tests_v105.0.5162.0",
-              "revision": "version:105.0.5162.0"
+              "location": "lacros_version_skew_tests_v105.0.5163.0",
+              "revision": "version:105.0.5163.0"
             }
           ],
           "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com",
@@ -92996,7 +92996,7 @@
         },
         "test": "interactive_ui_tests",
         "test_id_prefix": "ninja://chrome/test:interactive_ui_tests/",
-        "variant_id": "Lacros version skew testing ash 105.0.5162.0"
+        "variant_id": "Lacros version skew testing ash 105.0.5163.0"
       },
       {
         "isolate_profile_data": true,
@@ -93109,28 +93109,28 @@
       {
         "args": [
           "--test-launcher-filter-file=../../testing/buildbot/filters/linux-lacros.lacros_chrome_browsertests.skew.filter",
-          "--ash-chrome-path-override=../../lacros_version_skew_tests_v105.0.5162.0/test_ash_chrome"
+          "--ash-chrome-path-override=../../lacros_version_skew_tests_v105.0.5163.0/test_ash_chrome"
         ],
         "isolate_profile_data": true,
         "merge": {
           "args": [],
           "script": "//testing/merge_scripts/standard_gtest_merge.py"
         },
-        "name": "lacros_chrome_browsertests Lacros version skew testing ash 105.0.5162.0",
+        "name": "lacros_chrome_browsertests Lacros version skew testing ash 105.0.5163.0",
         "swarming": {
           "can_use_on_swarming_builders": true,
           "cipd_packages": [
             {
               "cipd_package": "chromium/testing/linux-ash-chromium/x86_64/ash.zip",
-              "location": "lacros_version_skew_tests_v105.0.5162.0",
-              "revision": "version:105.0.5162.0"
+              "location": "lacros_version_skew_tests_v105.0.5163.0",
+              "revision": "version:105.0.5163.0"
             }
           ],
           "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com"
         },
         "test": "lacros_chrome_browsertests",
         "test_id_prefix": "ninja://chrome/test:lacros_chrome_browsertests/",
-        "variant_id": "Lacros version skew testing ash 105.0.5162.0"
+        "variant_id": "Lacros version skew testing ash 105.0.5163.0"
       },
       {
         "args": [
@@ -93230,28 +93230,28 @@
       {
         "args": [
           "--test-launcher-filter-file=../../testing/buildbot/filters/linux-lacros.lacros_chrome_browsertests.skew.filter",
-          "--ash-chrome-path-override=../../lacros_version_skew_tests_v105.0.5162.0/test_ash_chrome"
+          "--ash-chrome-path-override=../../lacros_version_skew_tests_v105.0.5163.0/test_ash_chrome"
         ],
         "isolate_profile_data": true,
         "merge": {
           "args": [],
           "script": "//testing/merge_scripts/standard_gtest_merge.py"
         },
-        "name": "lacros_chrome_browsertests_run_in_series Lacros version skew testing ash 105.0.5162.0",
+        "name": "lacros_chrome_browsertests_run_in_series Lacros version skew testing ash 105.0.5163.0",
         "swarming": {
           "can_use_on_swarming_builders": true,
           "cipd_packages": [
             {
               "cipd_package": "chromium/testing/linux-ash-chromium/x86_64/ash.zip",
-              "location": "lacros_version_skew_tests_v105.0.5162.0",
-              "revision": "version:105.0.5162.0"
+              "location": "lacros_version_skew_tests_v105.0.5163.0",
+              "revision": "version:105.0.5163.0"
             }
           ],
           "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com"
         },
         "test": "lacros_chrome_browsertests_run_in_series",
         "test_id_prefix": "ninja://chrome/test:lacros_chrome_browsertests_run_in_series/",
-        "variant_id": "Lacros version skew testing ash 105.0.5162.0"
+        "variant_id": "Lacros version skew testing ash 105.0.5163.0"
       },
       {
         "isolate_profile_data": true,
@@ -94589,20 +94589,20 @@
       {
         "args": [
           "--test-launcher-filter-file=../../testing/buildbot/filters/linux-lacros.interactive_ui_tests.filter;../../testing/buildbot/filters/linux-lacros.interactive_ui_tests.skew.filter",
-          "--ash-chrome-path-override=../../lacros_version_skew_tests_v105.0.5162.0/test_ash_chrome"
+          "--ash-chrome-path-override=../../lacros_version_skew_tests_v105.0.5163.0/test_ash_chrome"
         ],
         "merge": {
           "args": [],
           "script": "//testing/merge_scripts/standard_gtest_merge.py"
         },
-        "name": "interactive_ui_tests Lacros version skew testing ash 105.0.5162.0",
+        "name": "interactive_ui_tests Lacros version skew testing ash 105.0.5163.0",
         "swarming": {
           "can_use_on_swarming_builders": true,
           "cipd_packages": [
             {
               "cipd_package": "chromium/testing/linux-ash-chromium/x86_64/ash.zip",
-              "location": "lacros_version_skew_tests_v105.0.5162.0",
-              "revision": "version:105.0.5162.0"
+              "location": "lacros_version_skew_tests_v105.0.5163.0",
+              "revision": "version:105.0.5163.0"
             }
           ],
           "dimension_sets": [
@@ -94616,7 +94616,7 @@
         },
         "test": "interactive_ui_tests",
         "test_id_prefix": "ninja://chrome/test:interactive_ui_tests/",
-        "variant_id": "Lacros version skew testing ash 105.0.5162.0"
+        "variant_id": "Lacros version skew testing ash 105.0.5163.0"
       },
       {
         "merge": {
@@ -94754,20 +94754,20 @@
       {
         "args": [
           "--test-launcher-filter-file=../../testing/buildbot/filters/linux-lacros.lacros_chrome_browsertests.skew.filter",
-          "--ash-chrome-path-override=../../lacros_version_skew_tests_v105.0.5162.0/test_ash_chrome"
+          "--ash-chrome-path-override=../../lacros_version_skew_tests_v105.0.5163.0/test_ash_chrome"
         ],
         "merge": {
           "args": [],
           "script": "//testing/merge_scripts/standard_gtest_merge.py"
         },
-        "name": "lacros_chrome_browsertests Lacros version skew testing ash 105.0.5162.0",
+        "name": "lacros_chrome_browsertests Lacros version skew testing ash 105.0.5163.0",
         "swarming": {
           "can_use_on_swarming_builders": true,
           "cipd_packages": [
             {
               "cipd_package": "chromium/testing/linux-ash-chromium/x86_64/ash.zip",
-              "location": "lacros_version_skew_tests_v105.0.5162.0",
-              "revision": "version:105.0.5162.0"
+              "location": "lacros_version_skew_tests_v105.0.5163.0",
+              "revision": "version:105.0.5163.0"
             }
           ],
           "dimension_sets": [
@@ -94780,7 +94780,7 @@
         },
         "test": "lacros_chrome_browsertests",
         "test_id_prefix": "ninja://chrome/test:lacros_chrome_browsertests/",
-        "variant_id": "Lacros version skew testing ash 105.0.5162.0"
+        "variant_id": "Lacros version skew testing ash 105.0.5163.0"
       },
       {
         "args": [
@@ -94900,20 +94900,20 @@
       {
         "args": [
           "--test-launcher-filter-file=../../testing/buildbot/filters/linux-lacros.lacros_chrome_browsertests.skew.filter",
-          "--ash-chrome-path-override=../../lacros_version_skew_tests_v105.0.5162.0/test_ash_chrome"
+          "--ash-chrome-path-override=../../lacros_version_skew_tests_v105.0.5163.0/test_ash_chrome"
         ],
         "merge": {
           "args": [],
           "script": "//testing/merge_scripts/standard_gtest_merge.py"
         },
-        "name": "lacros_chrome_browsertests_run_in_series Lacros version skew testing ash 105.0.5162.0",
+        "name": "lacros_chrome_browsertests_run_in_series Lacros version skew testing ash 105.0.5163.0",
         "swarming": {
           "can_use_on_swarming_builders": true,
           "cipd_packages": [
             {
               "cipd_package": "chromium/testing/linux-ash-chromium/x86_64/ash.zip",
-              "location": "lacros_version_skew_tests_v105.0.5162.0",
-              "revision": "version:105.0.5162.0"
+              "location": "lacros_version_skew_tests_v105.0.5163.0",
+              "revision": "version:105.0.5163.0"
             }
           ],
           "dimension_sets": [
@@ -94926,7 +94926,7 @@
         },
         "test": "lacros_chrome_browsertests_run_in_series",
         "test_id_prefix": "ninja://chrome/test:lacros_chrome_browsertests_run_in_series/",
-        "variant_id": "Lacros version skew testing ash 105.0.5162.0"
+        "variant_id": "Lacros version skew testing ash 105.0.5163.0"
       },
       {
         "merge": {
@@ -96422,20 +96422,20 @@
       {
         "args": [
           "--test-launcher-filter-file=../../testing/buildbot/filters/linux-lacros.interactive_ui_tests.filter;../../testing/buildbot/filters/linux-lacros.interactive_ui_tests.skew.filter",
-          "--ash-chrome-path-override=../../lacros_version_skew_tests_v105.0.5162.0/test_ash_chrome"
+          "--ash-chrome-path-override=../../lacros_version_skew_tests_v105.0.5163.0/test_ash_chrome"
         ],
         "merge": {
           "args": [],
           "script": "//testing/merge_scripts/standard_gtest_merge.py"
         },
-        "name": "interactive_ui_tests Lacros version skew testing ash 105.0.5162.0",
+        "name": "interactive_ui_tests Lacros version skew testing ash 105.0.5163.0",
         "swarming": {
           "can_use_on_swarming_builders": true,
           "cipd_packages": [
             {
               "cipd_package": "chromium/testing/linux-ash-chromium/x86_64/ash.zip",
-              "location": "lacros_version_skew_tests_v105.0.5162.0",
-              "revision": "version:105.0.5162.0"
+              "location": "lacros_version_skew_tests_v105.0.5163.0",
+              "revision": "version:105.0.5163.0"
             }
           ],
           "dimension_sets": [
@@ -96449,7 +96449,7 @@
         },
         "test": "interactive_ui_tests",
         "test_id_prefix": "ninja://chrome/test:interactive_ui_tests/",
-        "variant_id": "Lacros version skew testing ash 105.0.5162.0"
+        "variant_id": "Lacros version skew testing ash 105.0.5163.0"
       },
       {
         "merge": {
@@ -96587,20 +96587,20 @@
       {
         "args": [
           "--test-launcher-filter-file=../../testing/buildbot/filters/linux-lacros.lacros_chrome_browsertests.skew.filter",
-          "--ash-chrome-path-override=../../lacros_version_skew_tests_v105.0.5162.0/test_ash_chrome"
+          "--ash-chrome-path-override=../../lacros_version_skew_tests_v105.0.5163.0/test_ash_chrome"
         ],
         "merge": {
           "args": [],
           "script": "//testing/merge_scripts/standard_gtest_merge.py"
         },
-        "name": "lacros_chrome_browsertests Lacros version skew testing ash 105.0.5162.0",
+        "name": "lacros_chrome_browsertests Lacros version skew testing ash 105.0.5163.0",
         "swarming": {
           "can_use_on_swarming_builders": true,
           "cipd_packages": [
             {
               "cipd_package": "chromium/testing/linux-ash-chromium/x86_64/ash.zip",
-              "location": "lacros_version_skew_tests_v105.0.5162.0",
-              "revision": "version:105.0.5162.0"
+              "location": "lacros_version_skew_tests_v105.0.5163.0",
+              "revision": "version:105.0.5163.0"
             }
           ],
           "dimension_sets": [
@@ -96613,7 +96613,7 @@
         },
         "test": "lacros_chrome_browsertests",
         "test_id_prefix": "ninja://chrome/test:lacros_chrome_browsertests/",
-        "variant_id": "Lacros version skew testing ash 105.0.5162.0"
+        "variant_id": "Lacros version skew testing ash 105.0.5163.0"
       },
       {
         "args": [
@@ -96733,20 +96733,20 @@
       {
         "args": [
           "--test-launcher-filter-file=../../testing/buildbot/filters/linux-lacros.lacros_chrome_browsertests.skew.filter",
-          "--ash-chrome-path-override=../../lacros_version_skew_tests_v105.0.5162.0/test_ash_chrome"
+          "--ash-chrome-path-override=../../lacros_version_skew_tests_v105.0.5163.0/test_ash_chrome"
         ],
         "merge": {
           "args": [],
           "script": "//testing/merge_scripts/standard_gtest_merge.py"
         },
-        "name": "lacros_chrome_browsertests_run_in_series Lacros version skew testing ash 105.0.5162.0",
+        "name": "lacros_chrome_browsertests_run_in_series Lacros version skew testing ash 105.0.5163.0",
         "swarming": {
           "can_use_on_swarming_builders": true,
           "cipd_packages": [
             {
               "cipd_package": "chromium/testing/linux-ash-chromium/x86_64/ash.zip",
-              "location": "lacros_version_skew_tests_v105.0.5162.0",
-              "revision": "version:105.0.5162.0"
+              "location": "lacros_version_skew_tests_v105.0.5163.0",
+              "revision": "version:105.0.5163.0"
             }
           ],
           "dimension_sets": [
@@ -96759,7 +96759,7 @@
         },
         "test": "lacros_chrome_browsertests_run_in_series",
         "test_id_prefix": "ninja://chrome/test:lacros_chrome_browsertests_run_in_series/",
-        "variant_id": "Lacros version skew testing ash 105.0.5162.0"
+        "variant_id": "Lacros version skew testing ash 105.0.5163.0"
       },
       {
         "merge": {
@@ -97494,20 +97494,20 @@
       {
         "args": [
           "--test-launcher-filter-file=../../testing/buildbot/filters/linux-lacros.interactive_ui_tests.filter;../../testing/buildbot/filters/linux-lacros.interactive_ui_tests.skew.filter",
-          "--ash-chrome-path-override=../../lacros_version_skew_tests_v105.0.5162.0/test_ash_chrome"
+          "--ash-chrome-path-override=../../lacros_version_skew_tests_v105.0.5163.0/test_ash_chrome"
         ],
         "merge": {
           "args": [],
           "script": "//testing/merge_scripts/standard_gtest_merge.py"
         },
-        "name": "interactive_ui_tests Lacros version skew testing ash 105.0.5162.0",
+        "name": "interactive_ui_tests Lacros version skew testing ash 105.0.5163.0",
         "swarming": {
           "can_use_on_swarming_builders": true,
           "cipd_packages": [
             {
               "cipd_package": "chromium/testing/linux-ash-chromium/x86_64/ash.zip",
-              "location": "lacros_version_skew_tests_v105.0.5162.0",
-              "revision": "version:105.0.5162.0"
+              "location": "lacros_version_skew_tests_v105.0.5163.0",
+              "revision": "version:105.0.5163.0"
             }
           ],
           "dimension_sets": [
@@ -97520,7 +97520,7 @@
         },
         "test": "interactive_ui_tests",
         "test_id_prefix": "ninja://chrome/test:interactive_ui_tests/",
-        "variant_id": "Lacros version skew testing ash 105.0.5162.0"
+        "variant_id": "Lacros version skew testing ash 105.0.5163.0"
       }
     ]
   },
diff --git a/testing/buildbot/chromium.memory.json b/testing/buildbot/chromium.memory.json
index ecdf29d..1998bea 100644
--- a/testing/buildbot/chromium.memory.json
+++ b/testing/buildbot/chromium.memory.json
@@ -20874,21 +20874,21 @@
       {
         "args": [
           "--test-launcher-filter-file=../../testing/buildbot/filters/linux-lacros.interactive_ui_tests.filter;../../testing/buildbot/filters/linux-lacros.interactive_ui_tests.skew.filter",
-          "--ash-chrome-path-override=../../lacros_version_skew_tests_v105.0.5162.0/test_ash_chrome"
+          "--ash-chrome-path-override=../../lacros_version_skew_tests_v105.0.5163.0/test_ash_chrome"
         ],
         "isolate_profile_data": true,
         "merge": {
           "args": [],
           "script": "//testing/merge_scripts/standard_gtest_merge.py"
         },
-        "name": "interactive_ui_tests Lacros version skew testing ash 105.0.5162.0",
+        "name": "interactive_ui_tests Lacros version skew testing ash 105.0.5163.0",
         "swarming": {
           "can_use_on_swarming_builders": true,
           "cipd_packages": [
             {
               "cipd_package": "chromium/testing/linux-ash-chromium/x86_64/ash.zip",
-              "location": "lacros_version_skew_tests_v105.0.5162.0",
-              "revision": "version:105.0.5162.0"
+              "location": "lacros_version_skew_tests_v105.0.5163.0",
+              "revision": "version:105.0.5163.0"
             }
           ],
           "dimension_sets": [
@@ -20901,7 +20901,7 @@
         },
         "test": "interactive_ui_tests",
         "test_id_prefix": "ninja://chrome/test:interactive_ui_tests/",
-        "variant_id": "Lacros version skew testing ash 105.0.5162.0"
+        "variant_id": "Lacros version skew testing ash 105.0.5163.0"
       },
       {
         "isolate_profile_data": true,
@@ -21039,21 +21039,21 @@
       {
         "args": [
           "--test-launcher-filter-file=../../testing/buildbot/filters/linux-lacros.lacros_chrome_browsertests.skew.filter",
-          "--ash-chrome-path-override=../../lacros_version_skew_tests_v105.0.5162.0/test_ash_chrome"
+          "--ash-chrome-path-override=../../lacros_version_skew_tests_v105.0.5163.0/test_ash_chrome"
         ],
         "isolate_profile_data": true,
         "merge": {
           "args": [],
           "script": "//testing/merge_scripts/standard_gtest_merge.py"
         },
-        "name": "lacros_chrome_browsertests Lacros version skew testing ash 105.0.5162.0",
+        "name": "lacros_chrome_browsertests Lacros version skew testing ash 105.0.5163.0",
         "swarming": {
           "can_use_on_swarming_builders": true,
           "cipd_packages": [
             {
               "cipd_package": "chromium/testing/linux-ash-chromium/x86_64/ash.zip",
-              "location": "lacros_version_skew_tests_v105.0.5162.0",
-              "revision": "version:105.0.5162.0"
+              "location": "lacros_version_skew_tests_v105.0.5163.0",
+              "revision": "version:105.0.5163.0"
             }
           ],
           "dimension_sets": [
@@ -21065,7 +21065,7 @@
         },
         "test": "lacros_chrome_browsertests",
         "test_id_prefix": "ninja://chrome/test:lacros_chrome_browsertests/",
-        "variant_id": "Lacros version skew testing ash 105.0.5162.0"
+        "variant_id": "Lacros version skew testing ash 105.0.5163.0"
       },
       {
         "args": [
@@ -21185,21 +21185,21 @@
       {
         "args": [
           "--test-launcher-filter-file=../../testing/buildbot/filters/linux-lacros.lacros_chrome_browsertests.skew.filter",
-          "--ash-chrome-path-override=../../lacros_version_skew_tests_v105.0.5162.0/test_ash_chrome"
+          "--ash-chrome-path-override=../../lacros_version_skew_tests_v105.0.5163.0/test_ash_chrome"
         ],
         "isolate_profile_data": true,
         "merge": {
           "args": [],
           "script": "//testing/merge_scripts/standard_gtest_merge.py"
         },
-        "name": "lacros_chrome_browsertests_run_in_series Lacros version skew testing ash 105.0.5162.0",
+        "name": "lacros_chrome_browsertests_run_in_series Lacros version skew testing ash 105.0.5163.0",
         "swarming": {
           "can_use_on_swarming_builders": true,
           "cipd_packages": [
             {
               "cipd_package": "chromium/testing/linux-ash-chromium/x86_64/ash.zip",
-              "location": "lacros_version_skew_tests_v105.0.5162.0",
-              "revision": "version:105.0.5162.0"
+              "location": "lacros_version_skew_tests_v105.0.5163.0",
+              "revision": "version:105.0.5163.0"
             }
           ],
           "dimension_sets": [
@@ -21211,7 +21211,7 @@
         },
         "test": "lacros_chrome_browsertests_run_in_series",
         "test_id_prefix": "ninja://chrome/test:lacros_chrome_browsertests_run_in_series/",
-        "variant_id": "Lacros version skew testing ash 105.0.5162.0"
+        "variant_id": "Lacros version skew testing ash 105.0.5163.0"
       },
       {
         "isolate_profile_data": true,
diff --git a/testing/buildbot/variants.pyl b/testing/buildbot/variants.pyl
index 4e2f598..0ae7d6e9 100644
--- a/testing/buildbot/variants.pyl
+++ b/testing/buildbot/variants.pyl
@@ -22,15 +22,15 @@
   },
   'LACROS_VERSION_SKEW_CANARY': {
     'args': [
-      '--ash-chrome-path-override=../../lacros_version_skew_tests_v105.0.5162.0/test_ash_chrome',
+      '--ash-chrome-path-override=../../lacros_version_skew_tests_v105.0.5163.0/test_ash_chrome',
     ],
-    'identifier': 'Lacros version skew testing ash 105.0.5162.0',
+    'identifier': 'Lacros version skew testing ash 105.0.5163.0',
     'swarming': {
       'cipd_packages': [
         {
           'cipd_package': 'chromium/testing/linux-ash-chromium/x86_64/ash.zip',
-          'location': 'lacros_version_skew_tests_v105.0.5162.0',
-          'revision': 'version:105.0.5162.0',
+          'location': 'lacros_version_skew_tests_v105.0.5163.0',
+          'revision': 'version:105.0.5163.0',
         },
       ],
     },
@@ -529,16 +529,16 @@
   },
   'WEBLAYER_10_AND_M_IMPL_SKEW_TESTS_NTH_MILESTONE': {
     'args': [
+      '--webview-apk-path=apks/AOSP_SystemWebView.apk',
       '--test-runner-outdir',
       '.',
       '--client-outdir',
       '.',
-      '--test-expectations',
-      '../../weblayer/browser/android/javatests/skew/expectations.txt',
-      '--webview-apk-path=apks/AOSP_SystemWebView.apk',
       '--implementation-outdir',
       '../../weblayer_instrumentation_test_M104/out/Release',
-      '--impl-version=104'
+      '--test-expectations',
+      '../../weblayer/browser/android/javatests/skew/expectations.txt',
+      '--impl-version=104',
     ],
     'identifier': 'with_impl_from_104',
     'swarming': {
@@ -546,23 +546,23 @@
         {
           'cipd_package': 'chromium/testing/weblayer-x86',
           'location': 'weblayer_instrumentation_test_M104',
-          'revision': 'version:104.0.5112.35'
+          'revision': 'version:104.0.5112.36',
         }
-      ]
-    }
+      ],
+    },
   },
   'WEBLAYER_10_AND_M_IMPL_SKEW_TESTS_NTH_MINUS_ONE_MILESTONE': {
     'args': [
+      '--webview-apk-path=apks/AOSP_SystemWebView.apk',
       '--test-runner-outdir',
       '.',
       '--client-outdir',
       '.',
-      '--test-expectations',
-      '../../weblayer/browser/android/javatests/skew/expectations.txt',
-      '--webview-apk-path=apks/AOSP_SystemWebView.apk',
       '--implementation-outdir',
       '../../weblayer_instrumentation_test_M103/out/Release',
-      '--impl-version=103'
+      '--test-expectations',
+      '../../weblayer/browser/android/javatests/skew/expectations.txt',
+      '--impl-version=103',
     ],
     'identifier': 'with_impl_from_103',
     'swarming': {
@@ -570,10 +570,10 @@
         {
           'cipd_package': 'chromium/testing/weblayer-x86',
           'location': 'weblayer_instrumentation_test_M103',
-          'revision': 'version:103.0.5060.117'
+          'revision': 'version:103.0.5060.118',
         }
-      ]
-    }
+      ],
+    },
   },
   'WEBLAYER_10_AND_M_IMPL_SKEW_TESTS_NTH_MINUS_TWO_MILESTONE': {
     'args': [
@@ -673,16 +673,16 @@
   },
   'WEBLAYER_IMPL_SKEW_TESTS_NTH_MILESTONE': {
     'args': [
+      '--webview-apk-path=apks/SystemWebView.apk',
       '--test-runner-outdir',
       '.',
       '--client-outdir',
       '.',
-      '--test-expectations',
-      '../../weblayer/browser/android/javatests/skew/expectations.txt',
-      '--webview-apk-path=apks/SystemWebView.apk',
       '--implementation-outdir',
       '../../weblayer_instrumentation_test_M104/out/Release',
-      '--impl-version=104'
+      '--test-expectations',
+      '../../weblayer/browser/android/javatests/skew/expectations.txt',
+      '--impl-version=104',
     ],
     'identifier': 'with_impl_from_104',
     'swarming': {
@@ -690,23 +690,23 @@
         {
           'cipd_package': 'chromium/testing/weblayer-x86',
           'location': 'weblayer_instrumentation_test_M104',
-          'revision': 'version:104.0.5112.35'
+          'revision': 'version:104.0.5112.36',
         }
-      ]
-    }
+      ],
+    },
   },
   'WEBLAYER_IMPL_SKEW_TESTS_NTH_MINUS_ONE_MILESTONE': {
     'args': [
+      '--webview-apk-path=apks/SystemWebView.apk',
       '--test-runner-outdir',
       '.',
       '--client-outdir',
       '.',
-      '--test-expectations',
-      '../../weblayer/browser/android/javatests/skew/expectations.txt',
-      '--webview-apk-path=apks/SystemWebView.apk',
       '--implementation-outdir',
       '../../weblayer_instrumentation_test_M103/out/Release',
-      '--impl-version=103'
+      '--test-expectations',
+      '../../weblayer/browser/android/javatests/skew/expectations.txt',
+      '--impl-version=103',
     ],
     'identifier': 'with_impl_from_103',
     'swarming': {
@@ -714,10 +714,10 @@
         {
           'cipd_package': 'chromium/testing/weblayer-x86',
           'location': 'weblayer_instrumentation_test_M103',
-          'revision': 'version:103.0.5060.117'
+          'revision': 'version:103.0.5060.118',
         }
-      ]
-    }
+      ],
+    },
   },
   'WEBLAYER_IMPL_SKEW_TESTS_NTH_MINUS_TWO_MILESTONE': {
     'args': [
@@ -817,16 +817,16 @@
   },
   'WEBLAYER_CLIENT_SKEW_TESTS_NTH_MILESTONE': {
     'args': [
+      '--webview-apk-path=apks/SystemWebView.apk',
       '--test-runner-outdir',
       '.',
+      '--client-outdir',
+      '../../weblayer_instrumentation_test_M104/out/Release',
       '--implementation-outdir',
       '.',
       '--test-expectations',
       '../../weblayer/browser/android/javatests/skew/expectations.txt',
-      '--webview-apk-path=apks/SystemWebView.apk',
-      '--client-outdir',
-      '../../weblayer_instrumentation_test_M104/out/Release',
-      '--client-version=104'
+      '--client-version=104',
     ],
     'identifier': 'with_client_from_104',
     'swarming': {
@@ -834,23 +834,23 @@
         {
           'cipd_package': 'chromium/testing/weblayer-x86',
           'location': 'weblayer_instrumentation_test_M104',
-          'revision': 'version:104.0.5112.35'
+          'revision': 'version:104.0.5112.36',
         }
-      ]
-    }
+      ],
+    },
   },
   'WEBLAYER_CLIENT_SKEW_TESTS_NTH_MINUS_ONE_MILESTONE': {
     'args': [
+      '--webview-apk-path=apks/SystemWebView.apk',
       '--test-runner-outdir',
       '.',
+      '--client-outdir',
+      '../../weblayer_instrumentation_test_M103/out/Release',
       '--implementation-outdir',
       '.',
       '--test-expectations',
       '../../weblayer/browser/android/javatests/skew/expectations.txt',
-      '--webview-apk-path=apks/SystemWebView.apk',
-      '--client-outdir',
-      '../../weblayer_instrumentation_test_M103/out/Release',
-      '--client-version=103'
+      '--client-version=103',
     ],
     'identifier': 'with_client_from_103',
     'swarming': {
@@ -858,10 +858,10 @@
         {
           'cipd_package': 'chromium/testing/weblayer-x86',
           'location': 'weblayer_instrumentation_test_M103',
-          'revision': 'version:103.0.5060.117'
+          'revision': 'version:103.0.5060.118',
         }
-      ]
-    }
+      ],
+    },
   },
   'WEBLAYER_CLIENT_SKEW_TESTS_NTH_MINUS_TWO_MILESTONE': {
     'args': [
diff --git a/testing/variations/fieldtrial_testing_config.json b/testing/variations/fieldtrial_testing_config.json
index 003560e..79b722d 100644
--- a/testing/variations/fieldtrial_testing_config.json
+++ b/testing/variations/fieldtrial_testing_config.json
@@ -3104,7 +3104,10 @@
             ],
             "experiments": [
                 {
-                    "name": "Preperiod_Enabled"
+                    "name": "Enabled",
+                    "enable_features": [
+                        "DeferredShaping"
+                    ]
                 }
             ]
         }
diff --git a/third_party/blink/common/page/content_to_visible_time_reporter.cc b/third_party/blink/common/page/content_to_visible_time_reporter.cc
index 5bde2b4e..0fdc844 100644
--- a/third_party/blink/common/page/content_to_visible_time_reporter.cc
+++ b/third_party/blink/common/page/content_to_visible_time_reporter.cc
@@ -108,18 +108,12 @@
           show_reason_bfcache_restore));
 }
 
-void ContentToVisibleTimeReporter::TabMeasurementWasInterrupted(
-    TabSwitchResult result) {
-  DCHECK_NE(result, TabSwitchResult::kSuccess);
-  if (result == TabSwitchResult::kUnhandled &&
-      !IsTabSwitchMetric2FeatureEnabled()) {
-    // Unhandled was not reported for the legacy metric.
-    return;
-  }
+void ContentToVisibleTimeReporter::TabWasHidden() {
   if (tab_switch_start_state_ &&
       (!IsTabSwitchMetric2FeatureEnabled() ||
        tab_switch_start_state_->show_reason_tab_switching)) {
-    RecordHistogramsAndTraceEvents(result, true /* show_reason_tab_switching */,
+    RecordHistogramsAndTraceEvents(TabSwitchResult::kIncomplete,
+                                   true /* show_reason_tab_switching */,
                                    false /* show_reason_bfcache_restore */,
                                    gfx::PresentationFeedback::Failure());
   }
diff --git a/third_party/blink/public/common/page/content_to_visible_time_reporter.h b/third_party/blink/public/common/page/content_to_visible_time_reporter.h
index fb4333d..0d9fcb0 100644
--- a/third_party/blink/public/common/page/content_to_visible_time_reporter.h
+++ b/third_party/blink/public/common/page/content_to_visible_time_reporter.h
@@ -34,9 +34,8 @@
     // TabWasShown called twice for a frame without TabWasHidden between. Treat
     // the first TabWasShown as an incomplete tab switch.
     kMissedTabHide = 3,
-    // The tab switch couldn't be measured because of an unhandled path in the
-    // compositor. (For example, on Mac the BrowserCompositorMac that owns a
-    // DelegatedFrameHost entered the UseParentCompositor state.)
+    // DEPRECATED: The tab switch couldn't be measured because of an unhandled
+    // path in the compositor.
     kUnhandled = 4,
     kMaxValue = kUnhandled,
   };
@@ -62,15 +61,7 @@
 
   // Indicates that the tab associated with this recorder was hidden. If no
   // frame was presented since the last tab switch, failure is reported to UMA.
-  void TabWasHidden() {
-    TabMeasurementWasInterrupted(TabSwitchResult::kIncomplete);
-  }
-
-  // Indicates that the tab switch measurement associated with this recorder was
-  // interrupted before a frame was presented. `result` is reported to UMA in
-  // TabSwitchResult, and the time since the measurement started is reported in
-  // IncompleteSwitchDuration. Does nothing if no measurement is in progress.
-  void TabMeasurementWasInterrupted(TabSwitchResult result);
+  void TabWasHidden();
 
  private:
   bool IsTabSwitchMetric2FeatureEnabled();
diff --git a/third_party/blink/renderer/core/frame/browser_controls_test.cc b/third_party/blink/renderer/core/frame/browser_controls_test.cc
index eb2843f..c792a03 100644
--- a/third_party/blink/renderer/core/frame/browser_controls_test.cc
+++ b/third_party/blink/renderer/core/frame/browser_controls_test.cc
@@ -57,9 +57,18 @@
 
 namespace blink {
 
-// These tests cover browser controls scrolling on main-thread.
-// The animation for completing a partial show/hide is done in compositor so
-// it is not covered here.
+namespace {
+
+// From browser_controls_offset_manager.cc.
+const int64_t kShowHideMaxDurationMs = 200;
+
+};  // namespace
+
+// These tests cover interactions between scrolling and browser controls, with a
+// focus on Blink-observable side effects. Scrolling happens in the compositor,
+// but browser controls state is propagated into blink::BrowserControls through
+// LayerTreeHost::ApplyCompositorChanges. Additional tests relating to cc state
+// can be found under LayerTreeHostImplBrowserControlsTest.
 class BrowserControlsTest : public testing::Test,
                             public ScopedMockOverlayScrollbars {
  public:
@@ -89,7 +98,7 @@
     helper_.InitializeAndLoad(base_url_ + page_name, nullptr, nullptr,
                               &ConfigureSettings);
 
-    GetWebView()->MainFrameViewWidget()->Resize(gfx::Size(400, 400));
+    helper_.Resize(gfx::Size(400, 400));
     return GetWebView();
   }
 
@@ -109,9 +118,9 @@
         WebString::FromUTF8(file_name));
   }
 
-  WebCoalescedInputEvent GenerateEvent(WebInputEvent::Type type,
-                                       int delta_x = 0,
-                                       int delta_y = 0) {
+  WebGestureEvent GenerateEvent(WebInputEvent::Type type,
+                                int delta_x = 0,
+                                int delta_y = 0) {
     WebGestureEvent event(type, WebInputEvent::kNoModifiers,
                           WebInputEvent::GetStaticTimeStampForTests(),
                           WebGestureDevice::kTouchscreen);
@@ -123,16 +132,20 @@
       event.data.scroll_begin.delta_x_hint = delta_x;
       event.data.scroll_begin.delta_y_hint = delta_y;
     }
-    return WebCoalescedInputEvent(event, ui::LatencyInfo());
+    return event;
   }
 
   void VerticalScroll(float delta_y) {
-    GetWebView()->MainFrameViewWidget()->HandleInputEvent(
+    GetWebFrameWidget()->DispatchThroughCcInputHandler(
         GenerateEvent(WebInputEvent::Type::kGestureScrollBegin, 0, delta_y));
-    GetWebView()->MainFrameViewWidget()->HandleInputEvent(
+    GetWebFrameWidget()->DispatchThroughCcInputHandler(
         GenerateEvent(WebInputEvent::Type::kGestureScrollUpdate, 0, delta_y));
-    GetWebView()->MainFrameViewWidget()->HandleInputEvent(
+    GetWebFrameWidget()->DispatchThroughCcInputHandler(
         GenerateEvent(WebInputEvent::Type::kGestureScrollEnd));
+
+    // Runs LayerTreeHost::ApplyCompositorChanges, which sends scroll deltas etc
+    // back to Blink.
+    CompositeForTest();
   }
 
   Element* GetElementById(const WebString& id) {
@@ -145,16 +158,35 @@
   VisualViewport& GetVisualViewport() const {
     return helper_.GetWebView()->GetPage()->GetVisualViewport();
   }
+  frame_test_helpers::TestWebFrameWidget* GetWebFrameWidget() const {
+    return helper_.GetMainFrameWidget();
+  }
 
   void UpdateAllLifecyclePhases() {
     GetWebView()->MainFrameViewWidget()->UpdateAllLifecyclePhases(
         DocumentUpdateReason::kTest);
   }
 
+  void CompositeForTest(base::TimeDelta animation_delay = base::TimeDelta()) {
+    accumulated_animation_delay_ += animation_delay;
+    helper_.GetLayerTreeHost()->CompositeForTest(
+        base::TimeTicks::Now() + accumulated_animation_delay_, false);
+  }
+
+  void FinishAnimation() {
+    // First tick (through LTHI::Animate), to initialize
+    // BrowserControlsOffsetManager::Animation::start_time_.
+    CompositeForTest();
+
+    // Second tick to set final value.
+    CompositeForTest(base::Milliseconds(kShowHideMaxDurationMs));
+  }
+
  private:
   ScopedTestingPlatformSupport<TestingPlatformSupport> platform_;
   std::string base_url_;
   frame_test_helpers::WebViewHelper helper_;
+  base::TimeDelta accumulated_animation_delay_;
 };
 
 class BrowserControlsSimTest : public SimTest {
@@ -178,9 +210,9 @@
     WebView().ResizeWithBrowserControls(gfx::Size(412, 604), 56.f, 50.f, true);
   }
 
-  WebCoalescedInputEvent GenerateEvent(WebInputEvent::Type type,
-                                       int delta_x = 0,
-                                       int delta_y = 0) {
+  WebGestureEvent GenerateEvent(WebInputEvent::Type type,
+                                int delta_x = 0,
+                                int delta_y = 0) {
     WebGestureEvent event(type, WebInputEvent::kNoModifiers,
                           WebInputEvent::GetStaticTimeStampForTests(),
                           WebGestureDevice::kTouchscreen);
@@ -192,16 +224,20 @@
       event.data.scroll_begin.delta_x_hint = delta_x;
       event.data.scroll_begin.delta_y_hint = delta_y;
     }
-    return WebCoalescedInputEvent(event, ui::LatencyInfo());
+    return event;
   }
 
   void VerticalScroll(float delta_y) {
-    WebView().MainFrameViewWidget()->HandleInputEvent(
+    GetWebFrameWidget().DispatchThroughCcInputHandler(
         GenerateEvent(WebInputEvent::Type::kGestureScrollBegin, 0, delta_y));
-    WebView().MainFrameViewWidget()->HandleInputEvent(
+    GetWebFrameWidget().DispatchThroughCcInputHandler(
         GenerateEvent(WebInputEvent::Type::kGestureScrollUpdate, 0, delta_y));
-    WebView().MainFrameViewWidget()->HandleInputEvent(
+    GetWebFrameWidget().DispatchThroughCcInputHandler(
         GenerateEvent(WebInputEvent::Type::kGestureScrollEnd));
+
+    // Runs LayerTreeHost::ApplyCompositorChanges, which sends scroll deltas etc
+    // back to Blink.
+    Compositor().BeginFrame();
   }
 };
 
@@ -234,14 +270,16 @@
   web_view->ResizeWithBrowserControls(web_view->MainFrameViewWidget()->Size(),
                                       50.f, 0, true);
   web_view->GetBrowserControls().SetShownRatio(1, 1);
+  CompositeForTest();
 
-  web_view->MainFrameViewWidget()->HandleInputEvent(
+  GetWebFrameWidget()->DispatchThroughCcInputHandler(
       GenerateEvent(WebInputEvent::Type::kGestureScrollBegin));
   EXPECT_FLOAT_EQ(50.f, web_view->GetBrowserControls().ContentOffset());
 
   // Browser controls should be scrolled partially and page should not scroll.
-  web_view->MainFrameViewWidget()->HandleInputEvent(
+  GetWebFrameWidget()->DispatchThroughCcInputHandler(
       GenerateEvent(WebInputEvent::Type::kGestureScrollUpdate, 0, -25.f));
+  CompositeForTest();
   EXPECT_FLOAT_EQ(25.f, web_view->GetBrowserControls().ContentOffset());
   EXPECT_EQ(ScrollOffset(0, 0),
             GetFrame()->View()->LayoutViewport()->GetScrollOffset());
@@ -249,15 +287,17 @@
   // Browser controls should consume 25px and become hidden. Excess scroll
   // should be
   // consumed by the page.
-  web_view->MainFrameViewWidget()->HandleInputEvent(
+  GetWebFrameWidget()->DispatchThroughCcInputHandler(
       GenerateEvent(WebInputEvent::Type::kGestureScrollUpdate, 0, -40.f));
+  CompositeForTest();
   EXPECT_FLOAT_EQ(0.f, web_view->GetBrowserControls().ContentOffset());
   EXPECT_EQ(ScrollOffset(0, 15),
             GetFrame()->View()->LayoutViewport()->GetScrollOffset());
 
   // Only page should consume scroll
-  web_view->MainFrameViewWidget()->HandleInputEvent(
+  GetWebFrameWidget()->DispatchThroughCcInputHandler(
       GenerateEvent(WebInputEvent::Type::kGestureScrollUpdate, 0, -20.f));
+  CompositeForTest();
   EXPECT_FLOAT_EQ(0.f, web_view->GetBrowserControls().ContentOffset());
   EXPECT_EQ(ScrollOffset(0, 35),
             GetFrame()->View()->LayoutViewport()->GetScrollOffset());
@@ -270,27 +310,30 @@
   web_view->ResizeWithBrowserControls(web_view->MainFrameViewWidget()->Size(),
                                       0, 50.f, true);
   web_view->GetBrowserControls().SetShownRatio(0.0, 1);
+  CompositeForTest();
 
-  web_view->MainFrameViewWidget()->HandleInputEvent(
+  GetWebFrameWidget()->DispatchThroughCcInputHandler(
       GenerateEvent(WebInputEvent::Type::kGestureScrollBegin));
   EXPECT_FLOAT_EQ(0.f, web_view->GetBrowserControls().ContentOffset());
 
   // Bottom controls and page content should both scroll and there should be
   // no content offset.
-  web_view->MainFrameViewWidget()->HandleInputEvent(
+  GetWebFrameWidget()->DispatchThroughCcInputHandler(
       GenerateEvent(WebInputEvent::Type::kGestureScrollUpdate, 0, -25.f));
+  CompositeForTest();
   EXPECT_FLOAT_EQ(0.f, web_view->GetBrowserControls().ContentOffset());
   EXPECT_FLOAT_EQ(0.5f, web_view->GetBrowserControls().BottomShownRatio());
   EXPECT_EQ(ScrollOffset(0, 25.f),
             GetFrame()->View()->LayoutViewport()->GetScrollOffset());
 
   // Browser controls should become completely hidden.
-  web_view->MainFrameViewWidget()->HandleInputEvent(
+  GetWebFrameWidget()->DispatchThroughCcInputHandler(
       GenerateEvent(WebInputEvent::Type::kGestureScrollBegin));
-  web_view->MainFrameViewWidget()->HandleInputEvent(
+  GetWebFrameWidget()->DispatchThroughCcInputHandler(
       GenerateEvent(WebInputEvent::Type::kGestureScrollUpdate, 0, -40.f));
-  web_view->MainFrameViewWidget()->HandleInputEvent(
+  GetWebFrameWidget()->DispatchThroughCcInputHandler(
       GenerateEvent(WebInputEvent::Type::kGestureScrollEnd));
+  CompositeForTest();
   EXPECT_FLOAT_EQ(0.f, web_view->GetBrowserControls().ContentOffset());
   EXPECT_FLOAT_EQ(0.f, web_view->GetBrowserControls().BottomShownRatio());
   EXPECT_EQ(ScrollOffset(0, 65.f),
@@ -304,19 +347,22 @@
   web_view->ResizeWithBrowserControls(web_view->MainFrameViewWidget()->Size(),
                                       50.f, 0, false);
   web_view->GetBrowserControls().SetShownRatio(0, 0);
+  CompositeForTest();
 
-  web_view->MainFrameViewWidget()->HandleInputEvent(
+  GetWebFrameWidget()->DispatchThroughCcInputHandler(
       GenerateEvent(WebInputEvent::Type::kGestureScrollBegin));
   EXPECT_FLOAT_EQ(0.f, web_view->GetBrowserControls().ContentOffset());
 
-  web_view->MainFrameViewWidget()->HandleInputEvent(
+  GetWebFrameWidget()->DispatchThroughCcInputHandler(
       GenerateEvent(WebInputEvent::Type::kGestureScrollUpdate, 0, 10.f));
+  CompositeForTest();
   EXPECT_FLOAT_EQ(10.f, web_view->GetBrowserControls().ContentOffset());
   EXPECT_EQ(ScrollOffset(0, 0),
             GetFrame()->View()->LayoutViewport()->GetScrollOffset());
 
-  web_view->MainFrameViewWidget()->HandleInputEvent(
+  GetWebFrameWidget()->DispatchThroughCcInputHandler(
       GenerateEvent(WebInputEvent::Type::kGestureScrollUpdate, 0, 50.f));
+  CompositeForTest();
   EXPECT_FLOAT_EQ(50.f, web_view->GetBrowserControls().ContentOffset());
   EXPECT_EQ(ScrollOffset(0, 0),
             GetFrame()->View()->LayoutViewport()->GetScrollOffset());
@@ -329,27 +375,31 @@
   web_view->ResizeWithBrowserControls(web_view->MainFrameViewWidget()->Size(),
                                       0, 50.f, false);
   web_view->GetBrowserControls().SetShownRatio(0, 0);
+  CompositeForTest();
 
-  web_view->MainFrameViewWidget()->HandleInputEvent(
+  GetWebFrameWidget()->DispatchThroughCcInputHandler(
       GenerateEvent(WebInputEvent::Type::kGestureScrollBegin));
   EXPECT_FLOAT_EQ(0.f, web_view->GetBrowserControls().ContentOffset());
 
   // Allow some space to scroll up.
-  web_view->MainFrameViewWidget()->HandleInputEvent(
+  GetWebFrameWidget()->DispatchThroughCcInputHandler(
       GenerateEvent(WebInputEvent::Type::kGestureScrollBegin));
-  web_view->MainFrameViewWidget()->HandleInputEvent(
+  GetWebFrameWidget()->DispatchThroughCcInputHandler(
       GenerateEvent(WebInputEvent::Type::kGestureScrollUpdate, 0, -50.f));
-  web_view->MainFrameViewWidget()->HandleInputEvent(
+  GetWebFrameWidget()->DispatchThroughCcInputHandler(
       GenerateEvent(WebInputEvent::Type::kGestureScrollEnd));
+  CompositeForTest();
 
-  web_view->MainFrameViewWidget()->HandleInputEvent(
+  GetWebFrameWidget()->DispatchThroughCcInputHandler(
       GenerateEvent(WebInputEvent::Type::kGestureScrollBegin));
-  web_view->MainFrameViewWidget()->HandleInputEvent(
+  GetWebFrameWidget()->DispatchThroughCcInputHandler(
       GenerateEvent(WebInputEvent::Type::kGestureScrollUpdate, 0, 25.f));
+  CompositeForTest();
   EXPECT_FLOAT_EQ(0.5f, web_view->GetBrowserControls().BottomShownRatio());
 
-  web_view->MainFrameViewWidget()->HandleInputEvent(
+  GetWebFrameWidget()->DispatchThroughCcInputHandler(
       GenerateEvent(WebInputEvent::Type::kGestureScrollEnd));
+  FinishAnimation();
   EXPECT_FLOAT_EQ(0.f, web_view->GetBrowserControls().ContentOffset());
   EXPECT_FLOAT_EQ(1.f, web_view->GetBrowserControls().BottomShownRatio());
   EXPECT_EQ(ScrollOffset(0, 25),
@@ -366,44 +416,50 @@
   web_view->GetBrowserControls().SetShownRatio(1, 1);
   GetFrame()->View()->GetScrollableArea()->SetScrollOffset(
       ScrollOffset(0, 100), mojom::blink::ScrollType::kProgrammatic);
+  CompositeForTest();
 
-  web_view->MainFrameViewWidget()->HandleInputEvent(
+  GetWebFrameWidget()->DispatchThroughCcInputHandler(
       GenerateEvent(WebInputEvent::Type::kGestureScrollBegin));
   EXPECT_FLOAT_EQ(50.f, web_view->GetBrowserControls().ContentOffset());
 
   // Scroll down to completely hide browser controls. Excess deltaY (100px)
   // should be consumed by the page.
-  web_view->MainFrameViewWidget()->HandleInputEvent(
+  GetWebFrameWidget()->DispatchThroughCcInputHandler(
       GenerateEvent(WebInputEvent::Type::kGestureScrollUpdate, 0, -150.f));
+  CompositeForTest();
   EXPECT_FLOAT_EQ(0.f, web_view->GetBrowserControls().ContentOffset());
   EXPECT_EQ(ScrollOffset(0, 200),
             GetFrame()->View()->LayoutViewport()->GetScrollOffset());
 
   // Scroll up and ensure the browser controls does not move until we recover
   // 100px previously scrolled.
-  web_view->MainFrameViewWidget()->HandleInputEvent(
+  GetWebFrameWidget()->DispatchThroughCcInputHandler(
       GenerateEvent(WebInputEvent::Type::kGestureScrollUpdate, 0, 40.f));
+  CompositeForTest();
   EXPECT_FLOAT_EQ(0.f, web_view->GetBrowserControls().ContentOffset());
   EXPECT_EQ(ScrollOffset(0, 160),
             GetFrame()->View()->LayoutViewport()->GetScrollOffset());
 
-  web_view->MainFrameViewWidget()->HandleInputEvent(
+  GetWebFrameWidget()->DispatchThroughCcInputHandler(
       GenerateEvent(WebInputEvent::Type::kGestureScrollUpdate, 0, 60.f));
+  CompositeForTest();
   EXPECT_FLOAT_EQ(0.f, web_view->GetBrowserControls().ContentOffset());
   EXPECT_EQ(ScrollOffset(0, 100),
             GetFrame()->View()->LayoutViewport()->GetScrollOffset());
 
   // Now we have hit the threshold so further scroll up should be consumed by
   // browser controls.
-  web_view->MainFrameViewWidget()->HandleInputEvent(
+  GetWebFrameWidget()->DispatchThroughCcInputHandler(
       GenerateEvent(WebInputEvent::Type::kGestureScrollUpdate, 0, 30.f));
+  CompositeForTest();
   EXPECT_FLOAT_EQ(30.f, web_view->GetBrowserControls().ContentOffset());
   EXPECT_EQ(ScrollOffset(0, 100),
             GetFrame()->View()->LayoutViewport()->GetScrollOffset());
 
   // Once top control is fully shown then page should consume any excess scroll.
-  web_view->MainFrameViewWidget()->HandleInputEvent(
+  GetWebFrameWidget()->DispatchThroughCcInputHandler(
       GenerateEvent(WebInputEvent::Type::kGestureScrollUpdate, 0, 70.f));
+  CompositeForTest();
   EXPECT_FLOAT_EQ(50.f, web_view->GetBrowserControls().ContentOffset());
   EXPECT_EQ(ScrollOffset(0, 50),
             GetFrame()->View()->LayoutViewport()->GetScrollOffset());
@@ -419,28 +475,32 @@
   web_view->GetBrowserControls().SetShownRatio(0, 0);
   GetFrame()->View()->GetScrollableArea()->SetScrollOffset(
       ScrollOffset(0, 100), mojom::blink::ScrollType::kProgrammatic);
+  CompositeForTest();
 
-  web_view->MainFrameViewWidget()->HandleInputEvent(
+  GetWebFrameWidget()->DispatchThroughCcInputHandler(
       GenerateEvent(WebInputEvent::Type::kGestureScrollBegin));
   EXPECT_FLOAT_EQ(0.f, web_view->GetBrowserControls().ContentOffset());
 
   // Scroll up to completely show browser controls. Excess deltaY (50px) should
   // be consumed by the page.
-  web_view->MainFrameViewWidget()->HandleInputEvent(
+  GetWebFrameWidget()->DispatchThroughCcInputHandler(
       GenerateEvent(WebInputEvent::Type::kGestureScrollUpdate, 0, 100.f));
+  CompositeForTest();
   EXPECT_FLOAT_EQ(50.f, web_view->GetBrowserControls().ContentOffset());
   EXPECT_EQ(ScrollOffset(0, 50),
             GetFrame()->View()->LayoutViewport()->GetScrollOffset());
 
   // Scroll down and ensure only browser controls is scrolled
-  web_view->MainFrameViewWidget()->HandleInputEvent(
+  GetWebFrameWidget()->DispatchThroughCcInputHandler(
       GenerateEvent(WebInputEvent::Type::kGestureScrollUpdate, 0, -40.f));
+  CompositeForTest();
   EXPECT_FLOAT_EQ(10.f, web_view->GetBrowserControls().ContentOffset());
   EXPECT_EQ(ScrollOffset(0, 50),
             GetFrame()->View()->LayoutViewport()->GetScrollOffset());
 
-  web_view->MainFrameViewWidget()->HandleInputEvent(
+  GetWebFrameWidget()->DispatchThroughCcInputHandler(
       GenerateEvent(WebInputEvent::Type::kGestureScrollUpdate, 0, -60.f));
+  CompositeForTest();
   EXPECT_FLOAT_EQ(0.f, web_view->GetBrowserControls().ContentOffset());
   EXPECT_EQ(ScrollOffset(0, 100),
             GetFrame()->View()->LayoutViewport()->GetScrollOffset());
@@ -453,20 +513,23 @@
   web_view->ResizeWithBrowserControls(web_view->MainFrameViewWidget()->Size(),
                                       50.f, 0, true);
   web_view->GetBrowserControls().SetShownRatio(1, 1);
+  CompositeForTest();
 
-  web_view->MainFrameViewWidget()->HandleInputEvent(
+  GetWebFrameWidget()->DispatchThroughCcInputHandler(
       GenerateEvent(WebInputEvent::Type::kGestureScrollBegin));
   EXPECT_FLOAT_EQ(50.f, web_view->GetBrowserControls().ContentOffset());
 
   // Browser controls should not consume horizontal scroll.
-  web_view->MainFrameViewWidget()->HandleInputEvent(
+  GetWebFrameWidget()->DispatchThroughCcInputHandler(
       GenerateEvent(WebInputEvent::Type::kGestureScrollUpdate, -110.f, -100.f));
+  CompositeForTest();
   EXPECT_FLOAT_EQ(0.f, web_view->GetBrowserControls().ContentOffset());
   EXPECT_EQ(ScrollOffset(110, 50),
             GetFrame()->View()->LayoutViewport()->GetScrollOffset());
 
-  web_view->MainFrameViewWidget()->HandleInputEvent(
+  GetWebFrameWidget()->DispatchThroughCcInputHandler(
       GenerateEvent(WebInputEvent::Type::kGestureScrollUpdate, -40.f, 0));
+  CompositeForTest();
   EXPECT_FLOAT_EQ(0.f, web_view->GetBrowserControls().ContentOffset());
   EXPECT_EQ(ScrollOffset(150, 50),
             GetFrame()->View()->LayoutViewport()->GetScrollOffset());
@@ -482,47 +545,53 @@
   web_view->ResizeWithBrowserControls(web_view->MainFrameViewWidget()->Size(),
                                       50.f, 0, true);
   web_view->GetBrowserControls().SetShownRatio(1, 1);
+  CompositeForTest();
 
-  web_view->MainFrameViewWidget()->HandleInputEvent(
+  GetWebFrameWidget()->DispatchThroughCcInputHandler(
       GenerateEvent(WebInputEvent::Type::kGestureScrollBegin));
   EXPECT_FLOAT_EQ(50.f, web_view->GetBrowserControls().ContentOffset());
 
   // Browser controls should be scrolled partially and page should not scroll.
-  web_view->MainFrameViewWidget()->HandleInputEvent(
+  GetWebFrameWidget()->DispatchThroughCcInputHandler(
       GenerateEvent(WebInputEvent::Type::kGestureScrollUpdate, 0, -20.f));
+  CompositeForTest();
   EXPECT_FLOAT_EQ(30.f, web_view->GetBrowserControls().ContentOffset());
   EXPECT_EQ(ScrollOffset(0, 0),
             GetFrame()->View()->GetScrollableArea()->GetScrollOffset());
 
   // Browser controls should consume 30px and become hidden. Excess scroll
   // should be consumed by the page at 2x scale.
-  web_view->MainFrameViewWidget()->HandleInputEvent(
+  GetWebFrameWidget()->DispatchThroughCcInputHandler(
       GenerateEvent(WebInputEvent::Type::kGestureScrollUpdate, 0, -70.f));
+  CompositeForTest();
   EXPECT_FLOAT_EQ(0.f, web_view->GetBrowserControls().ContentOffset());
   EXPECT_EQ(ScrollOffset(0, 20),
             GetFrame()->View()->GetScrollableArea()->GetScrollOffset());
 
-  web_view->MainFrameViewWidget()->HandleInputEvent(
+  GetWebFrameWidget()->DispatchThroughCcInputHandler(
       GenerateEvent(WebInputEvent::Type::kGestureScrollEnd));
 
   // Change page scale and test.
   web_view->SetPageScaleFactor(0.5);
+  CompositeForTest();
 
-  web_view->MainFrameViewWidget()->HandleInputEvent(
+  GetWebFrameWidget()->DispatchThroughCcInputHandler(
       GenerateEvent(WebInputEvent::Type::kGestureScrollBegin));
   EXPECT_FLOAT_EQ(0.f, web_view->GetBrowserControls().ContentOffset());
   EXPECT_EQ(ScrollOffset(0, 20),
             GetFrame()->View()->GetScrollableArea()->GetScrollOffset());
 
-  web_view->MainFrameViewWidget()->HandleInputEvent(
+  GetWebFrameWidget()->DispatchThroughCcInputHandler(
       GenerateEvent(WebInputEvent::Type::kGestureScrollUpdate, 0, 50.f));
+  CompositeForTest();
   EXPECT_FLOAT_EQ(50.f, web_view->GetBrowserControls().ContentOffset());
   EXPECT_EQ(ScrollOffset(0, 20),
             GetFrame()->View()->GetScrollableArea()->GetScrollOffset());
 
   // At 0.5x scale scrolling 10px should take us to the top of the page.
-  web_view->MainFrameViewWidget()->HandleInputEvent(
+  GetWebFrameWidget()->DispatchThroughCcInputHandler(
       GenerateEvent(WebInputEvent::Type::kGestureScrollUpdate, 0, 10.f));
+  CompositeForTest();
   EXPECT_FLOAT_EQ(50.f, web_view->GetBrowserControls().ContentOffset());
   EXPECT_EQ(ScrollOffset(0, 0),
             GetFrame()->View()->GetScrollableArea()->GetScrollOffset());
@@ -561,6 +630,7 @@
   web_view->GetBrowserControls().SetShownRatio(1, 1);
   GetFrame()->View()->GetScrollableArea()->SetScrollOffset(
       ScrollOffset(0, 50), mojom::blink::ScrollType::kProgrammatic);
+  CompositeForTest();
 
   // Test scroll down
   // A full scroll down should scroll the overflow div first but browser
@@ -572,19 +642,21 @@
 
   // Now scroll down should start hiding browser controls but main frame
   // should not scroll.
-  GetWebView()->MainFrameViewWidget()->HandleInputEvent(
+  GetWebFrameWidget()->DispatchThroughCcInputHandler(
       GenerateEvent(WebInputEvent::Type::kGestureScrollBegin, 0, -40.f));
-  GetWebView()->MainFrameViewWidget()->HandleInputEvent(
+  GetWebFrameWidget()->DispatchThroughCcInputHandler(
       GenerateEvent(WebInputEvent::Type::kGestureScrollUpdate, 0, -40.f));
+  CompositeForTest();
   EXPECT_FLOAT_EQ(10.f, web_view->GetBrowserControls().ContentOffset());
   EXPECT_EQ(ScrollOffset(0, 50),
             GetFrame()->View()->LayoutViewport()->GetScrollOffset());
 
   // Continued scroll down should scroll down the main frame
-  GetWebView()->MainFrameViewWidget()->HandleInputEvent(
+  GetWebFrameWidget()->DispatchThroughCcInputHandler(
       GenerateEvent(WebInputEvent::Type::kGestureScrollUpdate, 0, -40.f));
-  GetWebView()->MainFrameViewWidget()->HandleInputEvent(
+  GetWebFrameWidget()->DispatchThroughCcInputHandler(
       GenerateEvent(WebInputEvent::Type::kGestureScrollEnd));
+  CompositeForTest();
   EXPECT_FLOAT_EQ(0.f, web_view->GetBrowserControls().ContentOffset());
   EXPECT_EQ(ScrollOffset(0, 80),
             GetFrame()->View()->LayoutViewport()->GetScrollOffset());
@@ -598,19 +670,21 @@
 
   // Now scroll up should start showing browser controls but main frame
   // should not scroll.
-  GetWebView()->MainFrameViewWidget()->HandleInputEvent(
+  GetWebFrameWidget()->DispatchThroughCcInputHandler(
       GenerateEvent(WebInputEvent::Type::kGestureScrollBegin, 0, 40.f));
-  GetWebView()->MainFrameViewWidget()->HandleInputEvent(
+  GetWebFrameWidget()->DispatchThroughCcInputHandler(
       GenerateEvent(WebInputEvent::Type::kGestureScrollUpdate, 0, 40.f));
+  CompositeForTest();
   EXPECT_FLOAT_EQ(40.f, web_view->GetBrowserControls().ContentOffset());
   EXPECT_EQ(ScrollOffset(0, 80),
             GetFrame()->View()->LayoutViewport()->GetScrollOffset());
 
   // Continued scroll up scroll up the main frame
-  GetWebView()->MainFrameViewWidget()->HandleInputEvent(
+  GetWebFrameWidget()->DispatchThroughCcInputHandler(
       GenerateEvent(WebInputEvent::Type::kGestureScrollUpdate, 0, 40.f));
-  GetWebView()->MainFrameViewWidget()->HandleInputEvent(
+  GetWebFrameWidget()->DispatchThroughCcInputHandler(
       GenerateEvent(WebInputEvent::Type::kGestureScrollEnd));
+  CompositeForTest();
   EXPECT_FLOAT_EQ(50.f, web_view->GetBrowserControls().ContentOffset());
   EXPECT_EQ(ScrollOffset(0, 50),
             GetFrame()->View()->LayoutViewport()->GetScrollOffset());
@@ -624,6 +698,7 @@
   web_view->GetBrowserControls().SetShownRatio(1, 1);
   GetFrame()->View()->GetScrollableArea()->SetScrollOffset(
       ScrollOffset(0, 50), mojom::blink::ScrollType::kProgrammatic);
+  CompositeForTest();
 
   // Test scroll down
   // A full scroll down should scroll the iframe first but browser controls and
@@ -635,19 +710,21 @@
 
   // Now scroll down should start hiding browser controls but main frame
   // should not scroll.
-  GetWebView()->MainFrameViewWidget()->HandleInputEvent(
+  GetWebFrameWidget()->DispatchThroughCcInputHandler(
       GenerateEvent(WebInputEvent::Type::kGestureScrollBegin, 0, -40.f));
-  GetWebView()->MainFrameViewWidget()->HandleInputEvent(
+  GetWebFrameWidget()->DispatchThroughCcInputHandler(
       GenerateEvent(WebInputEvent::Type::kGestureScrollUpdate, 0, -40.f));
+  CompositeForTest();
   EXPECT_FLOAT_EQ(10.f, web_view->GetBrowserControls().ContentOffset());
   EXPECT_EQ(ScrollOffset(0, 50),
             GetFrame()->View()->LayoutViewport()->GetScrollOffset());
 
   // Continued scroll down should scroll down the main frame
-  GetWebView()->MainFrameViewWidget()->HandleInputEvent(
+  GetWebFrameWidget()->DispatchThroughCcInputHandler(
       GenerateEvent(WebInputEvent::Type::kGestureScrollUpdate, 0, -40.f));
-  GetWebView()->MainFrameViewWidget()->HandleInputEvent(
+  GetWebFrameWidget()->DispatchThroughCcInputHandler(
       GenerateEvent(WebInputEvent::Type::kGestureScrollEnd));
+  CompositeForTest();
   EXPECT_FLOAT_EQ(0.f, web_view->GetBrowserControls().ContentOffset());
   EXPECT_EQ(ScrollOffset(0, 80),
             GetFrame()->View()->LayoutViewport()->GetScrollOffset());
@@ -661,19 +738,21 @@
 
   // Now scroll up should start showing browser controls but main frame
   // should not scroll.
-  GetWebView()->MainFrameViewWidget()->HandleInputEvent(
+  GetWebFrameWidget()->DispatchThroughCcInputHandler(
       GenerateEvent(WebInputEvent::Type::kGestureScrollBegin, 0, 40.f));
-  GetWebView()->MainFrameViewWidget()->HandleInputEvent(
+  GetWebFrameWidget()->DispatchThroughCcInputHandler(
       GenerateEvent(WebInputEvent::Type::kGestureScrollUpdate, 0, 40.f));
+  CompositeForTest();
   EXPECT_FLOAT_EQ(40.f, web_view->GetBrowserControls().ContentOffset());
   EXPECT_EQ(ScrollOffset(0, 80),
             GetFrame()->View()->LayoutViewport()->GetScrollOffset());
 
   // Continued scroll up scroll up the main frame
-  GetWebView()->MainFrameViewWidget()->HandleInputEvent(
+  GetWebFrameWidget()->DispatchThroughCcInputHandler(
       GenerateEvent(WebInputEvent::Type::kGestureScrollUpdate, 0, 40.f));
-  GetWebView()->MainFrameViewWidget()->HandleInputEvent(
+  GetWebFrameWidget()->DispatchThroughCcInputHandler(
       GenerateEvent(WebInputEvent::Type::kGestureScrollEnd));
+  CompositeForTest();
   EXPECT_FLOAT_EQ(50.f, web_view->GetBrowserControls().ContentOffset());
   EXPECT_EQ(ScrollOffset(0, 50),
             GetFrame()->View()->LayoutViewport()->GetScrollOffset());
@@ -693,6 +772,7 @@
   web_view->ResizeWithBrowserControls(web_view->MainFrameViewWidget()->Size(),
                                       40.f, 0, false);
   EXPECT_FLOAT_EQ(0.f, web_view->GetBrowserControls().ContentOffset());
+  CompositeForTest();
 
   // Scroll up to show browser controls.
   VerticalScroll(40.f);
@@ -713,6 +793,7 @@
   web_view->GetBrowserControls().SetShownRatio(0, 0);
   GetFrame()->View()->GetScrollableArea()->SetScrollOffset(
       ScrollOffset(0, 100), mojom::blink::ScrollType::kProgrammatic);
+  CompositeForTest();
 
   EXPECT_FLOAT_EQ(0.f, web_view->GetBrowserControls().ContentOffset());
 
@@ -743,34 +824,40 @@
   // Fully scroll frameview but visualviewport remains scrollable
   web_view->MainFrameImpl()->SetScrollOffset(gfx::PointF(0, 10000));
   GetVisualViewport().SetLocation(gfx::PointF(0, 0));
-  GetWebView()->MainFrameViewWidget()->HandleInputEvent(
+  CompositeForTest();
+  GetWebFrameWidget()->DispatchThroughCcInputHandler(
       GenerateEvent(WebInputEvent::Type::kGestureScrollBegin, 0, -10.f));
-  GetWebView()->MainFrameViewWidget()->HandleInputEvent(
+  GetWebFrameWidget()->DispatchThroughCcInputHandler(
       GenerateEvent(WebInputEvent::Type::kGestureScrollUpdate, 0, -10.f));
+  CompositeForTest();
   EXPECT_FLOAT_EQ(40, web_view->GetBrowserControls().ContentOffset());
 
-  GetWebView()->MainFrameViewWidget()->HandleInputEvent(
+  GetWebFrameWidget()->DispatchThroughCcInputHandler(
       GenerateEvent(WebInputEvent::Type::kGestureScrollEnd));
+  FinishAnimation();
   EXPECT_FLOAT_EQ(50, web_view->GetBrowserControls().ContentOffset());
 
   web_view->GetBrowserControls().SetShownRatio(1, 1);
   // Fully scroll visual veiwport but frameview remains scrollable
   web_view->MainFrameImpl()->SetScrollOffset(gfx::PointF(0, 0));
   GetVisualViewport().SetLocation(gfx::PointF(0, 10000));
-  GetWebView()->MainFrameViewWidget()->HandleInputEvent(
+  GetWebFrameWidget()->DispatchThroughCcInputHandler(
       GenerateEvent(WebInputEvent::Type::kGestureScrollBegin, 0, -20.f));
-  GetWebView()->MainFrameViewWidget()->HandleInputEvent(
+  GetWebFrameWidget()->DispatchThroughCcInputHandler(
       GenerateEvent(WebInputEvent::Type::kGestureScrollUpdate, 0, -20.f));
+  CompositeForTest();
   EXPECT_FLOAT_EQ(30, web_view->GetBrowserControls().ContentOffset());
 
-  GetWebView()->MainFrameViewWidget()->HandleInputEvent(
+  GetWebFrameWidget()->DispatchThroughCcInputHandler(
       GenerateEvent(WebInputEvent::Type::kGestureScrollEnd));
+  FinishAnimation();
   EXPECT_FLOAT_EQ(50, web_view->GetBrowserControls().ContentOffset());
 
   web_view->GetBrowserControls().SetShownRatio(1, 1);
   // Fully scroll both frameview and visual viewport
   web_view->MainFrameImpl()->SetScrollOffset(gfx::PointF(0, 10000));
   GetVisualViewport().SetLocation(gfx::PointF(0, 10000));
+  CompositeForTest();
   VerticalScroll(-30.f);
   // Browser controls should not move because neither frameview nor visual
   // viewport
@@ -850,14 +937,18 @@
             GetDocument().View()->LayoutViewport()->GetScrollOffset());
 
   // Setting permitted state to "both" should not change an in-flight offset.
-  WebView().MainFrameViewWidget()->HandleInputEvent(
+  GetWebFrameWidget().DispatchThroughCcInputHandler(
       GenerateEvent(WebInputEvent::Type::kGestureScrollBegin, 0, 20.f));
-  WebView().MainFrameViewWidget()->HandleInputEvent(
+  GetWebFrameWidget().DispatchThroughCcInputHandler(
       GenerateEvent(WebInputEvent::Type::kGestureScrollUpdate, 0, 20.f));
+  Compositor().BeginFrame();
   EXPECT_FLOAT_EQ(20, WebView().GetBrowserControls().ContentOffset());
 
-  WebView().MainFrameViewWidget()->HandleInputEvent(
+  GetWebFrameWidget().DispatchThroughCcInputHandler(
       GenerateEvent(WebInputEvent::Type::kGestureScrollEnd));
+  Compositor().BeginFrame();
+  Compositor().BeginFrame(kShowHideMaxDurationMs / 1000.0);
+
   EXPECT_FLOAT_EQ(0, WebView().GetBrowserControls().ContentOffset());
   Compositor().LayerTreeHost()->UpdateBrowserControlsState(
       cc::BrowserControlsState::kBoth, cc::BrowserControlsState::kBoth, false);
@@ -886,7 +977,7 @@
   web_view->GetBrowserControls().UpdateConstraintsAndState(
       cc::BrowserControlsState::kBoth, cc::BrowserControlsState::kShown);
   web_view->GetBrowserControls().SetShownRatio(1, 1);
-  UpdateAllLifecyclePhases();
+  CompositeForTest();
 
   ASSERT_EQ(100.f, web_view->GetBrowserControls().ContentOffset());
 
@@ -1050,7 +1141,7 @@
   web_view->GetBrowserControls().UpdateConstraintsAndState(
       cc::BrowserControlsState::kBoth, cc::BrowserControlsState::kShown);
   web_view->GetBrowserControls().SetShownRatio(1, 1);
-  UpdateAllLifecyclePhases();
+  CompositeForTest();
 
   ASSERT_EQ(100.f, web_view->GetBrowserControls().ContentOffset());
 
@@ -1113,7 +1204,7 @@
   web_view->GetBrowserControls().UpdateConstraintsAndState(
       cc::BrowserControlsState::kBoth, cc::BrowserControlsState::kShown);
   web_view->GetBrowserControls().SetShownRatio(1, 1);
-  UpdateAllLifecyclePhases();
+  CompositeForTest();
 
   ASSERT_EQ(100.f, web_view->GetBrowserControls().ContentOffset());
 
@@ -1181,7 +1272,7 @@
   web_view->GetBrowserControls().UpdateConstraintsAndState(
       cc::BrowserControlsState::kBoth, cc::BrowserControlsState::kShown);
   web_view->GetBrowserControls().SetShownRatio(1, 1);
-  UpdateAllLifecyclePhases();
+  CompositeForTest();
 
   ASSERT_EQ(100.f, web_view->GetBrowserControls().ContentOffset());
 
@@ -1256,9 +1347,9 @@
   web_view->GetBrowserControls().UpdateConstraintsAndState(
       cc::BrowserControlsState::kBoth, cc::BrowserControlsState::kShown);
   web_view->GetBrowserControls().SetShownRatio(1, 1);
-  UpdateAllLifecyclePhases();
+  CompositeForTest();
 
-  ASSERT_EQ(100.f, web_view->GetBrowserControls().ContentOffset());
+  EXPECT_FLOAT_EQ(100.f, web_view->GetBrowserControls().ContentOffset());
 
   // 'vh' units should be based on the viewport when the browser controls are
   // hidden. However, the viewport height will be limited by the min-height
@@ -1279,7 +1370,7 @@
                                       {100, 20, 0, 0, false, false});
   UpdateAllLifecyclePhases();
 
-  ASSERT_EQ(20.f, web_view->GetBrowserControls().ContentOffset());
+  EXPECT_FLOAT_EQ(20.f, web_view->GetBrowserControls().ContentOffset());
 
   // vh units should be static with respect to the browser controls so neither
   // <div> should change size are a result of the browser controls hiding.
@@ -1303,7 +1394,7 @@
   web_view->GetBrowserControls().UpdateConstraintsAndState(
       cc::BrowserControlsState::kBoth, cc::BrowserControlsState::kShown);
   web_view->GetBrowserControls().SetShownRatio(1, 1);
-  UpdateAllLifecyclePhases();
+  CompositeForTest();
 
   EXPECT_FLOAT_EQ(100.f, web_view->GetBrowserControls().ContentOffset());
 
@@ -1385,7 +1476,7 @@
 // so we're testing that the viewport anchoring logic is working to keep the
 // view unchanged.
 TEST_F(BrowserControlsTest,
-       MAYBE(AnchorViewportDuringbrowserControlsAdjustment)) {
+       MAYBE(AnchorViewportDuringBrowserControlsAdjustment)) {
   int content_height = 1016;
   int layout_viewport_height = 500;
   int visual_viewport_height = 500;
@@ -1418,11 +1509,13 @@
 
   // Zoom in to 2X and fully scroll both viewports.
   web_view->SetPageScaleFactor(page_scale);
+  CompositeForTest();
   {
-    web_view->MainFrameViewWidget()->HandleInputEvent(
+    GetWebFrameWidget()->DispatchThroughCcInputHandler(
         GenerateEvent(WebInputEvent::Type::kGestureScrollBegin));
-    web_view->MainFrameViewWidget()->HandleInputEvent(
+    GetWebFrameWidget()->DispatchThroughCcInputHandler(
         GenerateEvent(WebInputEvent::Type::kGestureScrollUpdate, 0, -10000));
+    CompositeForTest();
 
     ASSERT_EQ(0.f, web_view->GetBrowserControls().ContentOffset());
 
@@ -1432,7 +1525,7 @@
               view->LayoutViewport()->GetScrollOffset().y());
     EXPECT_EQ(expected_root_offset, root_viewport->GetScrollOffset().y());
 
-    web_view->MainFrameViewWidget()->HandleInputEvent(
+    GetWebFrameWidget()->DispatchThroughCcInputHandler(
         GenerateEvent(WebInputEvent::Type::kGestureScrollEnd));
   }
 
@@ -1454,10 +1547,11 @@
   // account for this and keep the visual viewport at the same location relative
   // to the document (i.e. the user shouldn't see a movement).
   {
-    web_view->MainFrameViewWidget()->HandleInputEvent(
+    GetWebFrameWidget()->DispatchThroughCcInputHandler(
         GenerateEvent(WebInputEvent::Type::kGestureScrollBegin));
-    web_view->MainFrameViewWidget()->HandleInputEvent(
+    GetWebFrameWidget()->DispatchThroughCcInputHandler(
         GenerateEvent(WebInputEvent::Type::kGestureScrollUpdate, 0, 80));
+    CompositeForTest();
 
     GetVisualViewport().ClampToBoundaries();
     view->LayoutViewport()->SetScrollOffset(
@@ -1467,7 +1561,7 @@
     ASSERT_EQ(80.f, web_view->GetBrowserControls().ContentOffset());
     EXPECT_EQ(expected_root_offset, root_viewport->GetScrollOffset().y());
 
-    web_view->MainFrameViewWidget()->HandleInputEvent(
+    GetWebFrameWidget()->DispatchThroughCcInputHandler(
         GenerateEvent(WebInputEvent::Type::kGestureScrollEnd));
   }
 }
@@ -1659,11 +1753,13 @@
   web_view->GetBrowserControls().SetShownRatio(1.f, 1.f);
   web_view->GetBrowserControls().SetParams(
       {top_height, 20, bottom_height, 0, false, true});
+  CompositeForTest();
   // Scroll down to hide the controls.
-  web_view->MainFrameViewWidget()->HandleInputEvent(
+  GetWebFrameWidget()->DispatchThroughCcInputHandler(
       GenerateEvent(WebInputEvent::Type::kGestureScrollBegin));
-  web_view->MainFrameViewWidget()->HandleInputEvent(
+  GetWebFrameWidget()->DispatchThroughCcInputHandler(
       GenerateEvent(WebInputEvent::Type::kGestureScrollUpdate, 0, -100));
+  CompositeForTest();
 
   // The bottom controls should be completely hidden while the top controls are
   // at the minimum height.
@@ -1672,8 +1768,9 @@
   EXPECT_EQ(20, web_view->GetBrowserControls().ContentOffset());
 
   // Scrolling back up should bring the browser controls shown ratios back to 1.
-  web_view->MainFrameViewWidget()->HandleInputEvent(
+  GetWebFrameWidget()->DispatchThroughCcInputHandler(
       GenerateEvent(WebInputEvent::Type::kGestureScrollUpdate, 0, 100));
+  CompositeForTest();
   EXPECT_EQ(1.f, web_view->GetBrowserControls().BottomShownRatio());
   EXPECT_EQ(1.f, web_view->GetBrowserControls().TopShownRatio());
   EXPECT_EQ(top_height, web_view->GetBrowserControls().ContentOffset());
@@ -1689,37 +1786,41 @@
   web_view->GetBrowserControls().SetShownRatio(1.f, 1.f);
   web_view->GetBrowserControls().SetParams(
       {top_height, 20, bottom_height, 10, false, true});
+  CompositeForTest();
 
-  web_view->MainFrameViewWidget()->HandleInputEvent(
+  GetWebFrameWidget()->DispatchThroughCcInputHandler(
       GenerateEvent(WebInputEvent::Type::kGestureScrollBegin));
-  web_view->MainFrameViewWidget()->HandleInputEvent(
+  GetWebFrameWidget()->DispatchThroughCcInputHandler(
       GenerateEvent(WebInputEvent::Type::kGestureScrollUpdate, 0, -100));
-  web_view->MainFrameViewWidget()->HandleInputEvent(
+  GetWebFrameWidget()->DispatchThroughCcInputHandler(
       GenerateEvent(WebInputEvent::Type::kGestureScrollEnd));
+  CompositeForTest();
 
   // Browser controls don't scroll off completely, and stop scrolling at the min
   // height.
-  EXPECT_EQ(20, web_view->GetBrowserControls().ContentOffset());
-  EXPECT_EQ(10, web_view->GetBrowserControls().BottomContentOffset());
+  EXPECT_FLOAT_EQ(20, web_view->GetBrowserControls().ContentOffset());
+  EXPECT_FLOAT_EQ(10, web_view->GetBrowserControls().BottomContentOffset());
 
   // Ending the scroll then scrolling again shouldn't make any difference.
-  web_view->MainFrameViewWidget()->HandleInputEvent(
+  GetWebFrameWidget()->DispatchThroughCcInputHandler(
       GenerateEvent(WebInputEvent::Type::kGestureScrollBegin));
-  web_view->MainFrameViewWidget()->HandleInputEvent(
+  GetWebFrameWidget()->DispatchThroughCcInputHandler(
       GenerateEvent(WebInputEvent::Type::kGestureScrollUpdate, 0, -50));
-  web_view->MainFrameViewWidget()->HandleInputEvent(
+  GetWebFrameWidget()->DispatchThroughCcInputHandler(
       GenerateEvent(WebInputEvent::Type::kGestureScrollEnd));
-  EXPECT_EQ(20, web_view->GetBrowserControls().ContentOffset());
-  EXPECT_EQ(10, web_view->GetBrowserControls().BottomContentOffset());
+  CompositeForTest();
+  EXPECT_FLOAT_EQ(20, web_view->GetBrowserControls().ContentOffset());
+  EXPECT_FLOAT_EQ(10, web_view->GetBrowserControls().BottomContentOffset());
 
   // Finally, scroll back up to show the controls completely.
-  web_view->MainFrameViewWidget()->HandleInputEvent(
+  GetWebFrameWidget()->DispatchThroughCcInputHandler(
       GenerateEvent(WebInputEvent::Type::kGestureScrollBegin));
-  web_view->MainFrameViewWidget()->HandleInputEvent(
+  GetWebFrameWidget()->DispatchThroughCcInputHandler(
       GenerateEvent(WebInputEvent::Type::kGestureScrollUpdate, 0, 100));
-  EXPECT_EQ(top_height, web_view->GetBrowserControls().ContentOffset());
-  EXPECT_EQ(bottom_height,
-            web_view->GetBrowserControls().BottomContentOffset());
+  CompositeForTest();
+  EXPECT_FLOAT_EQ(top_height, web_view->GetBrowserControls().ContentOffset());
+  EXPECT_FLOAT_EQ(bottom_height,
+                  web_view->GetBrowserControls().BottomContentOffset());
 }
 
 #undef MAYBE
diff --git a/third_party/blink/renderer/core/frame/local_frame_view.cc b/third_party/blink/renderer/core/frame/local_frame_view.cc
index c35cc11..4c887ca 100644
--- a/third_party/blink/renderer/core/frame/local_frame_view.cc
+++ b/third_party/blink/renderer/core/frame/local_frame_view.cc
@@ -47,6 +47,7 @@
 #include "cc/tiles/frame_viewer_instrumentation.h"
 #include "cc/trees/layer_tree_host.h"
 #include "components/paint_preview/common/paint_preview_tracker.h"
+#include "third_party/abseil-cpp/absl/functional/function_ref.h"
 #include "third_party/blink/public/common/features.h"
 #include "third_party/blink/public/mojom/scroll/scroll_into_view_params.mojom-blink.h"
 #include "third_party/blink/public/mojom/scroll/scrollbar_mode.mojom-blink.h"
@@ -343,8 +344,8 @@
   visitor->Trace(fullscreen_video_elements_);
 }
 
-template <typename Function>
-void LocalFrameView::ForAllChildViewsAndPlugins(const Function& function) {
+void LocalFrameView::ForAllChildViewsAndPlugins(
+    absl::FunctionRef<void(EmbeddedContentView&)> function) {
   for (Frame* child = frame_->Tree().FirstChild(); child;
        child = child->Tree().NextSibling()) {
     if (child->View())
@@ -373,8 +374,8 @@
   }
 }
 
-template <typename Function>
-void LocalFrameView::ForAllChildLocalFrameViews(const Function& function) {
+void LocalFrameView::ForAllChildLocalFrameViews(
+    absl::FunctionRef<void(LocalFrameView&)> function) {
   for (Frame* child = frame_->Tree().FirstChild(); child;
        child = child->Tree().NextSibling()) {
     auto* child_local_frame = DynamicTo<LocalFrame>(child);
@@ -385,12 +386,11 @@
   }
 }
 
-// Call function for each non-throttled frame view in pre-order (by default) or
-// post-order. If this logic is updated, consider updating
-// |ForAllThrottledLocalFrameViews| too.
-template <typename Function>
-void LocalFrameView::ForAllNonThrottledLocalFrameViews(const Function& function,
-                                                       TraversalOrder order) {
+// Note: if this logic is updated, `ForAllThrottledLocalFrameViews()` may
+// need to be updated as well.
+void LocalFrameView::ForAllNonThrottledLocalFrameViews(
+    absl::FunctionRef<void(LocalFrameView&)> function,
+    TraversalOrder order) {
   if (ShouldThrottleRendering())
     return;
 
@@ -405,10 +405,10 @@
     function(*this);
 }
 
-// Call function for each throttled frame view in pre-order. If this logic is
-// updated, consider updating |ForAllNonThrottledLocalFrameViews| too.
-template <typename Function>
-void LocalFrameView::ForAllThrottledLocalFrameViews(const Function& function) {
+// Note: if this logic is updated, `ForAllNonThrottledLocalFrameViews()` may
+// need to be updated as well.
+void LocalFrameView::ForAllThrottledLocalFrameViews(
+    absl::FunctionRef<void(LocalFrameView&)> function) {
   if (ShouldThrottleRendering())
     function(*this);
 
@@ -417,15 +417,8 @@
   });
 }
 
-void LocalFrameView::ForAllThrottledLocalFrameViewsForTesting(
-    base::RepeatingCallback<void(LocalFrameView&)> callback) {
-  AllowThrottlingScope allow_throttling(*this);
-  ForAllThrottledLocalFrameViews(
-      [&callback](LocalFrameView& view) { callback.Run(view); });
-}
-
-template <typename Function>
-void LocalFrameView::ForAllRemoteFrameViews(const Function& function) {
+void LocalFrameView::ForAllRemoteFrameViews(
+    absl::FunctionRef<void(RemoteFrameView&)> function) {
   for (Frame* child = frame_->Tree().FirstChild(); child;
        child = child->Tree().NextSibling()) {
     if (child->IsLocalFrame()) {
@@ -865,6 +858,10 @@
           default_allow_deferred_shaping_ &&
           RuntimeEnabledFeatures::DeferredShapingEnabled() &&
           !frame_->PagePopupOwner() &&
+          // Avoid a DCEHCK failure in |NavigatingExtensionPopupInteractiveTest.
+          // PageInOtherExtension_Get| on linux-lacros-rel.
+          // TODO(tkent): Investigate the failure.
+          !document->Url().Protocol().StartsWith("chrome-error") &&
           !FirstMeaningfulPaintDetector::From(*frame_->GetDocument())
                .SeenFirstMeaningfulPaint();
       base::AutoReset<bool> deferred_shaping(
diff --git a/third_party/blink/renderer/core/frame/local_frame_view.h b/third_party/blink/renderer/core/frame/local_frame_view.h
index ffda6ea..97c52d6 100644
--- a/third_party/blink/renderer/core/frame/local_frame_view.h
+++ b/third_party/blink/renderer/core/frame/local_frame_view.h
@@ -33,6 +33,7 @@
 #include "base/dcheck_is_on.h"
 #include "base/gtest_prod_util.h"
 #include "base/time/time.h"
+#include "third_party/abseil-cpp/absl/functional/function_ref.h"
 #include "third_party/blink/public/common/metrics/document_update_reason.h"
 #include "third_party/blink/public/mojom/frame/lifecycle.mojom-blink-forward.h"
 #include "third_party/blink/public/mojom/frame/viewport_intersection_state.mojom-blink-forward.h"
@@ -109,6 +110,7 @@
 class PaintLayer;
 class PaintLayerScrollableArea;
 class PaintTimingDetector;
+class RemoteFrameView;
 class RootFrameViewport;
 class ScrollableArea;
 class Scrollbar;
@@ -825,7 +827,7 @@
   // throttling (e.g., during BeginMainFrame). If a script needs to run inside
   // this scope, DisallowThrottlingScope should be used to let the script
   // perform a synchronous layout if necessary.
-  class AllowThrottlingScope {
+  class CORE_EXPORT AllowThrottlingScope {
     STACK_ALLOCATED();
 
    public:
@@ -963,25 +965,17 @@
   void CollectAnnotatedRegions(LayoutObject&,
                                Vector<AnnotatedRegionValue>&) const;
 
-  template <typename Function>
-  void ForAllChildViewsAndPlugins(const Function&);
-
-  template <typename Function>
-  void ForAllChildLocalFrameViews(const Function&);
+  void ForAllChildViewsAndPlugins(
+      absl::FunctionRef<void(EmbeddedContentView&)>);
+  void ForAllChildLocalFrameViews(absl::FunctionRef<void(LocalFrameView&)>);
 
   enum TraversalOrder { kPreOrder, kPostOrder };
-  template <typename Function>
-  void ForAllNonThrottledLocalFrameViews(const Function&,
-                                         TraversalOrder = kPreOrder);
+  void ForAllNonThrottledLocalFrameViews(
+      absl::FunctionRef<void(LocalFrameView&)>,
+      TraversalOrder = kPreOrder);
+  void ForAllThrottledLocalFrameViews(absl::FunctionRef<void(LocalFrameView&)>);
 
-  template <typename Function>
-  void ForAllThrottledLocalFrameViews(const Function&);
-
-  void ForAllThrottledLocalFrameViewsForTesting(
-      base::RepeatingCallback<void(LocalFrameView&)>);
-
-  template <typename Function>
-  void ForAllRemoteFrameViews(const Function&);
+  void ForAllRemoteFrameViews(absl::FunctionRef<void(RemoteFrameView&)>);
 
   bool UpdateViewportIntersectionsForSubtree(
       unsigned parent_flags,
diff --git a/third_party/blink/renderer/core/resize_observer/resize_observation.cc b/third_party/blink/renderer/core/resize_observer/resize_observation.cc
index 2786608..65ebb930 100644
--- a/third_party/blink/renderer/core/resize_observer/resize_observation.cc
+++ b/third_party/blink/renderer/core/resize_observer/resize_observation.cc
@@ -3,7 +3,9 @@
 // found in the LICENSE file.
 
 #include "third_party/blink/renderer/core/resize_observer/resize_observation.h"
+
 #include "third_party/blink/renderer/core/display_lock/display_lock_utilities.h"
+#include "third_party/blink/renderer/core/dom/flat_tree_traversal.h"
 #include "third_party/blink/renderer/core/layout/adjust_for_absolute_zoom.h"
 #include "third_party/blink/renderer/core/layout/layout_box.h"
 #include "third_party/blink/renderer/core/resize_observer/resize_observer.h"
@@ -43,9 +45,14 @@
   observation_size_ = observation_size;
 }
 
+// https://drafts.csswg.org/resize-observer/#calculate-depth-for-node
+// 1. Let p be the parent-traversal path from node to a root Element of this
+//    element’s flattened DOM tree.
+// 2. Return number of nodes in p.
 size_t ResizeObservation::TargetDepth() {
   unsigned depth = 0;
-  for (Element* parent = target_; parent; parent = parent->parentElement())
+  for (Element* parent = target_; parent;
+       parent = FlatTreeTraversal::ParentElement(*parent))
     ++depth;
   return depth;
 }
diff --git a/third_party/blink/renderer/core/scheduler_integration_tests/frame_throttling_test.cc b/third_party/blink/renderer/core/scheduler_integration_tests/frame_throttling_test.cc
index 44b6aa0..8d20f3d0 100644
--- a/third_party/blink/renderer/core/scheduler_integration_tests/frame_throttling_test.cc
+++ b/third_party/blink/renderer/core/scheduler_integration_tests/frame_throttling_test.cc
@@ -393,11 +393,10 @@
   // Main frame is not throttled.
   EXPECT_FALSE(GetDocument().View()->ShouldThrottleRenderingForTest());
 
+  LocalFrameView::AllowThrottlingScope allow_throttling(*GetDocument().View());
   unsigned throttled_count = 0;
-  auto throttled_callback = base::BindLambdaForTesting(
+  GetDocument().View()->ForAllThrottledLocalFrameViews(
       [&throttled_count](LocalFrameView&) { throttled_count++; });
-  GetDocument().View()->ForAllThrottledLocalFrameViewsForTesting(
-      throttled_callback);
   EXPECT_EQ(1u, throttled_count);
 }
 
diff --git a/third_party/blink/renderer/modules/wake_lock/wake_lock.cc b/third_party/blink/renderer/modules/wake_lock/wake_lock.cc
index 497fc704..bb4515e58 100644
--- a/third_party/blink/renderer/modules/wake_lock/wake_lock.cc
+++ b/third_party/blink/renderer/modules/wake_lock/wake_lock.cc
@@ -251,7 +251,7 @@
 }
 
 void WakeLock::Trace(Visitor* visitor) const {
-  for (const WakeLockManager* manager : managers_)
+  for (const Member<WakeLockManager>& manager : managers_)
     visitor->Trace(manager);
   visitor->Trace(permission_service_);
   Supplement<NavigatorBase>::Trace(visitor);
diff --git a/third_party/blink/renderer/modules/webaudio/audio_context.cc b/third_party/blink/renderer/modules/webaudio/audio_context.cc
index cfed8b2..f930f6d 100644
--- a/third_party/blink/renderer/modules/webaudio/audio_context.cc
+++ b/third_party/blink/renderer/modules/webaudio/audio_context.cc
@@ -221,11 +221,6 @@
     case AutoplayPolicy::Type::kUserGestureRequired:
       // kUserGestureRequire policy only applies to cross-origin iframes for Web
       // Audio.
-      // TODO(crbug.com/1318055): With MPArch there may be multiple main frames
-      // so we should use IsCrossOriginToOutermostMainFrame when we intend to
-      // check if any embedded frame (eg, iframe or fenced frame) is
-      // cross-origin with respect to the outermost main frame. Follow up to
-      // confirm correctness.
       if (document.GetFrame() &&
           document.GetFrame()->IsCrossOriginToOutermostMainFrame()) {
         autoplay_status_ = AutoplayStatus::kFailed;
@@ -667,10 +662,6 @@
   // Record autoplay_status_ value.
   base::UmaHistogramEnumeration("WebAudio.Autoplay", autoplay_status_.value());
 
-  // TODO(crbug.com/1318055): With MPArch there may be multiple main frames so
-  // we should use IsCrossOriginToOutermostMainFrame when we intend to check if
-  // any embedded frame (eg, iframe or fenced frame) is cross-origin with
-  // respect to the outermost main frame. Follow up to confirm correctness.
   if (GetDocument()->GetFrame() &&
       GetDocument()->GetFrame()->IsCrossOriginToOutermostMainFrame()) {
     base::UmaHistogramEnumeration("WebAudio.Autoplay.CrossOrigin",
diff --git a/third_party/blink/renderer/platform/loader/fetch/url_loader/mojo_url_loader_client.cc b/third_party/blink/renderer/platform/loader/fetch/url_loader/mojo_url_loader_client.cc
index 7fd3cafd8..bfa833c3 100644
--- a/third_party/blink/renderer/platform/loader/fetch/url_loader/mojo_url_loader_client.cc
+++ b/third_party/blink/renderer/platform/loader/fetch/url_loader/mojo_url_loader_client.cc
@@ -10,7 +10,6 @@
 #include "base/callback.h"
 #include "base/containers/queue.h"
 #include "base/feature_list.h"
-#include "base/metrics/histogram_macros.h"
 #include "base/task/single_thread_task_runner.h"
 #include "base/trace_event/trace_event.h"
 #include "mojo/public/cpp/system/data_pipe_drainer.h"
diff --git a/third_party/blink/renderer/platform/loader/fetch/url_loader/web_url_loader.cc b/third_party/blink/renderer/platform/loader/fetch/url_loader/web_url_loader.cc
index daf2621..5ee674fe 100644
--- a/third_party/blink/renderer/platform/loader/fetch/url_loader/web_url_loader.cc
+++ b/third_party/blink/renderer/platform/loader/fetch/url_loader/web_url_loader.cc
@@ -18,7 +18,6 @@
 #include "base/command_line.h"
 #include "base/feature_list.h"
 #include "base/files/file_path.h"
-#include "base/metrics/histogram_macros.h"
 #include "base/notreached.h"
 #include "base/sequence_checker.h"
 #include "base/strings/string_number_conversions.h"
diff --git a/third_party/blink/tools/blinkpy/presubmit/audit_non_blink_usage.py b/third_party/blink/tools/blinkpy/presubmit/audit_non_blink_usage.py
index 02e7778..e66a68c0 100755
--- a/third_party/blink/tools/blinkpy/presubmit/audit_non_blink_usage.py
+++ b/third_party/blink/tools/blinkpy/presubmit/audit_non_blink_usage.py
@@ -37,9 +37,22 @@
             'gfx::ICCProfile',
             'gfx::RadToDeg',
 
-            # absl optional constructs.
-            'absl::optional',
+            # absl
+            'absl::FunctionRef',
+            'absl::MakeInt128',
+            'absl::MakeUint128',
+            'absl::get',
+            'absl::get_if',
+            'absl::holds_alternative',
             'absl::in_place',
+            'absl::int128',
+            'absl::make_optional',
+            'absl::nullopt',
+            'absl::nullopt_t',
+            'absl::optional',
+            'absl::uint128',
+            'absl::variant',
+            'absl::visit',
 
             # //base constructs that are allowed everywhere
             'base::AdoptRef',
@@ -76,6 +89,7 @@
             'base::Nanoseconds',
             'base::OptionalFromPtr',
             'base::OptionalOrNullptr',
+            'base::PassKey',
             'base::PlatformThread',
             'base::PlatformThreadId',
             'base::RefCountedData',
@@ -112,17 +126,12 @@
             'base::WritableSharedMemoryMapping',
             'base::as_bytes',
             'base::bit_cast',
-            'absl::in_place',
-            'absl::make_optional',
             'base::make_span',
-            'absl::nullopt',
-            'absl::nullopt_t',
             'base::ranges::.+',
             'base::sequence_manager::TaskTimeObserver',
             'base::span',
             'logging::GetVlogLevel',
             'logging::SetLogItems',
-            'base::PassKey',
 
             # //base/allocator/partition_allocator/partition_alloc_constants.h
             'partition_alloc::internal::kAlignment',
@@ -681,19 +690,6 @@
             'base::mac::(CFToNSCast|NSToCFCast)',
             'base::mac::Is(AtMost|AtLeast)?OS.+',
             'base::(scoped_nsobject|ScopedCFTypeRef)',
-
-            # absl::variant and getters:
-            'absl::get',
-            'absl::get_if',
-            'absl::holds_alternative',
-            'absl::variant',
-            'absl::visit',
-
-            # 128-bit absl types
-            'absl::MakeInt128',
-            'absl::MakeUint128',
-            'absl::int128',
-            'absl::uint128',
         ],
         'disallowed': [
             ('base::Bind(|Once|Repeating)',
diff --git a/third_party/blink/web_tests/TestExpectations b/third_party/blink/web_tests/TestExpectations
index 43a4832..a59307d 100644
--- a/third_party/blink/web_tests/TestExpectations
+++ b/third_party/blink/web_tests/TestExpectations
@@ -3365,6 +3365,9 @@
 crbug.com/626703 [ Win ] virtual/partitioned-cookies/http/tests/inspector-protocol/network/disabled-cache-navigation.js [ Failure ]
 
 # ====== New tests from wpt-importer added here ======
+crbug.com/626703 external/wpt/shadow-dom/shadow-style-invalidation-vw-units.html [ Failure ]
+crbug.com/626703 virtual/offsetparent-old-behavior/external/wpt/shadow-dom/shadow-style-invalidation-vw-units.html [ Failure ]
+crbug.com/626703 [ Mac10.15 ] virtual/third-party-storage-partitioning/external/wpt/IndexedDB/idb-partitioned-persistence.tentative.sub.html [ Timeout ]
 crbug.com/626703 external/wpt/css/css-color/currentcolor-003.html [ Failure ]
 crbug.com/626703 [ Mac11 ] virtual/document-transition/wpt_internal/document-transition/commit-timeout-crash.html [ Timeout ]
 crbug.com/626703 [ Win11 ] virtual/conversions-debug-mode/wpt_internal/attribution-reporting/source-registration.sub.https.html?method=a [ Timeout ]
@@ -4813,10 +4816,7 @@
 
 # Tests using testRunner.useUnfortunateSynchronousResizeMode occasionally timeout,
 # but the test coverage is still good.
-crbug.com/919789 fast/dom/viewport/resize-event-fired-window-resized.html [ Pass Timeout ]
 crbug.com/919789 fast/dom/Window/window-resize-contents.html [ Pass Timeout ]
-crbug.com/919789 [ Linux ] paint/invalidation/resize-iframe-text.html [ Pass Timeout ]
-crbug.com/919789 paint/invalidation/scroll/scrollbar-damage-and-full-viewport-repaint.html [ Pass Timeout ]
 
 crbug.com/1021627 fast/dom/rtl-scroll-to-leftmost-and-resize.html [ Failure Pass Timeout ]
 crbug.com/1130876 fast/dynamic/window-resize-scrollbars-test.html [ Failure Pass ]
@@ -7160,3 +7160,6 @@
 # Sheriff 2022-07-05
 crbug.com/1321217 [ Mac11-arm64 ] http/tests/devtools/layers/layer-canvas-log.js [ Failure Pass ]
 crbug.com/1342050 [ Mac10.15 ] virtual/prerender/wpt_internal/prerender/activate-from-iframe.html [ Failure Pass ]
+crbug.com/1340763 external/wpt/pointerevents/pointerevent_capture_mouse.html [ Failure Pass ]
+crbug.com/1341090 external/wpt/webmessaging/with-ports/021.html [ Failure Pass ]
+crbug.com/1341090 external/wpt/webmessaging/without-ports/021.html [ Failure Pass ]
diff --git a/third_party/blink/web_tests/external/Version b/third_party/blink/web_tests/external/Version
index f61d201..a4e0023a 100644
--- a/third_party/blink/web_tests/external/Version
+++ b/third_party/blink/web_tests/external/Version
@@ -1 +1 @@
-Version: 95d4bd97e123a54e8c7171b639d3e4fab89e68be
+Version: 4b5034d8896742de5e6881caf581406264dbdc78
diff --git a/third_party/blink/web_tests/external/WPT_BASE_MANIFEST_8.json b/third_party/blink/web_tests/external/WPT_BASE_MANIFEST_8.json
index 91ddd71..cc04ce0 100644
--- a/third_party/blink/web_tests/external/WPT_BASE_MANIFEST_8.json
+++ b/third_party/blink/web_tests/external/WPT_BASE_MANIFEST_8.json
@@ -242504,6 +242504,19 @@
       {}
      ]
     ],
+    "shadow-style-invalidation-vw-units.html": [
+     "98c69e19fe9dcb95c7df0895dbe0becf2a54b992",
+     [
+      null,
+      [
+       [
+        "/shadow-dom/imperative-slot-layout-invalidation-001-ref.html",
+        "=="
+       ]
+      ],
+      {}
+     ]
+    ],
     "untriaged": {
      "shadow-trees": {
       "nested-shadow-trees": {
@@ -253921,7 +253934,7 @@
     ],
     "support": {
      "README.md": [
-      "886faa84579adb65a62105f6f010a149143ff976",
+      "2825092248cd61c0d5da2325ce3eabc53d2224e6",
       []
      ],
      "accounts.py": [
@@ -253945,31 +253958,27 @@
       []
      ],
      "fedcm-iframe.html": [
-      "546f66aa38106e0fb3a6d27849047ee47af12796",
+      "cc584bfdaa95596d795bc96afd9906b923297b2c",
       []
      ],
      "fedcm-manifest-not-in-list": {
       "fedcm.json": [
-       "c044a7fd5eb8365d15ee29a2cec50856692b2c05",
+       "c29126e183b0ec06f80e60aefa5970793c547ffa",
        []
       ]
      },
      "fedcm-mock.js": [
-      "9923e898419df99cc57c36ce09058f76590d3bf2",
+      "53257099a18cd8ecbe44e9c62622a7376ec738dc",
       []
      ],
      "fedcm.json": [
-      "fc1c7394754b9dd131ed339dc10d52198707073a",
+      "b4901f538c239dc4c994d233d4349e92016be6f7",
       []
      ],
      "federatedcredential-get.html": [
       "476f32688f91cede949edf2a1e650ef573525bd7",
       []
      ],
-     "id_token.py": [
-      "f6faad4deabe7266e3350c731baf1f24649cda66",
-      []
-     ],
      "otpcredential-helper.js": [
       "e07e9f5be359e9173b6c916d91d8ce1f87260885",
       []
@@ -253989,6 +253998,10 @@
      "set_cookie.headers": [
       "8c233d14cfb9c9d2cce7e0173434bf604b4b4c3d",
       []
+     ],
+     "token.py": [
+      "e9b07767c8d9cb430a77e34f2a7669117fa24fa2",
+      []
      ]
     }
    },
@@ -318792,7 +318805,7 @@
      []
     ],
     "FedCM.idl": [
-     "af48621038c02cb1e4875d5722c8c4aa5c4bb7b9",
+     "832b54a684aa74ee9e67f534bcfb89d43fcad040",
      []
     ],
     "FileAPI.idl": [
@@ -329695,6 +329708,10 @@
       []
      ]
     },
+    "shadow-style-invalidation-vw-units-ref.html": [
+     "d86fd234ca321a762fff5017b4adc68301124bcd",
+     []
+    ],
     "untriaged": {
      "README": [
       "5b7572bda4e2c2b2477a151345de3441265a8ca8",
@@ -370509,7 +370526,7 @@
      ]
     ],
     "fedcm-network-requests.sub.https.html": [
-     "a19cf6a4ac6eba8be96fd432ffa1d0bc7725706a",
+     "eed87d09765e4034b09d5679f700709082a54106",
      [
       null,
       {}
@@ -401009,7 +401026,7 @@
       ]
      ],
      "has-specificity.html": [
-      "b33e3a0eb3663266d7806ea9d243428684d673fd",
+      "69fcb5b1fbe5b1256192d70e7d3262baa03661e5",
       [
        null,
        {}
@@ -517247,6 +517264,13 @@
     ]
    },
    "resize-observer": {
+    "calculate-depth-for-node.html": [
+     "339e52bb79cbd1fc20d1059993ae8ee3b0591b3f",
+     [
+      null,
+      {}
+     ]
+    ],
     "change-layout-in-error.html": [
      "9083fb48f94efe2a4d402fda2e452d72f94b1e17",
      [
diff --git a/third_party/blink/web_tests/external/wpt/css/selectors/has-specificity.html b/third_party/blink/web_tests/external/wpt/css/selectors/has-specificity.html
index b33e3a0e..69fcb5b 100644
--- a/third_party/blink/web_tests/external/wpt/css/selectors/has-specificity.html
+++ b/third_party/blink/web_tests/external/wpt/css/selectors/has-specificity.html
@@ -21,9 +21,15 @@
 
   main :has(span, li, #foo) { --t5:PASS; }
   main :has(span, li, p) { --t5:FAIL; }
+
+  main div:has(.foo) { --t6:FAIL; }
+  main div.baz { --t6:PASS; }
+
+  main div.baz { --t7:FAIL; }
+  main div:has(.foo) { --t7:PASS; }
 </style>
 <main id=main>
-  <div id=div><p><span id=foo class=foo></span><span class=bar></span><li></li></p></div>
+  <div id=div class=baz><p><span id=foo class=foo></span><span class=bar></span><li></li></p></div>
 </main>
 <script>
   function test_value(name, description) {
@@ -39,4 +45,6 @@
   test_value('--t3', ':has(.bar, #foo) wins over :has(.foo, .bar)');
   test_value('--t4', ':has(span + span) wins over :has(span)');
   test_value('--t5', ':has(span, li, p) wins over :has(span, lo, p)');
+  test_value('--t6', 'latter .baz wins over :has(.foo)');
+  test_value('--t7', 'latter :has(.foo) wins over .baz');
 </script>
diff --git a/third_party/blink/web_tests/external/wpt/resize-observer/calculate-depth-for-node.html b/third_party/blink/web_tests/external/wpt/resize-observer/calculate-depth-for-node.html
new file mode 100644
index 0000000..339e52bb
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/resize-observer/calculate-depth-for-node.html
@@ -0,0 +1,26 @@
+<!DOCTYPE html>
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<link rel="help" href="https://drafts.csswg.org/resize-observer/#calculate-depth-for-node">
+<body>
+<div id="host"></div>
+<script>
+let didSeeError = false;
+window.onerror = (message, source, lineno, colno, error) => {
+  didSeeError = true;
+}
+
+async_test(t => {
+  let host = document.querySelector('#host');
+  let observer = new ResizeObserver(t.step_func(() => {
+    let root = host.attachShadow({mode:'open'});
+    let child = root.appendChild(document.createElement('div'));
+    new ResizeObserver(() => {}).observe(child);
+    requestAnimationFrame(t.step_func_done(() => { assert_false(didSeeError); }));
+  }));
+  observer.observe(host);
+}, '"Calculate depth for node" algorithm with Shadow DOM');
+
+
+</script>
+</body>
diff --git a/third_party/blink/web_tests/external/wpt/shadow-dom/shadow-style-invalidation-vw-units-ref.html b/third_party/blink/web_tests/external/wpt/shadow-dom/shadow-style-invalidation-vw-units-ref.html
new file mode 100644
index 0000000..d86fd23
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/shadow-dom/shadow-style-invalidation-vw-units-ref.html
@@ -0,0 +1,6 @@
+<!DOCTYPE html>
+<html>
+<body>
+<div style="width: 100px; height: 100px; background: green;"></div>
+</body>
+</html>
diff --git a/third_party/blink/web_tests/external/wpt/shadow-dom/shadow-style-invalidation-vw-units.html b/third_party/blink/web_tests/external/wpt/shadow-dom/shadow-style-invalidation-vw-units.html
new file mode 100644
index 0000000..98c69e1
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/shadow-dom/shadow-style-invalidation-vw-units.html
@@ -0,0 +1,28 @@
+<!DOCTYPE html>
+<html>
+<head>
+<link rel=match href="imperative-slot-layout-invalidation-001-ref.html">
+<meta name="author" title="Ryosuke Niwa" href="mailto:rniwa@webkit.org">
+</head>
+<body>
+<script>
+
+const iframe = document.createElement('iframe');
+iframe.scrolling = 'no';
+iframe.style = 'border: none; width: 50px; height: 50px; overflow: hidden';
+iframe.src = `data:text/html,<!DOCTYPE html><style>head,html,body { padding: 0; margin: 0; }</style>
+<div style="width: 100vw; height: 50vw; background: green"></div>
+<div style="width: 100px; height: 100px; background: red;"><div id="host"></div></div>
+<script>host.attachShadow({mode: 'closed'}).innerHTML =
+    '<style> div { width: 100vw; height: 50vw; background: green; }</style><div></div>';
+host.getBoundingClientRect();
+</sc` + `ript>`;
+iframe.onload = () => {
+    iframe.style.width = '100px';
+    iframe.style.height = '100px';
+}
+document.body.appendChild(iframe);
+
+</script>
+</body>
+</html>
diff --git a/third_party/blink/web_tests/external/wpt/webrtc/RTCPeerConnection-createAnswer.html b/third_party/blink/web_tests/external/wpt/webrtc/RTCPeerConnection-createAnswer.html
index ceb01e54..1970db0 100644
--- a/third_party/blink/web_tests/external/wpt/webrtc/RTCPeerConnection-createAnswer.html
+++ b/third_party/blink/web_tests/external/wpt/webrtc/RTCPeerConnection-createAnswer.html
@@ -5,102 +5,37 @@
 <script src="/resources/testharnessreport.js"></script>
 <script src="RTCPeerConnection-helper.js"></script>
 <script>
-  'use strict';
+'use strict';
 
-  // Test is based on the following editor draft:
-  // https://w3c.github.io/webrtc-pc/archives/20170515/webrtc.html
+promise_test(async t => {
+  const pc = new RTCPeerConnection();
+  t.add_cleanup(() => pc.close());
 
-  // The following helper functions are called from RTCPeerConnection-helper.js:
-  //   generateDataChannelOffer()
+  await promise_rejects_dom(t, 'InvalidStateError', pc.createAnswer());
+}, 'createAnswer() with null remoteDescription should reject with InvalidStateError');
 
-  /*
-   * 4.3.2. createAnswer()
-   */
+promise_test(async t => {
+  const pc = new RTCPeerConnection();
+  t.add_cleanup(() => pc.close());
 
-  /*
-   *  4.1.  If connection's remoteDescription is null return a promise rejected with a
-   *        newly created InvalidStateError.
-   */
-  promise_test(t => {
-    const pc = new RTCPeerConnection();
-    t.add_cleanup(() => pc.close());
-    return promise_rejects_dom(t, 'InvalidStateError',
-      pc.createAnswer());
-  }, 'createAnswer() with null remoteDescription should reject with InvalidStateError');
+  const offer = await generateVideoReceiveOnlyOffer(pc);
+  await pc.setRemoteDescription(offer);
+  const answer = await pc.createAnswer();
+  assert_equals(typeof answer, 'object',
+    'Expect answer to be plain object dictionary RTCSessionDescriptionInit');
+  assert_false(answer instanceof RTCSessionDescription,
+    'Expect answer to not be instance of RTCSessionDescription');
+}, 'createAnswer() after setting remote description should succeed');
 
-  /*
-   *  Final steps to create an answer
-   *  4. Let answer be a newly created RTCSessionDescriptionInit dictionary with its
-   *     type member initialized to the string "answer" and its sdp member initialized to sdpString.
-   */
-  promise_test(t => {
-    const pc = new RTCPeerConnection();
+promise_test(async t => {
+  const pc = new RTCPeerConnection();
+  t.add_cleanup(() => pc.close());
 
-    t.add_cleanup(() => pc.close());
-
-    return generateVideoReceiveOnlyOffer(pc)
-    .then(offer => pc.setRemoteDescription(offer))
-    .then(() => pc.createAnswer())
-    .then(answer => {
-      assert_equals(typeof answer, 'object',
-        'Expect answer to be plain object dictionary RTCSessionDescriptionInit');
-
-      assert_false(answer instanceof RTCSessionDescription,
-        'Expect answer to not be instance of RTCSessionDescription')
-    });
-  }, 'createAnswer() after setting remote description should succeed');
-
-  promise_test(t => {
-    const pc = new RTCPeerConnection();
-
-    t.add_cleanup(() => pc.close());
-
-    return generateDataChannelOffer(pc)
-    .then(offer => pc.setRemoteDescription(offer))
-    .then(() => {
-      pc.close();
-      return promise_rejects_dom(t, 'InvalidStateError',
-        pc.createAnswer());
-    });
-  }, 'createAnswer() when connection is closed reject with InvalidStateError');
-
-  /*
-   *  TODO
-   *  4.3.2 createAnswer
-   *    3.  If connection is configured with an identity provider, and an
-   *        identity assertion has not yet been generated using said
-   *        identity provider, then begin the identity assertion request
-   *        process if it has not already begun.
-   *
-   *    Steps to create an answer
-   *      1.  If the need for an identity assertion was identified when
-   *          createAnswer was invoked, wait for the identity assertion
-   *          request process to complete.
-   *      2.  If the identity provider was unable to produce an identity
-   *          assertion, reject p with a newly created NotReadableError
-   *          and abort these steps.
-   *      3.  If connection was not constructed with a set of certificates,
-   *          and one has not yet been generated, wait for it to be generated.
-   *
-   *    Final steps to create an answer
-   *      2.  If connection was modified in such a way that additional
-   *          inspection of the system state is necessary, then in
-   *          parallel begin the steps to create an answer again, given p,
-   *          and abort these steps.
-   *
-   *  Non-Testable
-   *  4.3.2 createAnswer
-   *      Steps to create an answer
-   *        4.  Inspect the system state to determine the currently
-   *            available resources as necessary for generating the answer,
-   *            as described in [JSEP] (section 4.1.7.).
-   *        5.  If this inspection failed for any reason, reject p with a
-   *            newly created OperationError and abort these steps.
-   *
-   *      Final steps to create an answer
-   *        3.  Given the information that was obtained from previous inspection
-   *            and the current state of connection and its RTCRtpTransceivers,
-   *            generate an SDP answer, sdpString, as described in [JSEP] (section 5.3.).
-   */
+  // generateDataChannelOffer() is defined in RTCPeerConnection-helper.js.
+  const offer = await generateDataChannelOffer(pc);
+  await pc.setRemoteDescription(offer);
+  pc.close();
+  await promise_rejects_dom(t, 'InvalidStateError', pc.createAnswer());
+}, 'createAnswer() when connection is closed should reject with InvalidStateError');
 
 </script>
diff --git a/third_party/blink/web_tests/fast/dom/viewport/resize-event-fired-window-resized.html b/third_party/blink/web_tests/fast/dom/viewport/resize-event-fired-window-resized.html
index 03732d1..4a051e9 100644
--- a/third_party/blink/web_tests/fast/dom/viewport/resize-event-fired-window-resized.html
+++ b/third_party/blink/web_tests/fast/dom/viewport/resize-event-fired-window-resized.html
@@ -5,11 +5,7 @@
   var numCallsScroll = 0;
   var numCallsResize = 0;
 
-  var t = async_test('verify that the resize events get fired when the window is resized.');
-
-  window.onload = t.step_func(function() {
-    testRunner.useUnfortunateSynchronousResizeMode();
-
+  promise_test(async () => {
     // Turn off smooth scrolling.
     internals.settings.setScrollAnimatorEnabled(false);
 
@@ -21,20 +17,22 @@
       numCallsResize++;
     });
 
+    // Request resize, and then wait for an animation frame to ensure
+    // there was only one resize event.
+    var resizePromise = new Promise(resolve => window.onresize = resolve);
     window.resizeTo(window.outerWidth - 24, window.outerHeight - 24);
-    requestAnimationFrame(function() {
-      t.step(function() {
-        assert_equals(numCallsScroll, 0, "resize 1 doesn't fire scroll event");
-        assert_equals(numCallsResize, 1, "resize 1 fires resize event");
-      });
-      window.resizeTo(window.outerWidth + 24, window.outerHeight + 24);
-      requestAnimationFrame(function() {
-        t.step(function() {
-          assert_equals(numCallsScroll, 0, "resize 2 doesn't fire scroll event");
-          assert_equals(numCallsResize, 2, "resize 2 fires resize event");
-          t.done();
-        });
-      });
-    });
+    await resizePromise;
+
+    await new Promise(resolve => requestAnimationFrame(resolve));
+    assert_equals(numCallsScroll, 0, "resize 1 doesn't fire scroll event");
+    assert_equals(numCallsResize, 1, "resize 1 fires resize event");
+
+    var resizePromise = new Promise(resolve => window.onresize = resolve);
+    window.resizeTo(window.outerWidth + 24, window.outerHeight + 24);
+    await resizePromise;
+
+    await new Promise(resolve => requestAnimationFrame(resolve));
+    assert_equals(numCallsScroll, 0, "resize 2 doesn't fire scroll event");
+    assert_equals(numCallsResize, 2, "resize 2 fires resize event");
   });
 </script>
diff --git a/third_party/blink/web_tests/paint/invalidation/resize-iframe-text.html b/third_party/blink/web_tests/paint/invalidation/resize-iframe-text.html
index 5359dda..8ddb76f7 100644
--- a/third_party/blink/web_tests/paint/invalidation/resize-iframe-text.html
+++ b/third_party/blink/web_tests/paint/invalidation/resize-iframe-text.html
@@ -6,19 +6,23 @@
 // otherwise be promoted to rootScroller which changes painting and
 // invalidation.
 if (window.internals)
-  internals.runtimeFlags.implicitRootScrollerEnabled = false;
-if (window.testRunner)
-  testRunner.useUnfortunateSynchronousResizeMode();
+    internals.runtimeFlags.implicitRootScrollerEnabled = false;
+window.testIsAsync = true;
 onload = function() {
-  runAfterLayoutAndPaint(function() {
+  runAfterLayoutAndPaint(async function() {
     // Use smaller size because window.resizeTo/By() will fail if the size is
     // bigger than the screen size.
+    var resizePromise = new Promise(resolve => window.onresize = resolve);
     window.resizeTo(500, 200);
+    await resizePromise;
     runRepaintAndPixelTest();
   });
 };
-function repaintTest() {
+async function repaintTest() {
+  var resizePromise = new Promise(resolve => window.onresize = resolve);
   window.resizeBy(0, 200);
+  await resizePromise;
+  finishRepaintTest();
 }
 </script>
 Test passes if you see "Success" after window resizes.
diff --git a/third_party/blink/web_tests/paint/invalidation/scroll/scrollbar-damage-and-full-viewport-repaint.html b/third_party/blink/web_tests/paint/invalidation/scroll/scrollbar-damage-and-full-viewport-repaint.html
index fd8242f..f224f47f 100644
--- a/third_party/blink/web_tests/paint/invalidation/scroll/scrollbar-damage-and-full-viewport-repaint.html
+++ b/third_party/blink/web_tests/paint/invalidation/scroll/scrollbar-damage-and-full-viewport-repaint.html
@@ -19,17 +19,16 @@
 </style>
 <script src="../resources/text-based-repaint.js" type="text/javascript"></script>
 <script>
-if (window.testRunner) {
-    testRunner.useUnfortunateSynchronousResizeMode();
-}
 function repaintTest() {
     // Invalidation of horizontal scrollbar should be tracked.
     document.getElementById('child').style.width = '2000px';
 }
-window.onload = function() {
+window.onload = async function() {
     // Trigger a full viewport repaint to test if scrollbar damages are cleared
     // even if we shortcut children invalidations.
+    var resizePromise = new Promise(resolve => window.onresize = resolve);
     window.resizeTo(1000, 600);
+    await resizePromise;
     // Invalidation of vertical scrollbar before the repaint test should not be tracked during repaintTest().
     document.getElementById('child').style.height = '2000px';
     runRepaintAndPixelTest();
diff --git a/third_party/blink/web_tests/platform/generic/external/wpt/webrtc/RTCPeerConnection-createAnswer-expected.txt b/third_party/blink/web_tests/platform/generic/external/wpt/webrtc/RTCPeerConnection-createAnswer-expected.txt
index 96fba15..427284c 100644
--- a/third_party/blink/web_tests/platform/generic/external/wpt/webrtc/RTCPeerConnection-createAnswer-expected.txt
+++ b/third_party/blink/web_tests/platform/generic/external/wpt/webrtc/RTCPeerConnection-createAnswer-expected.txt
@@ -1,6 +1,6 @@
 This is a testharness.js-based test.
 PASS createAnswer() with null remoteDescription should reject with InvalidStateError
 FAIL createAnswer() after setting remote description should succeed assert_false: Expect answer to not be instance of RTCSessionDescription expected false got true
-PASS createAnswer() when connection is closed reject with InvalidStateError
+PASS createAnswer() when connection is closed should reject with InvalidStateError
 Harness: the test ran to completion.
 
diff --git a/third_party/blink/web_tests/platform/mac-mac11-arm64/virtual/prerender/wpt_internal/prerender/activate-from-iframe-expected.txt b/third_party/blink/web_tests/platform/mac-mac11-arm64/virtual/prerender/wpt_internal/prerender/activate-from-iframe-expected.txt
deleted file mode 100644
index 1f067a86..0000000
--- a/third_party/blink/web_tests/platform/mac-mac11-arm64/virtual/prerender/wpt_internal/prerender/activate-from-iframe-expected.txt
+++ /dev/null
@@ -1,4 +0,0 @@
-This is a testharness.js-based test.
-PASS Navigation on the main frame initiated by window opened by an iframe opening via window.parent.location should not activate a prerendered page
-Harness: the test ran to completion.
-
diff --git a/third_party/blink/web_tests/platform/mac/virtual/prerender/wpt_internal/prerender/activate-from-iframe-expected.txt b/third_party/blink/web_tests/platform/mac-mac12-arm64/virtual/prerender/wpt_internal/prerender/activate-from-iframe-expected.txt
similarity index 100%
rename from third_party/blink/web_tests/platform/mac/virtual/prerender/wpt_internal/prerender/activate-from-iframe-expected.txt
rename to third_party/blink/web_tests/platform/mac-mac12-arm64/virtual/prerender/wpt_internal/prerender/activate-from-iframe-expected.txt
diff --git a/third_party/blink/web_tests/wpt_internal/fenced_frame/autoplay.https.html b/third_party/blink/web_tests/wpt_internal/fenced_frame/autoplay.https.html
new file mode 100644
index 0000000..92ba299
--- /dev/null
+++ b/third_party/blink/web_tests/wpt_internal/fenced_frame/autoplay.https.html
@@ -0,0 +1,25 @@
+<!DOCTYPE html>
+<title>Verify that autoplaying Web Audio from a fenced frame is blocked</title>
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="/common/utils.js"></script>
+<script src="/common/dispatcher/dispatcher.js"></script>
+<script src="resources/utils.js"></script>
+
+<body></body>
+<script>
+promise_test(async () => {
+  const frame = attachFencedFrameContext();
+
+  let audioSuspended = await frame.execute(async () => {
+    internals.settings.setAutoplayPolicy('user-gesture-required');
+    internals.runtimeFlags.autoplayIgnoresWebAudioEnabled = false;
+
+    let audioContext = new AudioContext();
+    return audioContext.state == 'suspended';
+  });
+  assert_true(audioSuspended, 'autoplay should be blocked');
+}, 'If Autoplay plocy is set to \'user-gesture-required\', '+
+      'autoplaying  should be blocked in a fenced frame '+
+      'as it\'s treated like a cross-origin subframe.');
+</script>
diff --git a/tools/metrics/histograms/enums.xml b/tools/metrics/histograms/enums.xml
index afabee54..11fc30ec 100644
--- a/tools/metrics/histograms/enums.xml
+++ b/tools/metrics/histograms/enums.xml
@@ -59224,6 +59224,7 @@
   <int value="520738365" label="OmniboxPedalsBatch2NonEnglish:enabled"/>
   <int value="520982116" label="BuiltInModuleAll:enabled"/>
   <int value="521992655" label="LauncherPlayStoreSearch:disabled"/>
+  <int value="522013077" label="LinkCapturingAutoDisplayIntentPicker:disabled"/>
   <int value="529235584" label="PhoneHub:enabled"/>
   <int value="529665808"
       label="AutofillEnableVirtualCardManagementInDesktopSettingsPage:disabled"/>
@@ -59924,6 +59925,7 @@
   <int value="988781221" label="SyncSetupFriendlySettings:disabled"/>
   <int value="988981463" label="ImageCaptureAPI:enabled"/>
   <int value="989062160" label="ModuleScriptsImportMetaUrl:enabled"/>
+  <int value="989740984" label="BorealisStorageBallooning:enabled"/>
   <int value="990380525"
       label="AutofillRationalizeStreetAddressAndAddressLine:enabled"/>
   <int value="991462028"
@@ -60213,6 +60215,7 @@
   <int value="1168226627" label="OmniboxMaxZeroSuggestMatches:enabled"/>
   <int value="1169418814" label="ManualFallbacksFilling:enabled"/>
   <int value="1170030686" label="BookmarkBottomSheet:enabled"/>
+  <int value="1172226600" label="BorealisStorageBallooning:disabled"/>
   <int value="1173244409" label="AutofillUseMobileLabelDisambiguation:enabled"/>
   <int value="1174088940" label="enable-wasm"/>
   <int value="1176183341" label="SearchHistoryLink:enabled"/>
@@ -60591,6 +60594,7 @@
   <int value="1413158119" label="WebRtcRemoteEventLog:disabled"/>
   <int value="1413334779" label="WebPaymentsMinimalUI:enabled"/>
   <int value="1413948819" label="NupPrinting:enabled"/>
+  <int value="1414652547" label="LinkCapturingAutoDisplayIntentPicker:enabled"/>
   <int value="1414918327" label="enable-accelerated-video-decode"/>
   <int value="1416592483" label="ash-enable-mirrored-screen"/>
   <int value="1416970206" label="ArcGameModeFeature:disabled"/>
@@ -92804,7 +92808,7 @@
   <int value="1" label="Tab hidden before a frame is presented"/>
   <int value="2" label="Presentation failure"/>
   <int value="3" label="Tab shown twice without being hidden"/>
-  <int value="4" label="Unhandled compositor state"/>
+  <int value="4" label="Unhandled compositor state (deprecated)"/>
 </enum>
 
 <enum name="TabUnderAction">
diff --git a/tools/metrics/histograms/metadata/compositing/histograms.xml b/tools/metrics/histograms/metadata/compositing/histograms.xml
index 280384d..6f95a0a 100644
--- a/tools/metrics/histograms/metadata/compositing/histograms.xml
+++ b/tools/metrics/histograms/metadata/compositing/histograms.xml
@@ -1409,21 +1409,6 @@
   </summary>
 </histogram>
 
-<histogram name="Graphics.Smoothness.PerSession.AveragePercentDroppedFrames"
-    units="%" expires_after="2022-06-05">
-  <owner>sadrul@chromium.org</owner>
-  <owner>graphics-dev@chromium.org</owner>
-  <summary>
-    Tracks the percent of dropped frames. The metric is reported once per
-    page-load when the page closes.
-
-    AveragePercentDroppedFrames is measured by tracking the number of frames
-    which were not displayed on screen out of the total number of frames
-    expected to be produced and displayed. In other words, the lower this number
-    is, the smoother experience.
-  </summary>
-</histogram>
-
 <histogram
     name="Graphics.Smoothness.PerSession.MaxPercentDroppedFrames_1sWindow"
     units="%" expires_after="2022-12-04">
diff --git a/tools/perf/core/perfetto_binary_roller/binary_deps.json b/tools/perf/core/perfetto_binary_roller/binary_deps.json
index 524dcca..1e2f2506 100644
--- a/tools/perf/core/perfetto_binary_roller/binary_deps.json
+++ b/tools/perf/core/perfetto_binary_roller/binary_deps.json
@@ -5,24 +5,24 @@
             "full_remote_path": "chromium-telemetry/perfetto_binaries/trace_processor_shell/linux_arm64/49b4b5dcbc312d8d2c3751cf29238b8efeb4e494/trace_processor_shell"
         },
         "win": {
-            "hash": "b079db252b8dd239324cc0724c21b72d72fe7775",
-            "full_remote_path": "chromium-telemetry/perfetto_binaries/trace_processor_shell/win/b6fc104b800da83157d1e45eb87f94efe82f0022/trace_processor_shell.exe"
+            "hash": "188228882b53dc6e7ed37b8781159cdcea646b93",
+            "full_remote_path": "chromium-telemetry/perfetto_binaries/trace_processor_shell/win/b1989b0ff009c79d1d9e3f6b13b2e017ba2e5c9d/trace_processor_shell.exe"
         },
         "linux_arm": {
             "hash": "58893933be305d3bfe0a72ebebcacde2ac3ca893",
             "full_remote_path": "chromium-telemetry/perfetto_binaries/trace_processor_shell/linux_arm/49b4b5dcbc312d8d2c3751cf29238b8efeb4e494/trace_processor_shell"
         },
         "mac": {
-            "hash": "7db84be27e17cdc421d71c50746795bc47ccc0af",
-            "full_remote_path": "chromium-telemetry/perfetto_binaries/trace_processor_shell/mac/80dd4d929a592772a530e67c30d9f76bb63f5219/trace_processor_shell"
+            "hash": "183837742259a7c55bf182c1b5a43fb16c4a4a10",
+            "full_remote_path": "chromium-telemetry/perfetto_binaries/trace_processor_shell/mac/b1989b0ff009c79d1d9e3f6b13b2e017ba2e5c9d/trace_processor_shell"
         },
         "mac_arm64": {
             "hash": "e1ad4861384b06d911a65f035317914b8cc975c6",
             "full_remote_path": "perfetto-luci-artifacts/v25.0/mac-arm64/trace_processor_shell"
         },
         "linux": {
-            "hash": "922ada21ed15c13ca9d48eecf738da8d9f9812bb",
-            "full_remote_path": "chromium-telemetry/perfetto_binaries/trace_processor_shell/linux/d94e4dc359a4d002a2fbf4bd11d22b7ecd1b2466/trace_processor_shell"
+            "hash": "0fc5f521a0d6d38630e7ef3549b42ed07dab4e40",
+            "full_remote_path": "chromium-telemetry/perfetto_binaries/trace_processor_shell/linux/b1989b0ff009c79d1d9e3f6b13b2e017ba2e5c9d/trace_processor_shell"
         }
     },
     "power_profile.sql": {
diff --git a/ui/file_manager/BUILD.gn b/ui/file_manager/BUILD.gn
index 46dfcaa..ec59114 100644
--- a/ui/file_manager/BUILD.gn
+++ b/ui/file_manager/BUILD.gn
@@ -278,17 +278,22 @@
   outputs = [ "$preprocess_folder/{{source_target_relative}}" ]
 }
 
+copy("copy_ts_test") {
+  sources = ts_test_files
+  outputs = [ "$preprocess_folder/{{source_target_relative}}" ]
+}
+
 html_to_wrapper("html_wrapper_files") {
   in_files = ts_templates
 }
 
 ts_library("test_build_ts") {
   testonly = true
-  root_dir = "."
-  out_dir = "$target_gen_dir/tsc_test"
+  root_dir = preprocess_folder
+  out_dir = "$target_gen_dir/tsc"
   tsconfig_base = "tsconfig_base.json"
 
-  in_files = [ "file_manager/widgets/xf_breadcrumbs_unittest.ts" ]
+  in_files = ts_test_files
 
   path_mappings = [
     # for chai_assert.js.
@@ -298,6 +303,7 @@
   ]
 
   deps = [ ":build_ts" ]
+  extra_deps = [ ":copy_ts_test" ]
 }
 
 # GRD for test files.
diff --git a/ui/file_manager/file_manager/background/js/test_util.js b/ui/file_manager/file_manager/background/js/test_util.js
index 3d10e11..7d71bb5 100644
--- a/ui/file_manager/file_manager/background/js/test_util.js
+++ b/ui/file_manager/file_manager/background/js/test_util.js
@@ -474,7 +474,7 @@
 test.util.sync.getBreadcrumbPath = contentWindow => {
   const doc = contentWindow.document;
   const breadcrumb = doc.querySelector('#location-breadcrumbs bread-crumb') ||
-      doc.querySelector('#location-breadcrumbs xf-breadcrumbs');
+      doc.querySelector('#location-breadcrumbs xf-breadcrumb');
 
   if (!breadcrumb) {
     return '';
diff --git a/ui/file_manager/file_manager/common/js/util.js b/ui/file_manager/file_manager/common/js/util.js
index 774b431..aac66e98 100644
--- a/ui/file_manager/file_manager/common/js/util.js
+++ b/ui/file_manager/file_manager/common/js/util.js
@@ -1735,5 +1735,11 @@
  */
 class UserCanceledError extends Error {}
 
+/**
+ * Returns whether the given value is null or undefined.
+ * @param {*} value
+ * @returns {boolean}
+ */
+util.isNullOrUndefined = (value) => value === null || value === undefined;
 
 export {util, UserCanceledError};
diff --git a/ui/file_manager/file_manager/containers/breadcrumbs_container.ts b/ui/file_manager/file_manager/containers/breadcrumb_container.ts
similarity index 76%
rename from ui/file_manager/file_manager/containers/breadcrumbs_container.ts
rename to ui/file_manager/file_manager/containers/breadcrumb_container.ts
index 413ad09c..fdd267d 100644
--- a/ui/file_manager/file_manager/containers/breadcrumbs_container.ts
+++ b/ui/file_manager/file_manager/containers/breadcrumb_container.ts
@@ -2,21 +2,21 @@
 // Use of this source code is governed by a BSD-style license that can be
 // found in the LICENSE file.
 
-import '../widgets/breadcrumbs.js';
+import '../widgets/xf_breadcrumb.js';
 
 import {metrics} from '../common/js/metrics.js';
 import {CurrentDirectory, PropStatus, State} from '../externs/ts/state.js';
 import {changeDirectory} from '../state/actions.js';
 import {FileKey} from '../state/file_key.js';
 import {getStore, Store} from '../state/store.js';
-import {BREADCRUMB_CLICKED, BreadcrumbClickedEvent} from '../widgets/breadcrumbs.js';
+import {BREADCRUMB_CLICKED, BreadcrumbClickedEvent} from '../widgets/xf_breadcrumb.js';
 
 /**
  * The controller of breadcrumb. The Breadcrumb element only renders a given
  * path. This controller component is responsible for constructing the path
  * and passing it to the Breadcrumb element.
  */
-export class BreadcrumbsContainer {
+export class BreadcrumbContainer {
   private store_: Store;
   private currentFileKey_: FileKey|null;
   private container_: HTMLElement;
@@ -45,32 +45,31 @@
   }
 
   private hide_() {
-    const breadcrumbs = document.querySelector('xf-breadcrumbs');
-    if (breadcrumbs) {
-      breadcrumbs.hidden = true;
+    const breadcrumb = document.querySelector('xf-breadcrumb');
+    if (breadcrumb) {
+      breadcrumb.hidden = true;
     }
   }
 
   private show_(currentDir?: CurrentDirectory) {
-    let breadcrumbs = document.querySelector('xf-breadcrumbs');
-    if (!breadcrumbs) {
-      breadcrumbs = document.createElement('xf-breadcrumbs');
-      breadcrumbs.id = 'breadcrumbs';
-      breadcrumbs.addEventListener(
-          BREADCRUMB_CLICKED, this.breadcrumbsClick_.bind(this));
-      this.container_.appendChild(breadcrumbs);
+    let breadcrumb = document.querySelector('xf-breadcrumb');
+    if (!breadcrumb) {
+      breadcrumb = document.createElement('xf-breadcrumb');
+      breadcrumb.addEventListener(
+          BREADCRUMB_CLICKED, this.breadcrumbClick_.bind(this));
+      this.container_.appendChild(breadcrumb);
     }
 
     const path = !currentDir ?
         '' :
         currentDir.pathComponents.map(p => p.label).join('/');
-    breadcrumbs!.path = path;
+    breadcrumb!.path = path;
     this.currentFileKey_ = currentDir ? currentDir.key : null;
     this.pathKeys_ =
         currentDir ? currentDir.pathComponents.map(p => p.key) : [];
   }
 
-  private breadcrumbsClick_(event: BreadcrumbClickedEvent) {
+  private breadcrumbClick_(event: BreadcrumbClickedEvent) {
     const index = Number(event.detail.partIndex);
     if (isNaN(index) || index < 0) {
       return;
diff --git a/ui/file_manager/file_manager/foreground/js/banner_controller.js b/ui/file_manager/file_manager/foreground/js/banner_controller.js
index f5c6b847..b3715fd 100644
--- a/ui/file_manager/file_manager/foreground/js/banner_controller.js
+++ b/ui/file_manager/file_manager/foreground/js/banner_controller.js
@@ -6,6 +6,7 @@
 
 import {getSizeStats} from '../../common/js/api.js';
 import {AsyncUtil} from '../../common/js/async_util.js';
+import {util} from '../../common/js/util.js';
 import {VolumeManagerCommon} from '../../common/js/volume_manager_types.js';
 import {xfm} from '../../common/js/xfm.js';
 import {Crostini} from '../../externs/background/crostini.js';
@@ -902,7 +903,8 @@
   if (!threshold || !sizeStats) {
     return false;
   }
-  if (!sizeStats.remainingSize || !sizeStats.totalSize) {
+  if (util.isNullOrUndefined(sizeStats.remainingSize) ||
+      util.isNullOrUndefined(sizeStats.totalSize)) {
     return false;
   }
   if (threshold.minSize < sizeStats.remainingSize) {
diff --git a/ui/file_manager/file_manager/foreground/js/banner_util_unittest.js b/ui/file_manager/file_manager/foreground/js/banner_util_unittest.js
index e4f181a9..d2c81218 100644
--- a/ui/file_manager/file_manager/foreground/js/banner_util_unittest.js
+++ b/ui/file_manager/file_manager/foreground/js/banner_util_unittest.js
@@ -337,11 +337,16 @@
     totalSize: 20 * 1024 * 1024 * 1024,     // 20 GB
     remainingSize: 1 * 1024 * 1024 * 1024,  // 1 GB
   };
+  const testSizeStatsFull = {
+    totalSize: 20 * 1024 * 1024 * 1024,  // 20 GB
+    remainingSize: 0,                    // full
+  };
 
   assertFalse(isBelowThreshold(undefined, undefined));
   assertFalse(isBelowThreshold(testMinSizeThreshold, undefined));
   assertFalse(isBelowThreshold(testMinRatioThreshold, undefined));
   assertFalse(isBelowThreshold(undefined, testSizeStats));
+  assertTrue(isBelowThreshold(testMinRatioThreshold, testSizeStatsFull));
 }
 
 /**
diff --git a/ui/file_manager/file_manager/foreground/js/file_watcher.js b/ui/file_manager/file_manager/foreground/js/file_watcher.js
index af711d3..b5053e7e 100644
--- a/ui/file_manager/file_manager/foreground/js/file_watcher.js
+++ b/ui/file_manager/file_manager/foreground/js/file_watcher.js
@@ -55,7 +55,7 @@
 
       if (eventURL === watchedDirURL) {
         fireWatcherDirectoryChanged(event.changedFiles);
-      } else if (watchedDirURL.match(new RegExp('^' + eventURL))) {
+      } else if (watchedDirURL.startsWith(eventURL)) {
         // When watched directory is deleted by the change in parent directory,
         // notify it as watcher directory changed.
         this.watchedDirectoryEntry_.getDirectory(
diff --git a/ui/file_manager/file_manager/foreground/js/ui/file_manager_ui.js b/ui/file_manager/file_manager/foreground/js/ui/file_manager_ui.js
index 9855fff..7354a20 100644
--- a/ui/file_manager/file_manager/foreground/js/ui/file_manager_ui.js
+++ b/ui/file_manager/file_manager/foreground/js/ui/file_manager_ui.js
@@ -12,7 +12,7 @@
 import {DialogType} from '../../../common/js/dialog_type.js';
 import {str, strf, util} from '../../../common/js/util.js';
 import {AllowedPaths} from '../../../common/js/volume_manager_types.js';
-import {BreadcrumbsContainer} from '../../../containers/breadcrumbs_container.js';
+import {BreadcrumbContainer} from '../../../containers/breadcrumb_container.js';
 import {VolumeManager} from '../../../externs/volume_manager.js';
 import {FilesPasswordDialog} from '../../elements/files_password_dialog.js';
 import {FilesToast} from '../../elements/files_toast.js';
@@ -171,7 +171,7 @@
 
     /**
      * Breadcrumb controller.
-     * @type {BreadcrumbController|BreadcrumbsContainer}
+     * @type {BreadcrumbController|BreadcrumbContainer}
      */
     this.breadcrumbController = null;
 
@@ -444,7 +444,8 @@
 
     // Breadcrumb controller.
     if (util.isFilesAppExperimental()) {
-      this.breadcrumbController = new BreadcrumbsContainer(
+      // TODO: Rename location-breadcrumbs to location-breadcrumb.
+      this.breadcrumbController = new BreadcrumbContainer(
           queryRequiredElement('#location-breadcrumbs', this.element));
     } else {
       this.breadcrumbController = new BreadcrumbController(
diff --git a/ui/file_manager/file_manager/widgets/breadcrumbs.html b/ui/file_manager/file_manager/widgets/xf_breadcrumb.html
similarity index 100%
rename from ui/file_manager/file_manager/widgets/breadcrumbs.html
rename to ui/file_manager/file_manager/widgets/xf_breadcrumb.html
diff --git a/ui/file_manager/file_manager/widgets/breadcrumbs.ts b/ui/file_manager/file_manager/widgets/xf_breadcrumb.ts
similarity index 96%
rename from ui/file_manager/file_manager/widgets/breadcrumbs.ts
rename to ui/file_manager/file_manager/widgets/xf_breadcrumb.ts
index 0ad67aa..a29d14e 100644
--- a/ui/file_manager/file_manager/widgets/breadcrumbs.ts
+++ b/ui/file_manager/file_manager/widgets/xf_breadcrumb.ts
@@ -4,16 +4,16 @@
 
 import {CrActionMenuElement} from 'chrome://resources/cr_elements/cr_action_menu/cr_action_menu.js';
 
-import {getTemplate} from './breadcrumbs.html.js';
+import {getTemplate} from './xf_breadcrumb.html.js';
 
 /**
- * Breadcrumbs displays the current directory path.
+ * Breadcrumb displays the current directory path.
  *
- * It emits the `BREADCRUMB_CLICKED` event when any part of the breadcrumbs is
+ * It emits the `BREADCRUMB_CLICKED` event when any part of the breadcrumb is
  * clicked.
  */
-export class Breadcrumbs extends HTMLElement {
-  /** BreadCrumb path parts.  */
+export class XfBreadcrumb extends HTMLElement {
+  /** Breadcrumb path parts.  */
   private parts_: string[];
 
   constructor() {
@@ -290,7 +290,7 @@
 export const BREADCRUMB_CLICKED = 'breadcrumb_clicked';
 
 /**
- * `partIndex` is the index of the breadcrumbs path e.g.:
+ * `partIndex` is the index of the breadcrumb path e.g.:
  * "/My files/Downloads/sub-folder" indexes:
  *   0        1         2
  */
@@ -302,8 +302,8 @@
   }
 
   interface HTMLElementTagNameMap {
-    'xf-breadcrumbs': Breadcrumbs;
+    'xf-breadcrumb': XfBreadcrumb;
   }
 }
 
-customElements.define('xf-breadcrumbs', Breadcrumbs);
+customElements.define('xf-breadcrumb', XfBreadcrumb);
diff --git a/ui/file_manager/file_manager/widgets/xf_breadcrumb_unittest.ts b/ui/file_manager/file_manager/widgets/xf_breadcrumb_unittest.ts
new file mode 100644
index 0000000..26842c2
--- /dev/null
+++ b/ui/file_manager/file_manager/widgets/xf_breadcrumb_unittest.ts
@@ -0,0 +1,854 @@
+// 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.
+
+import {assert} from 'chrome://resources/js/assert_ts.js';
+import {assertEquals, assertFalse, assertGE, assertGT, assertNotEquals, assertTrue} from 'chrome://webui-test/chai_assert.js';
+
+import {waitUntil} from '../common/js/test_error_reporting.js';
+
+import {BREADCRUMB_CLICKED, BreadcrumbClickedEvent, XfBreadcrumb} from './xf_breadcrumb.js';
+
+/**
+ * Creates new <xf-breadcrumb> element for each test. Asserts it has no initial
+ * path using the element.path getter.
+ */
+export function setUp() {
+  document.body.innerHTML = '<xf-breadcrumb></xf-breadcrumb>';
+  const breadcrumb = document.querySelector('xf-breadcrumb');
+  assertEquals('', breadcrumb!.path);
+}
+
+/** Returns the <xf-breadcrumb> element. */
+function getBreadcrumb(): XfBreadcrumb {
+  const element = document.querySelector('xf-breadcrumb');
+  assertNotEquals('none', window.getComputedStyle(element!).display);
+  assertFalse(element!.hasAttribute('hidden'));
+  return element!;
+}
+
+/**
+ * Returns the <xf-breadcrumb> child button elements. There are 4 main buttons
+ * and one elider button (so at least 5) plus optional drop-down menu buttons.
+ */
+function getAllBreadcrumbButtons(): HTMLButtonElement[] {
+  const buttons = getBreadcrumb().shadowRoot!.querySelectorAll('button');
+  assertGE(buttons.length, 5, 'too few buttons');
+  return Array.from(buttons) as HTMLButtonElement[];
+}
+
+/**
+ * Returns the not-hidden <xf-breadcrumb> main button elements. The breadcrumb
+ * main buttons have an id, all other breadcrumb buttons do not.
+ */
+function getVisibleBreadcrumbMainButtons(): HTMLButtonElement[] {
+  const notHiddenMain = 'button[id]:not([hidden])';
+  const buttons = getBreadcrumb().shadowRoot!.querySelectorAll(notHiddenMain);
+  return Array.from(buttons) as HTMLButtonElement[];
+}
+
+/** Returns the last not-hidden <xf-breadcrumb> main button element. */
+function getLastVisibleBreadcrumbMainButton(): HTMLButtonElement {
+  return getVisibleBreadcrumbMainButtons().pop() as HTMLButtonElement;
+}
+
+/** Returns the <xf-breadcrumb> elider button element. */
+function getBreadcrumbEliderButton(): HTMLButtonElement {
+  const elider = 'button[elider]';
+  const button = getBreadcrumb().shadowRoot!.querySelectorAll(elider);
+  assertEquals(1, button.length, 'invalid elider button');
+  return button[0] as HTMLButtonElement;
+}
+
+/** Returns the <xf-breadcrumb> drop-down menu button elements. */
+function getBreadcrumbMenuButtons(): HTMLButtonElement[] {
+  const menuButton = 'cr-action-menu button';
+  const buttons = getBreadcrumb().shadowRoot!.querySelectorAll(menuButton);
+  return Array.from(buttons) as HTMLButtonElement[];
+}
+
+/**
+ * Returns <xf-breadcrumb> main button visual state.
+ * @param button Main button (these have an id).
+ * @param i Number to assign to the button.
+ */
+function getMainButtonState(button: HTMLButtonElement, i: number): string {
+  const display = window.getComputedStyle(button).display;
+
+  let result = i + ': display:' + display + ' id=' + button.id;
+  if (!button.hasAttribute('hidden')) {
+    result += ' text=[' + button.textContent + ']';
+  } else {
+    assertEquals('none', display);
+    result += ' hidden';
+  }
+
+  assertTrue(!!(button.id));
+  return result;
+}
+
+/**
+ * Returns <xf-breadcrumb> elider button visual state.
+ * @param button Elider button.
+ * @param i Number to assign to the button.
+ */
+function getEliderButtonState(button: HTMLButtonElement, i: number): string {
+  const display = window.getComputedStyle(button).display;
+
+  const result = i + ': display:' + display;
+  const attributes: string[] = [];
+  for (const value of button.getAttributeNames().values()) {
+    if (value === 'aria-expanded') {  // drop-down menu: opened || closed
+      attributes.push(value + '=' + button.getAttribute('aria-expanded'));
+    } else if (value === 'hidden') {
+      assertEquals('none', display);
+      attributes.push(value);
+    } else if (value !== 'elider') {
+      attributes.push(value);
+    }
+  }
+
+  assertFalse(!!button.id, 'elider button should not have an id');
+  assertTrue(button.hasAttribute('elider'));
+  return result + ' elider[' + attributes.sort() + ']';
+}
+
+/**
+ * Returns <xf-breadcrumb> drop-down menu button visual state.
+ * @param button Drop-down menu button.
+ */
+function getDropDownMenuButtonState(button: HTMLButtonElement): string {
+  const display = window.getComputedStyle(button).display;
+
+  let result = `${button.classList.toString()}: display:` + display;
+  if (!button.hasAttribute('hidden')) {
+    result += ' text=[' + button.textContent + ']';
+  } else {
+    assertEquals('none', display);
+    result += ' hidden';
+  }
+
+  assertFalse(!!button.id, 'drop-down buttons should not have an id');
+  assertTrue(button.classList.contains('dropdown-item'));
+  return result;
+}
+
+/** Returns the <xf-breadcrumb> buttons visual state. */
+function getBreadcrumbButtonState(): string {
+  const parts: string[] = [];
+  const menus: string[] = [];
+
+  const buttons = getAllBreadcrumbButtons();
+  let number = 0;
+  buttons.forEach((button) => {
+    if (button.id) {  // Main buttons have an id.
+      parts.push(getMainButtonState(button, ++number));
+    } else if (button.hasAttribute('elider')) {  // Elider button.
+      parts.push(getEliderButtonState(button, ++number));
+    } else {  // A drop-down menu button.
+      menus.push(getDropDownMenuButtonState(button));
+    }
+  });
+
+  // Elider should only display for paths with more than 4 parts.
+  if (!getBreadcrumbEliderButton().hasAttribute('hidden')) {
+    assertGT(getBreadcrumb().parts.length, 4);
+  }
+
+  // The 'last' main button displayed should always be [disabled].
+  const last = getLastVisibleBreadcrumbMainButton();
+  if (getBreadcrumb().path !== '') {
+    assertTrue(last.hasAttribute('disabled'));
+  }
+
+  if (menus.length) {
+    return [parts[0], parts[1]].concat(menus, parts.slice(2)).join(' ');
+  }
+
+  return parts.join(' ');
+}
+
+/** Sets and Waits for the path to updated in the DOM. */
+async function setAndWaitPath(path: string): Promise<void> {
+  const element = getBreadcrumb();
+  element.path = path;
+  return waitUntil(() => element.getAttribute('path')! === path);
+}
+
+/**
+ * Tests rendering an empty path.
+ */
+export async function testBreadcrumbEmptyPath(done: () => void) {
+  const element = getBreadcrumb();
+
+  // Set path.
+  await setAndWaitPath('');
+
+  // clang-format off
+  const expect = element.path +
+      ' 1: display:none id=first hidden' +
+      ' 2: display:none elider[aria-expanded=false,aria-haspopup,aria-label,hidden]' +
+      ' 3: display:none id=second hidden' +
+      ' 4: display:none id=third hidden' +
+      ' 5: display:none id=fourth hidden';
+  // clang-format on
+
+  const path = element.parts.join('/');
+  assertEquals(expect, path + ' ' + getBreadcrumbButtonState());
+
+  done();
+}
+
+/**
+ * Tests rendering a one element path.
+ */
+export async function testBreadcrumbOnePartPath(done: () => void) {
+  const element = getBreadcrumb();
+
+  // Set path.
+  await setAndWaitPath('A');
+
+  // clang-format off
+  const expect = element.path +
+    ' 1: display:block id=first text=[A]' +
+    ' 2: display:none elider[aria-expanded=false,aria-haspopup,aria-label,hidden]' +
+    ' 3: display:none id=second hidden' +
+    ' 4: display:none id=third hidden' +
+    ' 5: display:none id=fourth hidden';
+  // clang-format on
+
+  const path = element.parts.join('/');
+  assertEquals(expect, path + ' ' + getBreadcrumbButtonState());
+
+  done();
+}
+
+/** Tests rendering a two element path.  */
+export async function testBreadcrumbTwoPartPath(done: () => void) {
+  const element = getBreadcrumb();
+
+  // Set path.
+  await setAndWaitPath('A/B');
+
+  // clang-format off
+  const expect = element.path +
+    ' 1: display:block id=first text=[A]' +
+    ' 2: display:none elider[aria-expanded=false,aria-haspopup,aria-label,hidden]' +
+    ' 3: display:none id=second hidden' +
+    ' 4: display:none id=third hidden' +
+    ' 5: display:block id=fourth text=[B]';
+  // clang-format on
+
+  const path = element.parts.join('/');
+  assertEquals(expect, path + ' ' + getBreadcrumbButtonState());
+
+  done();
+}
+
+/** Tests rendering a three element path.  */
+export async function testBreadcrumbThreePartPath(done: () => void) {
+  const element = getBreadcrumb();
+
+  // Set path.
+  await setAndWaitPath('A/B/C');
+
+  // clang-format off
+  const expect = element.path +
+    ' 1: display:block id=first text=[A]' +
+    ' 2: display:none elider[aria-expanded=false,aria-haspopup,aria-label,hidden]' +
+    ' 3: display:none id=second hidden' +
+    ' 4: display:block id=third text=[B]' +
+    ' 5: display:block id=fourth text=[C]';
+  // clang-format on
+
+  const path = element.parts.join('/');
+  assertEquals(expect, path + ' ' + getBreadcrumbButtonState());
+
+  done();
+}
+
+/**
+ * Tests rendering a four element path.
+ */
+export async function testBreadcrumbFourPartPath(done: () => void) {
+  const element = getBreadcrumb();
+
+  // Set path.
+  await setAndWaitPath('A/B/C/D');
+
+  // clang-format off
+  const expect = element.path +
+    ' 1: display:block id=first text=[A]' +
+    ' 2: display:none elider[aria-expanded=false,aria-haspopup,aria-label,hidden]' +
+    ' 3: display:block id=second text=[B]' +
+    ' 4: display:block id=third text=[C]' +
+    ' 5: display:block id=fourth text=[D]';
+  // clang-format on
+
+  const path = element.parts.join('/');
+  assertEquals(expect, path + ' ' + getBreadcrumbButtonState());
+
+  done();
+}
+
+/**
+ * Tests rendering a path of more than four parts. The elider button should be
+ * visible (not hidden and have display).
+ *
+ * The drop-down menu button should contain the elided path parts and can have
+ * display, but are invisible because the elider drop-down menu is closed.
+ */
+export async function testBreadcrumbMoreThanFourElementPathsElide(
+    done: () => void) {
+  const element = getBreadcrumb();
+
+  // Set path.
+  await setAndWaitPath('A/B/C/D/E/F');
+
+  // Elider button drop-down menu should be in the 'closed' state.
+  const elider = getBreadcrumbEliderButton();
+  assertEquals('false', elider.getAttribute('aria-expanded'));
+
+  // clang-format off
+  const expect = element.path +
+     ' 1: display:block id=first text=[A]' +
+     ' 2: display:flex elider[aria-expanded=false,aria-haspopup,aria-label]' +
+     ' dropdown-item: display:block text=[B]' +
+     ' dropdown-item: display:block text=[C]' +
+     ' dropdown-item: display:block text=[D]' +
+     ' 3: display:none id=second hidden' +
+     ' 4: display:block id=third text=[E]' +
+     ' 5: display:block id=fourth text=[F]';
+  // clang-format on
+
+  const path = element.parts.join('/');
+  assertEquals(expect, path + ' ' + getBreadcrumbButtonState());
+
+  done();
+}
+
+/**
+ * Tests rendering a path where the path parts have escaped characters. Again,
+ * the elider should be visible (not hidden and have display) because the path
+ * has more than four parts.
+ *
+ * The drop-down menu button should contain the elided path parts and can have
+ * display, but are invisible because the elider drop-down menu is closed.
+ */
+export async function testBreadcrumbRendersEscapedPathParts(done: () => void) {
+  const element = getBreadcrumb();
+
+  // Set path.
+  await setAndWaitPath(
+      'A%2FA/B%2FB/C %2F/%2FD /%2F%2FE/Nexus%2FPixel %28MTP%29');
+
+  // Elider button drop-down menu should be in the 'closed' state.
+  const elider = getBreadcrumbEliderButton();
+  assertEquals('false', elider.getAttribute('aria-expanded'));
+
+  // clang-format off
+  const expect = element.path +
+     ' 1: display:block id=first text=[A/A]' +
+     ' 2: display:flex elider[aria-expanded=false,aria-haspopup,aria-label]' +
+     ' dropdown-item: display:block text=[B/B]' +
+     ' dropdown-item: display:block text=[C /]' +
+     ' dropdown-item: display:block text=[/D ]' +
+     ' 3: display:none id=second hidden' +
+     ' 4: display:block id=third text=[//E]' +
+     ' 5: display:block id=fourth text=[Nexus/Pixel (MTP)]';
+  // clang-format on
+
+  const path = element.parts.join('/');
+  assertEquals(expect, path + ' ' + getBreadcrumbButtonState());
+
+  done();
+}
+
+/**
+ * Tests rendering a path of more than four parts. The elider button should be
+ * visible and clicking it should 'open' and 'close' its drop-down menu.
+ */
+export async function
+testBreadcrumbElidedPathEliderButtonClicksOpenDropDownMenu(done: () => void) {
+  const element = getBreadcrumb();
+
+  // Set path.
+  await setAndWaitPath('A/B/C/D/E');
+
+  // Elider button drop-down menu should be in the 'closed' state.
+  const elider = getBreadcrumbEliderButton();
+  assertEquals('false', elider.getAttribute('aria-expanded'));
+
+  // Clicking the elider button should 'open' its drop-down menu.
+  assertFalse(elider.hasAttribute('hidden'));
+  elider.click();
+  assertEquals('true', elider.getAttribute('aria-expanded'));
+
+  // clang-format off
+  const opened = element.path +
+     ' 1: display:block id=first text=[A]' +
+     ' 2: display:flex elider[aria-expanded=true,aria-haspopup,aria-label]' +
+     ' dropdown-item: display:block text=[B]' +
+     ' dropdown-item: display:block text=[C]' +
+     ' 3: display:none id=second hidden' +
+     ' 4: display:block id=third text=[D]' +
+     ' 5: display:block id=fourth text=[E]';
+  // clang-format on
+
+  const path = element.parts.join('/');
+  assertEquals(opened, path + ' ' + getBreadcrumbButtonState());
+
+  // Clicking the elider again should 'close' the drop-down menu.
+  assertFalse(elider.hasAttribute('hidden'));
+  elider.click();
+  assertEquals('false', elider.getAttribute('aria-expanded'));
+
+  // clang-format off
+  const closed = element.path +
+     ' 1: display:block id=first text=[A]' +
+     ' 2: display:flex elider[aria-expanded=false,aria-haspopup,aria-label]' +
+     ' dropdown-item: display:block text=[B]' +
+     ' dropdown-item: display:block text=[C]' +
+     ' 3: display:none id=second hidden' +
+     ' 4: display:block id=third text=[D]' +
+     ' 5: display:block id=fourth text=[E]';
+  // clang-format on
+
+  assertEquals(closed, path + ' ' + getBreadcrumbButtonState());
+
+  done();
+}
+
+/**
+ * Tests that clicking on the main buttons emits a signal that indicates which
+ * part of the breadcrumb path was clicked.
+ */
+export async function testBreadcrumbMainButtonClicksEmitNumberSignal(
+    done: () => void) {
+  const element = getBreadcrumb();
+
+  // Set path.
+  await setAndWaitPath('A/B/C/D/E/F');
+
+  // clang-format off
+  const expect = element.path +
+     ' 1: display:block id=first text=[A]' +  // 1st main button
+     ' 2: display:flex elider[aria-expanded=false,aria-haspopup,aria-label]' +
+     ' dropdown-item: display:block text=[B]' +
+     ' dropdown-item: display:block text=[C]' +
+     ' dropdown-item: display:block text=[D]' +
+     ' 3: display:none id=second hidden' +
+     ' 4: display:block id=third text=[E]' +  // 2nd main button
+     ' 5: display:block id=fourth text=[F]';  // 3rd main button
+  // clang-format on
+
+  const path = element.parts.join('/');
+  assertEquals(expect, path + ' ' + getBreadcrumbButtonState());
+
+  let signal: number|null = null;
+  element.addEventListener(
+      BREADCRUMB_CLICKED, (event: BreadcrumbClickedEvent) => {
+        const index = Number(event.detail.partIndex);
+        assertEquals(typeof index, 'number');
+        signal = index;
+      });
+
+  const buttons = getVisibleBreadcrumbMainButtons();
+  assertEquals(3, buttons.length, 'three main buttons should be visible');
+
+  assert(buttons[0]);
+  assert(buttons[1]);
+  assert(buttons[2]);
+
+  signal = null;
+  assertEquals('A', buttons[0].textContent);
+  assertFalse(buttons[0].hasAttribute('disabled'));
+  buttons[0].click();
+  assertEquals(element.parts.indexOf('A'), signal);
+
+  signal = null;
+  assertEquals('E', buttons[1].textContent);
+  assertFalse(buttons[1].hasAttribute('disabled'));
+  buttons[1].click();
+  assertEquals(element.parts.indexOf('E'), signal);
+
+  signal = null;
+  assertEquals('F', buttons[2].textContent);
+  assertTrue(buttons[2].hasAttribute('disabled'));
+  buttons[2].click();  // Ignored: the last main button is always disabled.
+  assertEquals(null, signal);
+
+  done();
+}
+
+/**
+ * Tests that clicking on the menu buttons emits a signal that indicates which
+ * part of the breadcrumb path was clicked.
+ */
+export async function testBreadcrumbMenuButtonClicksEmitNumberSignal(
+    done: () => void) {
+  const element = getBreadcrumb();
+
+  // Set path.
+  await setAndWaitPath('A/B/C/D/E');
+
+  // Elider button drop-down menu should be in the 'closed' state.
+  const elider = getBreadcrumbEliderButton();
+  assertEquals('false', elider.getAttribute('aria-expanded'));
+
+  // Clicking the elider button should 'open' its drop-down menu.
+  assertFalse(elider.hasAttribute('hidden'));
+  elider.click();
+  assertEquals('true', elider.getAttribute('aria-expanded'));
+
+  // clang-format off
+  const opened = element.path +
+     ' 1: display:block id=first text=[A]' +
+     ' 2: display:flex elider[aria-expanded=true,aria-haspopup,aria-label]' +
+     ' dropdown-item: display:block text=[B]' +
+     ' dropdown-item: display:block text=[C]' +
+     ' 3: display:none id=second hidden' +
+     ' 4: display:block id=third text=[D]' +
+     ' 5: display:block id=fourth text=[E]';
+  // clang-format on
+
+  const path = element.parts.join('/');
+  assertEquals(opened, path + ' ' + getBreadcrumbButtonState());
+
+  let signal: number|null = null;
+  element.addEventListener(
+      BREADCRUMB_CLICKED, (event: BreadcrumbClickedEvent) => {
+        const index = Number(event.detail.partIndex);
+        assertEquals(typeof index, 'number');
+        signal = index;
+      });
+
+  const buttons = getBreadcrumbMenuButtons();
+  assertEquals(2, buttons.length, 'there should be two drop-down items');
+
+  assert(buttons[0]);
+  assert(buttons[1]);
+
+  signal = null;
+  assertEquals('B', buttons[0].textContent);
+  assertFalse(buttons[0].hasAttribute('disabled'));
+  buttons[0].click();
+  assertEquals(element.parts.indexOf('B'), signal);
+
+  signal = null;
+  assertEquals('C', buttons[1].textContent);
+  assertFalse(buttons[1].hasAttribute('disabled'));
+  buttons[1].click();
+  assertEquals(element.parts.indexOf('C'), signal);
+
+  done();
+}
+
+/**
+ * Tests that setting the path closes the the drop-down menu.
+ */
+export async function testBreadcrumbSetPathClosesEliderButtonDropDownMenu(
+    done: () => void) {
+  const element = getBreadcrumb();
+
+  // Set path.
+  await setAndWaitPath('A/B/C/D/E');
+
+  // Elider button drop-down menu should be in the 'closed' state.
+  const elider = getBreadcrumbEliderButton();
+  assertEquals('false', elider.getAttribute('aria-expanded'));
+
+  // Clicking the elider button should 'open' its drop-down menu.
+  assertFalse(elider.hasAttribute('hidden'));
+  elider.click();
+  assertEquals('true', elider.getAttribute('aria-expanded'));
+
+  // clang-format off
+  const opened = element.path +
+     ' 1: display:block id=first text=[A]' +
+     ' 2: display:flex elider[aria-expanded=true,aria-haspopup,aria-label]' +
+     ' dropdown-item: display:block text=[B]' +
+     ' dropdown-item: display:block text=[C]' +
+     ' 3: display:none id=second hidden' +
+     ' 4: display:block id=third text=[D]' +
+     ' 5: display:block id=fourth text=[E]';
+  // clang-format on
+
+  const first = element.parts.join('/');
+  assertEquals(opened, first + ' ' + getBreadcrumbButtonState());
+
+  // Changing the path should 'close' the drop-down menu.
+  await setAndWaitPath('F/G/H');
+
+  assertEquals('false', elider.getAttribute('aria-expanded'));
+
+  // clang-format off
+  const closed = element.path +
+    ' 1: display:block id=first text=[F]' +
+    ' 2: display:none elider[aria-expanded=false,aria-haspopup,aria-label,hidden]' +
+    ' 3: display:none id=second hidden' +
+    ' 4: display:block id=third text=[G]' +
+    ' 5: display:block id=fourth text=[H]';
+  // clang-format on
+
+  const second = element.parts.join('/');
+  assertEquals(closed, second + ' ' + getBreadcrumbButtonState());
+
+  done();
+}
+
+/**
+ * Tests that setting the path updates the <xf-breadcrumb path> attribute.
+ */
+export async function testBreadcrumbSetPathChangesElementPath(
+    done: () => void) {
+  const element = getBreadcrumb();
+
+  // Set path.
+  await setAndWaitPath('A/B/C/D/E/F');
+  assertEquals(element.path, element.getAttribute('path'));
+
+  // Change path.
+  await setAndWaitPath('G/H/I');
+  assertEquals(element.path, element.getAttribute('path'));
+
+  done();
+}
+
+/**
+ * Tests that opening and closing the elider button drop-down menu adds and
+ * removes <xf-breadcrumb checked> attribute.
+ */
+export async function testBreadcrumbEliderButtonOpenCloseChangesElementChecked(
+    done: () => void) {
+  const element = getBreadcrumb();
+
+  // Set path.
+  await setAndWaitPath('A/B/C/D/E/F');
+
+  // Elider button drop-down menu should be in the 'closed' state.
+  const elider = getBreadcrumbEliderButton();
+  assertEquals('false', elider.getAttribute('aria-expanded'));
+  assertFalse(element.hasAttribute('checked'));
+
+  // Clicking the elider button should 'open' its drop-down menu.
+  assertFalse(elider.hasAttribute('hidden'));
+  elider.click();
+  assertEquals('true', elider.getAttribute('aria-expanded'));
+  assertTrue(element.hasAttribute('checked'));
+
+  // Change path.
+  await setAndWaitPath('G/H/I/J/K');
+
+  // Changing the path should 'close' the drop-down menu.
+  assertEquals('false', elider.getAttribute('aria-expanded'));
+  assertFalse(element.hasAttribute('checked'));
+
+  done();
+}
+
+/**
+ * Tests that opening and closing the elider button drop-down menu adds and
+ * removes global <html> element state.
+ */
+export async function testBreadcrumbEliderButtonOpenCloseChangesGlobalState(
+    done: () => void) {
+  const element = getBreadcrumb();
+
+  // Set path.
+  await setAndWaitPath('A/B/C/D/E/F');
+
+  // Elider button drop-down menu should be in the 'closed' state.
+  const elider = getBreadcrumbEliderButton();
+  assertEquals('false', elider.getAttribute('aria-expanded'));
+
+  // Clicking the elider button should 'open' its drop-down menu.
+  assertFalse(elider.hasAttribute('hidden'));
+  elider.click();
+  assertEquals('true', elider.getAttribute('aria-expanded'));
+
+  // And also change the global element state.
+  const root = document.documentElement;
+  assertTrue(root.classList.contains('breadcrumb-elider-expanded'));
+
+  // Change path.
+  await setAndWaitPath('G/H/I/J/K');
+
+  // Changing the path should 'close' the drop-down menu.
+  assertEquals('false', elider.getAttribute('aria-expanded'));
+  assertFalse(element.hasAttribute('checked'));
+
+  // And clear the global element state.
+  assertFalse(root.classList.contains('breadcrumb-elider-expanded'));
+
+  done();
+}
+
+/**
+ * Tests that wide text path components are rendered elided with ellipsis ...
+ * an opportunity for adding a tooltip.
+ */
+export async function testBreadcrumbPartPartsEllipsisElide(done: () => void) {
+  const element = getBreadcrumb();
+
+  // Set path.
+  await setAndWaitPath('A/VERYVERYVERYVERYWIDEPATHPART');
+
+  // clang-format off
+  const expect = element.path +
+      ' 1: display:block id=first text=[A]' +
+      ' 2: display:none elider[aria-expanded=false,aria-haspopup,aria-label,hidden]' +
+      ' 3: display:none id=second hidden' +
+      ' 4: display:none id=third hidden' +
+      ' 5: display:block id=fourth text=[VERYVERYVERYVERYWIDEPATHPART]';
+  // clang-format on
+
+  const path = element.parts.join('/');
+  assertEquals(expect, path + ' ' + getBreadcrumbButtonState());
+
+  // The wide part should render its text with ellipsis.
+  let ellipsis = element.getEllipsisButtons();
+  const parts = element.parts;
+  assert(ellipsis[0]);
+  assert(parts[1]);
+
+  assertEquals(1, ellipsis.length);
+  assertEquals(element.parts[1], ellipsis[0].textContent);
+
+  // Add has-tooltip attribute to this ellipsis button.
+  ellipsis[0].setAttribute('has-tooltip', '');
+  const tooltip = element.getToolTipButtons();
+  assert(tooltip[0]);
+  assertEquals(ellipsis[0], tooltip[0]);
+
+  // getEllipsisButtons() should ignore [has-tooltip] buttons.
+  ellipsis = element.getEllipsisButtons();
+  assertEquals(0, ellipsis.length);
+
+  done();
+}
+
+/**
+ * Tests that wide text path components in the drop-down menu are rendered
+ * elided with ellipsis ... an opportunity for adding a tooltip.
+ */
+export async function testBreadcrumbDropDownMenuPathPartsEllipsisElide(
+    done: () => void) {
+  const element = getBreadcrumb();
+
+  // Set path.
+  await setAndWaitPath('A/B/VERYVERYVERYVERYWIDEPATHPARTINDEED/C/D');
+
+  // clang-format off
+  const expect = element.path +
+      ' 1: display:block id=first text=[A]' +
+      ' 2: display:flex elider[aria-expanded=false,aria-haspopup,aria-label]' +
+      ' dropdown-item: display:block text=[B]' +
+      ' dropdown-item: display:block' +
+      ' text=[VERYVERYVERYVERYWIDEPATHPARTINDEED]' +
+      ' 3: display:none id=second hidden' +
+      ' 4: display:block id=third text=[C]' +
+      ' 5: display:block id=fourth text=[D]';
+  // clang-format on
+
+  const path = element.parts.join('/');
+  assertEquals(expect, path + ' ' + getBreadcrumbButtonState());
+
+  // Display the dropdown menu.
+  const elider = getBreadcrumbEliderButton();
+  elider.click();
+
+  const parts = element.parts;
+  assert(parts[2]);
+
+  // The wide part button should render its text with ellipsis.
+  let ellipsis = element.getEllipsisButtons();
+  assertEquals(1, ellipsis.length);
+  assert(ellipsis[0]);
+  assertEquals(parts[2], ellipsis[0].textContent);
+
+  // Add a has-tooltip attribute to the ellipsis button.
+  ellipsis[0].setAttribute('has-tooltip', '');
+  const tooltip = element.getToolTipButtons();
+  assertEquals(1, tooltip.length);
+  assert(tooltip[0]);
+  assertEquals(ellipsis[0], tooltip[0]);
+
+  // getEllipsisButtons() should ignore [has-tooltip] buttons.
+  ellipsis = element.getEllipsisButtons();
+  assertEquals(0, ellipsis.length);
+
+  done();
+}
+
+/**
+ * Tests that breadcrumb getToolTipButtons() service returns all buttons that
+ * have a [has-tooltip] attribute.
+ */
+export async function testBreadcrumbButtonHasToolTipAttribute(
+    done: () => void) {
+  const element = getBreadcrumb();
+
+  // Set path.
+  await setAndWaitPath('A/B/C/D/E');
+
+  // Add a tool tip to the visible main buttons.
+  getVisibleBreadcrumbMainButtons().forEach((button) => {
+    button.setAttribute('has-tooltip', '');
+  });
+
+  // getToolTipButtons() should return those main buttons.
+  let tooltips = element.getToolTipButtons();
+
+  assertEquals(3, tooltips.length);
+  assert(tooltips[0]);
+  assert(tooltips[1]);
+  assert(tooltips[2]);
+  assertEquals('A', tooltips[0].textContent);
+  assertEquals('D', tooltips[1].textContent);
+  assertEquals('E', tooltips[2].textContent);
+
+  // Changing the path should clear all tool tips.
+  await setAndWaitPath('G/H/I/J/K');
+  assertEquals(0, element.getToolTipButtons().length);
+
+  // Add tool tips to the drop-down menu buttons.
+  getBreadcrumbMenuButtons().forEach((button) => {
+    button.setAttribute('has-tooltip', '');
+  });
+
+  // getToolTipButtons() should return those menu buttons.
+  tooltips = element.getToolTipButtons();
+  assertEquals(2, tooltips.length);
+  assert(tooltips[0]);
+  assert(tooltips[1]);
+  assertEquals('H', tooltips[0].textContent);
+  assertEquals('I', tooltips[1].textContent);
+
+  // Note: tool tips can be enabled for the elider button.
+  const elider = getBreadcrumbEliderButton();
+  elider.setAttribute('has-tooltip', '');
+
+  // But getToolTipButtons() must exclude the elider (i18n).
+  tooltips = element.getToolTipButtons();
+  assertEquals(2, tooltips.length);
+  assert(tooltips[0]);
+  assert(tooltips[1]);
+  assertEquals('H', tooltips[0].textContent);
+  assertEquals('I', tooltips[1].textContent);
+
+  // And changing path should not clear its tool tip (i18n).
+  await setAndWaitPath('since/the/elider/has/an/i18n/tooltip/aria-label');
+  assertEquals(0, element.getToolTipButtons().length);
+  assertTrue(elider.hasAttribute('has-tooltip'));
+
+  // getEllipsisButtons() must exclude the elider button.
+  await setAndWaitPath(elider.getAttribute('aria-label')!);
+  const ellipsis = element.getEllipsisButtons();
+  assertEquals(getVisibleBreadcrumbMainButtons()[0], ellipsis[0]);
+  assertEquals(1, ellipsis.length);
+  assert(ellipsis[0]);
+  assertNotEquals(elider, ellipsis[0]);
+
+  done();
+}
diff --git a/ui/file_manager/file_manager/widgets/xf_breadcrumbs_unittest.ts b/ui/file_manager/file_manager/widgets/xf_breadcrumbs_unittest.ts
deleted file mode 100644
index 4ee631e..0000000
--- a/ui/file_manager/file_manager/widgets/xf_breadcrumbs_unittest.ts
+++ /dev/null
@@ -1,10 +0,0 @@
-// 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.
-
-import {assertEquals} from 'chrome://webui-test/chai_assert.js';
-
-export function testBla() {
-  console.log('ITs time!');
-  assertEquals(1, 1);
-}
diff --git a/ui/file_manager/file_names.gni b/ui/file_manager/file_names.gni
index 92d2d2c..b63936e3 100644
--- a/ui/file_manager/file_names.gni
+++ b/ui/file_manager/file_names.gni
@@ -270,12 +270,14 @@
   "file_manager/state/reducers.ts",
   "file_manager/state/actions.ts",
   "file_manager/state/file_key.ts",
-  "file_manager/widgets/breadcrumbs.ts",
-  "file_manager/containers/breadcrumbs_container.ts",
+  "file_manager/widgets/xf_breadcrumb.ts",
+  "file_manager/containers/breadcrumb_container.ts",
 ]
 
 # HTML template files that are used to generate the ".html.ts"
-ts_templates = [ "file_manager/widgets/breadcrumbs.html" ]
+ts_templates = [ "file_manager/widgets/xf_breadcrumb.html" ]
+
+ts_test_files = [ "file_manager/widgets/xf_breadcrumb_unittest.ts" ]
 
 ts_generated_templates = []
 foreach(_t, ts_templates) {
diff --git a/ui/file_manager/integration_tests/file_manager/breadcrumbs.js b/ui/file_manager/integration_tests/file_manager/breadcrumbs.js
index 0703ca1..6e39610b 100644
--- a/ui/file_manager/integration_tests/file_manager/breadcrumbs.js
+++ b/ui/file_manager/integration_tests/file_manager/breadcrumbs.js
@@ -14,7 +14,7 @@
   const isFilesAppExperimental =
       await sendTestMessage({name: 'isFilesAppExperimental'}) === 'true';
 
-  return isFilesAppExperimental ? 'xf-breadcrumbs' : 'bread-crumb';
+  return isFilesAppExperimental ? 'xf-breadcrumb' : 'bread-crumb';
 }
 
 testcase.breadcrumbsNavigate = async () => {
diff --git a/ui/file_manager/integration_tests/file_manager/recents.js b/ui/file_manager/integration_tests/file_manager/recents.js
index a54cdb5..1a327c7 100644
--- a/ui/file_manager/integration_tests/file_manager/recents.js
+++ b/ui/file_manager/integration_tests/file_manager/recents.js
@@ -2,31 +2,34 @@
 // Use of this source code is governed by a BSD-style license that can be
 // found in the LICENSE file.
 
-import {addEntries, ENTRIES, getCaller, getDateWithinLastMonth, pending, repeatUntil, RootPath, sendTestMessage, TestEntryInfo, wait} from '../test_util.js';
+import {addEntries, ENTRIES, getCaller, getDateWithDayDiff, pending, repeatUntil, RootPath, sendTestMessage, TestEntryInfo} from '../test_util.js';
 import {testcase} from '../testcase.js';
 
 import {mountCrostini, navigateWithDirectoryTree, openNewWindow, remoteCall, setupAndWaitUntilReady} from './background.js';
 import {BASIC_CROSTINI_ENTRY_SET, BASIC_DRIVE_ENTRY_SET, BASIC_LOCAL_ENTRY_SET, NESTED_ENTRY_SET, RECENT_ENTRY_SET} from './test_data.js';
 
+// Mock files with recently modified dates, be aware the days passed in should
+// be larger than 3 to prevent file list from showing "Today/Yesterday", which
+// will break the waitForFiles() function.
 // Test entry for a recently-modified video file.
 const RECENTLY_MODIFIED_VIDEO =
-    ENTRIES.world.cloneWithModifiedDate(getDateWithinLastMonth());
+    ENTRIES.world.cloneWithModifiedDate(getDateWithDayDiff(7));
 const RECENTLY_MODIFIED_MOV_VIDEO =
-    ENTRIES.movFile.cloneWithModifiedDate(getDateWithinLastMonth());
+    ENTRIES.movFile.cloneWithModifiedDate(getDateWithDayDiff(10));
 
 // Test entry for a recently-modified document file.
 const RECENTLY_MODIFIED_DOCUMENT =
-    ENTRIES.docxFile.cloneWithModifiedDate(getDateWithinLastMonth());
+    ENTRIES.docxFile.cloneWithModifiedDate(getDateWithDayDiff(12));
 
 // Test entries for recent-modified android files.
 const RECENT_MODIFIED_ANDROID_DOCUMENT =
-    ENTRIES.documentsText.cloneWithModifiedDate(getDateWithinLastMonth());
+    ENTRIES.documentsText.cloneWithModifiedDate(getDateWithDayDiff(15));
 const RECENT_MODIFIED_ANDROID_IMAGE =
-    ENTRIES.picturesImage.cloneWithModifiedDate(getDateWithinLastMonth());
+    ENTRIES.picturesImage.cloneWithModifiedDate(getDateWithDayDiff(20));
 const RECENT_MODIFIED_ANDROID_AUDIO =
-    ENTRIES.musicAudio.cloneWithModifiedDate(getDateWithinLastMonth());
+    ENTRIES.musicAudio.cloneWithModifiedDate(getDateWithDayDiff(21));
 const RECENT_MODIFIED_ANDROID_VIDEO =
-    ENTRIES.moviesVideo.cloneWithModifiedDate(getDateWithinLastMonth());
+    ENTRIES.moviesVideo.cloneWithModifiedDate(getDateWithDayDiff(25));
 
 /**
  * Enum for supported recent filter types.
@@ -955,3 +958,49 @@
   await remoteCall.waitForFiles(appId, filesInNewDir);
   await verifyBreadcrumbsPath(appId, newFolderBreadcrumb);
 };
+
+/**
+ * Tests the time-period group heading can be displayed in Recents.
+ */
+testcase.recentsTimePeriodHeadings = async () => {
+  const todayFile = ENTRIES.hello.cloneWithModifiedDate(getDateWithDayDiff(0));
+  const yesterdayFile =
+      ENTRIES.desktop.cloneWithModifiedDate(getDateWithDayDiff(1));
+  const appId = await setupAndWaitUntilReady(
+      RootPath.DOWNLOADS, [todayFile, yesterdayFile], []);
+  await navigateToRecent(appId);
+  await remoteCall.waitForFiles(
+      appId, TestEntryInfo.getExpectedRows([todayFile, yesterdayFile]), {
+        // Ignore last modified time because it will show Today/Yesterday
+        // instead
+        // of the actual date.
+        ignoreLastModifiedTime: true,
+      });
+  // Check headings in list view mode.
+  const todayListItem =
+      await remoteCall.waitForElement(appId, 'li[group-heading="Today"]');
+  chrome.test.assertEq(
+      todayFile.nameText, todayListItem.attributes['file-name']);
+  const yesterdayListItem =
+      await remoteCall.waitForElement(appId, 'li[group-heading="Yesterday"]');
+  chrome.test.assertEq(
+      yesterdayFile.nameText, yesterdayListItem.attributes['file-name']);
+
+  // Switch to grid view.
+  await remoteCall.waitAndClickElement(appId, '#view-button');
+  await remoteCall.waitForElementsCount(appId, ['.grid-title'], 2);
+  // Check headings in grid view mode.
+  const groupTitles = await remoteCall.callRemoteTestUtil(
+      'deepQueryAllElements', appId, ['.grid-title']);
+  chrome.test.assertEq(2, groupTitles.length);
+  const gridItems = await remoteCall.callRemoteTestUtil(
+      'deepQueryAllElements', appId, ['.grid-title + .thumbnail-item']);
+  chrome.test.assertEq(2, gridItems.length);
+
+  chrome.test.assertEq('Today', groupTitles[0].text);
+  chrome.test.assertEq(
+      todayFile.nameText, gridItems[0].attributes['file-name']);
+  chrome.test.assertEq('Yesterday', groupTitles[1].text);
+  chrome.test.assertEq(
+      yesterdayFile.nameText, gridItems[1].attributes['file-name']);
+};
diff --git a/ui/file_manager/integration_tests/remote_call.js b/ui/file_manager/integration_tests/remote_call.js
index fa64b0d..4d396b58 100644
--- a/ui/file_manager/integration_tests/remote_call.js
+++ b/ui/file_manager/integration_tests/remote_call.js
@@ -626,11 +626,11 @@
    * Waits for the file list turns to the given contents.
    * @param {string} appId App window Id.
    * @param {Array<Array<string>>} expected Expected contents of file list.
-   * @param {{orderCheck:(?boolean|undefined),
-   *     ignoreLastModifiedTime:(?boolean|undefined)}=} opt_options Options of
-   *     the comparison. If orderCheck is true, it also compares the order of
-   *     files. If ignoreLastModifiedTime is true, it compares the file without
-   *     its last modified time.
+   * @param {{orderCheck:(?boolean|undefined), ignoreFileSize:
+   *     (?boolean|undefined), ignoreLastModifiedTime:(?boolean|undefined)}=}
+   *     opt_options Options of the comparison. If orderCheck is true, it also
+   *     compares the order of files. If ignoreLastModifiedTime is true, it
+   *     compares the file without its last modified time.
    * @return {Promise} Promise to be fulfilled when the file list turns to the
    *     given contents.
    */
diff --git a/ui/file_manager/integration_tests/test_util.js b/ui/file_manager/integration_tests/test_util.js
index b770297..c2878c2f 100644
--- a/ui/file_manager/integration_tests/test_util.js
+++ b/ui/file_manager/integration_tests/test_util.js
@@ -1664,16 +1664,15 @@
 }
 
 /**
- * Returns a date time string within last month. This can be used as the
+ * Returns a date time string with diff days. This can be used as the
  * lastModifiedTime field of TestEntryInfo object, which is useful to construct
  * a recent file.
+ * @param {number} diffDays how many days in diff
  * @return {string}
  */
-export function getDateWithinLastMonth() {
+export function getDateWithDayDiff(diffDays) {
   const nowDate = new Date();
-  // At least 3 days ago to prevent file list from showing "Today/Yesterday".
-  const randomDayDiff = 3 + Math.floor(Math.random() * 23);
-  nowDate.setDate(nowDate.getDate() - randomDayDiff);
+  nowDate.setDate(nowDate.getDate() - diffDays);
   // Format: "May 2, 2021, 11:25 AM"
   return nowDate.toLocaleString('default', {
     month: 'short',
diff --git a/ui/gl/gl_surface.cc b/ui/gl/gl_surface.cc
index a7bf3f5..b4f6d1c6 100644
--- a/ui/gl/gl_surface.cc
+++ b/ui/gl/gl_surface.cc
@@ -16,7 +16,6 @@
 #include "ui/gfx/swap_result.h"
 #include "ui/gl/dc_renderer_layer_params.h"
 #include "ui/gl/gl_context.h"
-#include "ui/gl/gl_image.h"
 #include "ui/gl/gl_implementation.h"
 #include "ui/gl/gl_surface_format.h"
 #include "ui/gl/gl_switches.h"
diff --git a/ui/gl/gl_surface.h b/ui/gl/gl_surface.h
index 877818d8..ee970d63 100644
--- a/ui/gl/gl_surface.h
+++ b/ui/gl/gl_surface.h
@@ -26,7 +26,6 @@
 #include "ui/gfx/swap_result.h"
 #include "ui/gl/gl_display.h"
 #include "ui/gl/gl_export.h"
-#include "ui/gl/gl_image.h"
 #include "ui/gl/gl_implementation.h"
 #include "ui/gl/gl_surface_format.h"
 #include "ui/gl/gpu_preference.h"
@@ -36,6 +35,7 @@
 class DelegatedInkPointRenderer;
 }  // namespace mojom
 class ColorSpace;
+struct OverlayPlaneData;
 class GpuFence;
 class VSyncProvider;
 }  // namespace gfx
@@ -48,6 +48,7 @@
 namespace gl {
 
 class GLContext;
+class GLImage;
 class EGLTimestampClient;
 
 // Encapsulates a surface that can be rendered to with GL, hiding platform
diff --git a/ui/gl/gl_surface_egl.cc b/ui/gl/gl_surface_egl.cc
index b362ea0..ba56996c 100644
--- a/ui/gl/gl_surface_egl.cc
+++ b/ui/gl/gl_surface_egl.cc
@@ -27,7 +27,6 @@
 #include "ui/gl/gl_context.h"
 #include "ui/gl/gl_display_egl_util.h"
 #include "ui/gl/gl_display_manager.h"
-#include "ui/gl/gl_image.h"
 #include "ui/gl/gl_surface_presentation_helper.h"
 #include "ui/gl/gl_surface_stub.h"
 #include "ui/gl/gl_utils.h"
diff --git a/ui/ozone/demo/gl_renderer.cc b/ui/ozone/demo/gl_renderer.cc
index 72672c58..d814a6c 100644
--- a/ui/ozone/demo/gl_renderer.cc
+++ b/ui/ozone/demo/gl_renderer.cc
@@ -11,6 +11,7 @@
 #include "base/location.h"
 #include "base/threading/thread_task_runner_handle.h"
 #include "base/trace_event/trace_event.h"
+#include "ui/gfx/color_space.h"
 #include "ui/gfx/gpu_fence.h"
 #include "ui/gl/gl_bindings.h"
 #include "ui/gl/gl_context.h"
diff --git a/ui/ozone/demo/skia/skia_gl_renderer.cc b/ui/ozone/demo/skia/skia_gl_renderer.cc
index 3c464fe..5681231 100644
--- a/ui/ozone/demo/skia/skia_gl_renderer.cc
+++ b/ui/ozone/demo/skia/skia_gl_renderer.cc
@@ -19,6 +19,7 @@
 #include "third_party/skia/include/gpu/GrBackendSurface.h"
 #include "third_party/skia/include/gpu/gl/GrGLAssembleInterface.h"
 #include "third_party/skia/include/gpu/gl/GrGLInterface.h"
+#include "ui/gfx/color_space.h"
 #include "ui/gfx/gpu_fence.h"
 #include "ui/gl/gl_bindings.h"
 #include "ui/gl/gl_context.h"
diff --git a/ui/ozone/demo/surfaceless_gl_renderer.cc b/ui/ozone/demo/surfaceless_gl_renderer.cc
index 0c8db95..d44e70b 100644
--- a/ui/ozone/demo/surfaceless_gl_renderer.cc
+++ b/ui/ozone/demo/surfaceless_gl_renderer.cc
@@ -21,7 +21,6 @@
 #include "ui/gl/gl_bindings.h"
 #include "ui/gl/gl_context.h"
 #include "ui/gl/gl_fence.h"
-#include "ui/gl/gl_image.h"
 #include "ui/gl/gl_image_native_pixmap.h"
 #include "ui/gl/gl_surface.h"
 #include "ui/gl/init/gl_factory.h"
diff --git a/ui/ozone/gl/gl_image_ozone_native_pixmap_unittest.cc b/ui/ozone/gl/gl_image_ozone_native_pixmap_unittest.cc
index 0bd8223..0cd79d3 100644
--- a/ui/ozone/gl/gl_image_ozone_native_pixmap_unittest.cc
+++ b/ui/ozone/gl/gl_image_ozone_native_pixmap_unittest.cc
@@ -89,15 +89,7 @@
     GLImageNativePixmapTestDelegate<gfx::BufferUsage::SCANOUT,
                                     gfx::BufferFormat::BGRA_8888>>;
 
-#if BUILDFLAG(IS_CHROMEOS)
-// Disabled due to failures on ChromeOS MSan builder.
-// TODO(crbug.com/1314304) Reenable the test.
-#define MAYBE_GLImageNativePixmapScanoutBGRA \
-  DISABLED_GLImageNativePixmapScanoutBGRA
-#else
-#define MAYBE_GLImageNativePixmapScanoutBGRA GLImageNativePixmapScanoutBGRA
-#endif
-INSTANTIATE_TYPED_TEST_SUITE_P(MAYBE_GLImageNativePixmapScanoutBGRA,
+INSTANTIATE_TYPED_TEST_SUITE_P(GLImageNativePixmapScanoutBGRA,
                                GLImageTest,
                                GLImageScanoutType);
 
diff --git a/ui/ozone/platform/cast/gl_surface_cast.h b/ui/ozone/platform/cast/gl_surface_cast.h
index c5339ba..4727050 100644
--- a/ui/ozone/platform/cast/gl_surface_cast.h
+++ b/ui/ozone/platform/cast/gl_surface_cast.h
@@ -12,7 +12,6 @@
 #include "ui/gfx/native_widget_types.h"
 #include "ui/gfx/overlay_transform.h"
 #include "ui/gfx/swap_result.h"
-#include "ui/gl/gl_image.h"
 #include "ui/gl/gl_surface_egl.h"
 
 namespace ui {
diff --git a/ui/ozone/platform/headless/headless_surface_factory.cc b/ui/ozone/platform/headless/headless_surface_factory.cc
index 8f360e4..fbcf7a52 100644
--- a/ui/ozone/platform/headless/headless_surface_factory.cc
+++ b/ui/ozone/platform/headless/headless_surface_factory.cc
@@ -229,8 +229,8 @@
 std::vector<gl::GLImplementationParts>
 HeadlessSurfaceFactory::GetAllowedGLImplementations() {
   return std::vector<gl::GLImplementationParts>{
-      gl::GLImplementationParts(gl::kGLImplementationEGLGLES2),
       gl::GLImplementationParts(gl::ANGLEImplementation::kSwiftShader),
+      gl::GLImplementationParts(gl::kGLImplementationEGLGLES2),
       gl::GLImplementationParts(gl::ANGLEImplementation::kDefault),
   };
 }
diff --git a/ui/wm/BUILD.gn b/ui/wm/BUILD.gn
index 0671f48..5ced3cfb 100644
--- a/ui/wm/BUILD.gn
+++ b/ui/wm/BUILD.gn
@@ -6,6 +6,8 @@
 import("//build/config/ui.gni")
 import("//testing/test.gni")
 
+assert(use_aura)
+
 component("wm") {
   output_name = "ui_wm"
   sources = [
diff --git a/ui/wm/public/BUILD.gn b/ui/wm/public/BUILD.gn
index b4ae939..16ae597 100644
--- a/ui/wm/public/BUILD.gn
+++ b/ui/wm/public/BUILD.gn
@@ -2,6 +2,10 @@
 # Use of this source code is governed by a BSD-style license that can be
 # found in the LICENSE file.
 
+import("//build/config/ui.gni")
+
+assert(use_aura)
+
 component("public") {
   output_name = "wm_public"