diff --git a/BASE_VER b/BASE_VER
index a56424a..36b1436 100644
--- a/BASE_VER
+++ b/BASE_VER
@@ -1 +1 @@
-1306340
+1306670
diff --git a/base/android/junit/src/org/chromium/base/LifetimeAssertTest.java b/base/android/junit/src/org/chromium/base/LifetimeAssertTest.java
index 0dc28c0..7460491 100644
--- a/base/android/junit/src/org/chromium/base/LifetimeAssertTest.java
+++ b/base/android/junit/src/org/chromium/base/LifetimeAssertTest.java
@@ -6,6 +6,7 @@
 
 import org.junit.After;
 import org.junit.Assert;
+import org.junit.Assume;
 import org.junit.Before;
 import org.junit.Test;
 import org.junit.runner.RunWith;
@@ -31,9 +32,7 @@
 
     @Before
     public void setUp() {
-        if (!BuildConfig.ENABLE_ASSERTS) {
-            return;
-        }
+        Assume.assumeTrue("Requires asserts", BuildConfig.ENABLE_ASSERTS);
         mTestClass = new TestClass();
         mTargetRef = mTestClass.mLifetimeAssert.mWrapper;
         mFound = false;
@@ -52,17 +51,10 @@
 
     @After
     public void tearDown() {
-        if (!BuildConfig.ENABLE_ASSERTS) {
-            return;
-        }
         LifetimeAssert.sTestHook = null;
     }
 
     private void runTest(boolean setSafe) {
-        if (!BuildConfig.ENABLE_ASSERTS) {
-            return;
-        }
-
         synchronized (mLock) {
             if (setSafe) {
                 LifetimeAssert.setSafeToGc(mTestClass.mLifetimeAssert, true);
@@ -96,24 +88,13 @@
         runTest(false);
     }
 
-    @Test
+    @Test(expected = LifetimeAssert.LifetimeAssertException.class)
     public void testAssertAllInstancesDestroyedForTesting_notSafeToGc() {
-        if (!BuildConfig.ENABLE_ASSERTS) {
-            return;
-        }
-        try {
-            LifetimeAssert.assertAllInstancesDestroyedForTesting();
-            Assert.fail();
-        } catch (LifetimeAssert.LifetimeAssertException e) {
-            // Expected.
-        }
+        LifetimeAssert.assertAllInstancesDestroyedForTesting();
     }
 
     @Test
     public void testAssertAllInstancesDestroyedForTesting_safeToGc() {
-        if (!BuildConfig.ENABLE_ASSERTS) {
-            return;
-        }
         LifetimeAssert.setSafeToGc(mTestClass.mLifetimeAssert, true);
         // Should not throw.
         LifetimeAssert.assertAllInstancesDestroyedForTesting();
@@ -121,9 +102,6 @@
 
     @Test
     public void testAssertAllInstancesDestroyedForTesting_resetAfterAssert() {
-        if (!BuildConfig.ENABLE_ASSERTS) {
-            return;
-        }
         try {
             LifetimeAssert.assertAllInstancesDestroyedForTesting();
             Assert.fail();
@@ -136,9 +114,6 @@
 
     @Test
     public void testResetForTesting() {
-        if (!BuildConfig.ENABLE_ASSERTS) {
-            return;
-        }
         LifetimeAssert.resetForTesting();
         // Should not throw.
         LifetimeAssert.assertAllInstancesDestroyedForTesting();
diff --git a/base/containers/buffer_iterator_unittest.cc b/base/containers/buffer_iterator_unittest.cc
index a296c24..216d796 100644
--- a/base/containers/buffer_iterator_unittest.cc
+++ b/base/containers/buffer_iterator_unittest.cc
@@ -2,6 +2,11 @@
 // Use of this source code is governed by a BSD-style license that can be
 // found in the LICENSE file.
 
+#ifdef UNSAFE_BUFFERS_BUILD
+// TODO(crbug.com/341324165): Fix and remove.
+#pragma allow_unsafe_buffers
+#endif
+
 #include "base/containers/buffer_iterator.h"
 
 #include <string.h>
diff --git a/base/containers/lru_cache.h b/base/containers/lru_cache.h
index 68cc30f..3535437 100644
--- a/base/containers/lru_cache.h
+++ b/base/containers/lru_cache.h
@@ -19,6 +19,7 @@
 #include <stddef.h>
 
 #include <algorithm>
+#include <concepts>
 #include <functional>
 #include <list>
 #include <map>
@@ -114,11 +115,8 @@
   // Inserts an item into the list. If an existing item has the same key, it is
   // removed prior to insertion. An iterator indicating the inserted item will
   // be returned (this will always be the front of the list).
-  template <
-      class K,
-      class V,
-      class MapKeyGetter = GetKeyFromKVPair,
-      class = std::enable_if_t<std::is_same_v<MapKeyGetter, GetKeyFromValue>>>
+  template <class K, class V>
+    requires(std::same_as<GetKeyFromValue, GetKeyFromKVPair>)
   iterator Put(K&& key, V&& value) {
     return Put(value_type{std::forward<K>(key), std::forward<V>(value)});
   }
diff --git a/base/containers/span_rust_unittest.cc b/base/containers/span_rust_unittest.cc
index 373d835..c85643e 100644
--- a/base/containers/span_rust_unittest.cc
+++ b/base/containers/span_rust_unittest.cc
@@ -2,6 +2,11 @@
 // Use of this source code is governed by a BSD-style license that can be
 // found in the LICENSE file.
 
+#ifdef UNSAFE_BUFFERS_BUILD
+// TODO(crbug.com/341324165): Fix and remove.
+#pragma allow_unsafe_buffers
+#endif
+
 #include "base/containers/span_rust.h"
 
 #include "testing/gtest/include/gtest/gtest.h"
diff --git a/base/memory/raw_span_unittest.cc b/base/memory/raw_span_unittest.cc
index 53fc8e2..09e8ffb 100644
--- a/base/memory/raw_span_unittest.cc
+++ b/base/memory/raw_span_unittest.cc
@@ -2,6 +2,11 @@
 // Use of this source code is governed by a BSD-style license that can be
 // found in the LICENSE file.
 
+#ifdef UNSAFE_BUFFERS_BUILD
+// TODO(crbug.com/341324165): Fix and remove.
+#pragma allow_unsafe_buffers
+#endif
+
 #include "base/memory/raw_span.h"
 
 #include "testing/gmock/include/gmock/gmock.h"
diff --git a/base/message_loop/message_pump.h b/base/message_loop/message_pump.h
index 1b595e0..9aea3dd 100644
--- a/base/message_loop/message_pump.h
+++ b/base/message_loop/message_pump.h
@@ -94,10 +94,7 @@
     virtual NextWorkInfo DoWork() = 0;
 
     // Called from within Run just before the message pump goes to sleep.
-    // Returns true to indicate that idle work was done; in which case Run()
-    // should resume with calling DoWork(). Returning false means the pump
-    // should now wait.
-    virtual bool DoIdleWork() = 0;
+    virtual void DoIdleWork() = 0;
 
     class ScopedDoWorkItem {
      public:
@@ -204,7 +201,7 @@
   //     if (did_native_work || next_work_info.is_immediate())
   //       continue;
   //
-  //     bool did_idle_work = delegate_->DoIdleWork();
+  //     delegate_->DoIdleWork();
   //     if (should_quit_)
   //       break;
   //
diff --git a/base/message_loop/message_pump_android.cc b/base/message_loop/message_pump_android.cc
index e824603..bdbbd84 100644
--- a/base/message_loop/message_pump_android.cc
+++ b/base/message_loop/message_pump_android.cc
@@ -160,7 +160,7 @@
     return;
   }
 
-  DoIdleWork();
+  delegate_->DoIdleWork();
   if (!next_work_info.delayed_run_time.is_max())
     ScheduleDelayedWork(next_work_info);
 }
@@ -267,21 +267,12 @@
   // scheduled tasks before it quits. Also note that we can't just add an idle
   // callback to the java looper, as that will fire even if application tasks
   // are still queued up.
-  DoIdleWork();
+  delegate_->DoIdleWork();
   if (!next_work_info.delayed_run_time.is_max()) {
     ScheduleDelayedWork(next_work_info);
   }
 }
 
-void MessagePumpAndroid::DoIdleWork() {
-  if (delegate_->DoIdleWork()) {
-    // If DoIdleWork() resulted in any work, we're not idle yet. We need to pump
-    // the loop here because we may in fact be idle after doing idle work
-    // without any new tasks being queued.
-    ScheduleWork();
-  }
-}
-
 void MessagePumpAndroid::Run(Delegate* delegate) {
   CHECK(false) << "Unexpected call to Run()";
 }
diff --git a/base/message_loop/message_pump_android.h b/base/message_loop/message_pump_android.h
index 2010492..4f36f54 100644
--- a/base/message_loop/message_pump_android.h
+++ b/base/message_loop/message_pump_android.h
@@ -78,7 +78,6 @@
 
  private:
   void ScheduleWorkInternal(bool do_idle_work);
-  void DoIdleWork();
 
   // Unlike other platforms, we don't control the message loop as it's
   // controlled by the Android Looper, so we can't run a RunLoop to keep the
diff --git a/base/message_loop/message_pump_apple.mm b/base/message_loop/message_pump_apple.mm
index 570a758..e7fe3f7 100644
--- a/base/message_loop/message_pump_apple.mm
+++ b/base/message_loop/message_pump_apple.mm
@@ -477,10 +477,7 @@
   // objects if the app is not currently handling a UI event to ensure they're
   // released promptly even in the absence of UI events.
   OptionalAutoreleasePool autorelease_pool(this);
-  bool did_work = delegate_->DoIdleWork();
-  if (did_work) {
-    CFRunLoopSourceSignal(work_source_.get());
-  }
+  delegate_->DoIdleWork();
 }
 
 // Called from the run loop.
diff --git a/base/message_loop/message_pump_default.cc b/base/message_loop/message_pump_default.cc
index c3efad1..7bf0d77 100644
--- a/base/message_loop/message_pump_default.cc
+++ b/base/message_loop/message_pump_default.cc
@@ -45,13 +45,10 @@
     if (has_more_immediate_work)
       continue;
 
-    has_more_immediate_work = delegate->DoIdleWork();
+    delegate->DoIdleWork();
     if (!keep_running_)
       break;
 
-    if (has_more_immediate_work)
-      continue;
-
     if (next_work_info.delayed_run_time.is_max()) {
       event_.Wait();
     } else {
diff --git a/base/message_loop/message_pump_epoll.cc b/base/message_loop/message_pump_epoll.cc
index bebcbbb..c7410f1 100644
--- a/base/message_loop/message_pump_epoll.cc
+++ b/base/message_loop/message_pump_epoll.cc
@@ -16,10 +16,12 @@
 #include "base/check_op.h"
 #include "base/memory/raw_ptr.h"
 #include "base/memory/ref_counted.h"
+#include "base/metrics/histogram_macros.h"
 #include "base/numerics/safe_conversions.h"
 #include "base/posix/eintr_wrapper.h"
 #include "base/ranges/algorithm.h"
 #include "base/threading/thread_checker.h"
+#include "base/time/time.h"
 #include "base/trace_event/base_tracing.h"
 
 namespace base {
@@ -111,13 +113,10 @@
       continue;
     }
 
-    attempt_more_work = delegate->DoIdleWork();
+    delegate->DoIdleWork();
     if (run_state.should_quit) {
       break;
     }
-    if (attempt_more_work) {
-      continue;
-    }
 
     TimeDelta timeout = TimeDelta::Max();
     DCHECK(!next_work_info.delayed_run_time.is_null());
diff --git a/base/message_loop/message_pump_glib.cc b/base/message_loop/message_pump_glib.cc
index fa7c17d..a835d08 100644
--- a/base/message_loop/message_pump_glib.cc
+++ b/base/message_loop/message_pump_glib.cc
@@ -701,7 +701,7 @@
     if (more_work_is_plausible)
       continue;
 
-    more_work_is_plausible = state_->delegate->DoIdleWork();
+    state_->delegate->DoIdleWork();
     if (state_->should_quit)
       break;
   }
diff --git a/base/message_loop/message_pump_kqueue.cc b/base/message_loop/message_pump_kqueue.cc
index 3a7beec..04df618 100644
--- a/base/message_loop/message_pump_kqueue.cc
+++ b/base/message_loop/message_pump_kqueue.cc
@@ -186,13 +186,10 @@
       if (do_more_work)
         continue;
 
-      do_more_work |= delegate->DoIdleWork();
+      delegate->DoIdleWork();
       if (!keep_running_)
         break;
 
-      if (do_more_work)
-        continue;
-
       DoInternalWork(delegate, &next_work_info);
     }
   }
diff --git a/base/message_loop/message_pump_libevent.cc b/base/message_loop/message_pump_libevent.cc
index d75b3a1..3d0deca 100644
--- a/base/message_loop/message_pump_libevent.cc
+++ b/base/message_loop/message_pump_libevent.cc
@@ -314,14 +314,11 @@
     if (attempt_more_work)
       continue;
 
-    attempt_more_work = delegate->DoIdleWork();
+    delegate->DoIdleWork();
 
     if (run_state.should_quit)
       break;
 
-    if (attempt_more_work)
-      continue;
-
     bool did_set_timer = false;
 
     // If there is delayed work.
diff --git a/base/message_loop/message_pump_unittest.cc b/base/message_loop/message_pump_unittest.cc
index 7f4cc40..194943a 100644
--- a/base/message_loop/message_pump_unittest.cc
+++ b/base/message_loop/message_pump_unittest.cc
@@ -81,7 +81,7 @@
   void BeforeWait() override {}
   void BeginNativeWorkBeforeDoWork() override {}
   MOCK_METHOD0(DoWork, MessagePump::Delegate::NextWorkInfo());
-  MOCK_METHOD0(DoIdleWork, bool());
+  MOCK_METHOD0(DoIdleWork, void());
 
   // Functions invoked directly by the message pump.
   void OnBeginWorkItem() override {
diff --git a/base/task/sequence_manager/test/mock_time_message_pump.cc b/base/task/sequence_manager/test/mock_time_message_pump.cc
index 524b7a8..73f2a02 100644
--- a/base/task/sequence_manager/test/mock_time_message_pump.cc
+++ b/base/task/sequence_manager/test/mock_time_message_pump.cc
@@ -54,14 +54,10 @@
     if (info.is_immediate())
       continue;
 
-    bool have_immediate_work = delegate->DoIdleWork();
-
+    delegate->DoIdleWork();
     if (!keep_running_)
       break;
 
-    if (have_immediate_work)
-      continue;
-
     if (MaybeAdvanceTime(info.delayed_run_time))
       continue;
 
diff --git a/base/task/sequence_manager/test/mock_time_message_pump_unittest.cc b/base/task/sequence_manager/test/mock_time_message_pump_unittest.cc
index 43e3b92..d136548 100644
--- a/base/task/sequence_manager/test/mock_time_message_pump_unittest.cc
+++ b/base/task/sequence_manager/test/mock_time_message_pump_unittest.cc
@@ -27,7 +27,7 @@
   MOCK_METHOD0(BeforeWait, void());
   MOCK_METHOD0(BeginNativeWorkBeforeDoWork, void());
   MOCK_METHOD0(DoWork, NextWorkInfo());
-  MOCK_METHOD0(DoIdleWork, bool());
+  MOCK_METHOD0(DoIdleWork, void());
   MOCK_METHOD0(RunDepth, int());
 };
 
@@ -51,7 +51,6 @@
       .WillOnce(Return(NextWorkInfo(kFutureTime)));
   EXPECT_CALL(delegate, DoIdleWork).WillOnce(Invoke([&] {
     pump.Quit();
-    return false;
   }));
 
   pump.Run(&delegate);
@@ -72,7 +71,7 @@
   EXPECT_CALL(delegate, DoWork).Times(3).WillRepeatedly(Invoke([&]() {
     return NextWorkInfo(mock_clock.NowTicks() + Seconds(1));
   }));
-  EXPECT_CALL(delegate, DoIdleWork).Times(3).WillRepeatedly(Return(false));
+  EXPECT_CALL(delegate, DoIdleWork).Times(3);
 
   pump.Run(&delegate);
 
@@ -105,7 +104,7 @@
   EXPECT_CALL(delegate, DoWork)
       .Times(2)
       .WillRepeatedly(Return(NextWorkInfo(kNextDelayedWorkTime)));
-  EXPECT_CALL(delegate, DoIdleWork).Times(2).WillRepeatedly(Return(false));
+  EXPECT_CALL(delegate, DoIdleWork).Times(2);
 
   pump.Run(&delegate);
 
@@ -124,7 +123,7 @@
   pump.SetStopWhenMessagePumpIsIdle(true);
   EXPECT_CALL(delegate, DoWork)
       .WillOnce(Return(NextWorkInfo(kNextDelayedWorkTime)));
-  EXPECT_CALL(delegate, DoIdleWork).WillOnce(Return(false));
+  EXPECT_CALL(delegate, DoIdleWork);
 
   pump.Run(&delegate);
 
@@ -158,7 +157,7 @@
       .WillOnce(Return(NextWorkInfo(kNextDelayedWorkTime)))
       .WillOnce(Return(NextWorkInfo(kNextDelayedWorkTime)))
       .WillOnce(Return(NextWorkInfo(TimeTicks::Max())));
-  EXPECT_CALL(delegate, DoIdleWork).WillRepeatedly(Return(false));
+  EXPECT_CALL(delegate, DoIdleWork).Times(3);
 
   pump.Run(&delegate);
 }
@@ -175,7 +174,7 @@
   pump.SetAllowTimeToAutoAdvanceUntil(kAdvanceUntil);
   EXPECT_CALL(delegate, DoWork)
       .WillRepeatedly(Return(NextWorkInfo(TimeTicks::Max())));
-  EXPECT_CALL(delegate, DoIdleWork).WillRepeatedly(Return(false));
+  EXPECT_CALL(delegate, DoIdleWork).Times(2);
 
   pump.Run(&delegate);
 
diff --git a/base/task/sequence_manager/thread_controller.h b/base/task/sequence_manager/thread_controller.h
index 47bb7b9..c7f95f6 100644
--- a/base/task/sequence_manager/thread_controller.h
+++ b/base/task/sequence_manager/thread_controller.h
@@ -372,7 +372,7 @@
       TimeTicks last_phase_end_;
       // The end of the last kIdleWork phase. Used as a minimum for the next
       // kScheduled phase's begin (as it's possible that the next wake-up is
-      // scheduled during DoIdleWork adn we don't want overlapping phases).
+      // scheduled during DoIdleWork and we don't want overlapping phases).
       TimeTicks last_sleep_;
       // Assumes each kWorkItem is native unless OnApplicationTaskSelected() is
       // invoked in a given [OnWorkStarted, OnWorkEnded].
diff --git a/base/task/sequence_manager/thread_controller_with_message_pump_impl.cc b/base/task/sequence_manager/thread_controller_with_message_pump_impl.cc
index 11d1e2e..e57ccc4 100644
--- a/base/task/sequence_manager/thread_controller_with_message_pump_impl.cc
+++ b/base/task/sequence_manager/thread_controller_with_message_pump_impl.cc
@@ -529,7 +529,7 @@
          g_run_tasks_by_batches.load(std::memory_order_relaxed);
 }
 
-bool ThreadControllerWithMessagePumpImpl::DoIdleWork() {
+void ThreadControllerWithMessagePumpImpl::DoIdleWork() {
   struct OnIdle {
     STACK_ALLOCATED();
 
@@ -581,7 +581,7 @@
     // DoWork callback. For some message pumps returning true from here is
     // sufficient to do that but not on mac.
     pump_->ScheduleWork();
-    return false;
+    return;
   }
   work_id_provider_->IncrementWorkId();
   // This is mostly redundant with the identical call in BeforeWait (upcoming)
@@ -596,14 +596,12 @@
   if (main_thread_only().quit_runloop_after != TimeTicks::Max() &&
       main_thread_only().quit_runloop_after <= on_idle->lazy_now.Now()) {
     Quit();
-    return false;
+    return;
   }
 
   // RunLoop::Delegate knows whether we called Run() or RunUntilIdle().
   if (ShouldQuitWhenIdle())
     Quit();
-
-  return false;
 }
 
 int ThreadControllerWithMessagePumpImpl::RunDepth() {
diff --git a/base/task/sequence_manager/thread_controller_with_message_pump_impl.h b/base/task/sequence_manager/thread_controller_with_message_pump_impl.h
index 8720df3..8ced429 100644
--- a/base/task/sequence_manager/thread_controller_with_message_pump_impl.h
+++ b/base/task/sequence_manager/thread_controller_with_message_pump_impl.h
@@ -95,7 +95,7 @@
   void BeforeWait() override;
   void BeginNativeWorkBeforeDoWork() override;
   MessagePump::Delegate::NextWorkInfo DoWork() override;
-  bool DoIdleWork() override;
+  void DoIdleWork() override;
   int RunDepth() override;
 
   void OnBeginWorkItemImpl(LazyNow& lazy_now);
diff --git a/base/task/sequence_manager/thread_controller_with_message_pump_impl_unittest.cc b/base/task/sequence_manager/thread_controller_with_message_pump_impl_unittest.cc
index 858347b..40b126b 100644
--- a/base/task/sequence_manager/thread_controller_with_message_pump_impl_unittest.cc
+++ b/base/task/sequence_manager/thread_controller_with_message_pump_impl_unittest.cc
@@ -665,7 +665,7 @@
         EXPECT_EQ(next_work_item.delayed_run_time, delayed_time);
         EXPECT_TRUE(next_work_item.yield_to_native);
 
-        EXPECT_FALSE(thread_controller_.DoIdleWork());
+        thread_controller_.DoIdleWork();
       }));
 
   run_loop.Run();
@@ -789,7 +789,7 @@
                   TimeTicks::Max());
 
         EXPECT_CALL(*message_pump_, Quit());
-        EXPECT_FALSE(thread_controller_.DoIdleWork());
+        thread_controller_.DoIdleWork();
       }));
   thread_controller_.Run(true, Seconds(15));
 }
@@ -811,13 +811,13 @@
 
         // Ensures timer resolution is set to high resolution.
         task_source_.SetHasPendingHighResolutionTasks(true);
-        EXPECT_FALSE(delegate->DoIdleWork());
+        delegate->DoIdleWork();
         EXPECT_TRUE(
             thread_controller_.MainThreadOnlyForTesting().in_high_res_mode);
 
         // Ensures time resolution is set back to low resolution.
         task_source_.SetHasPendingHighResolutionTasks(false);
-        EXPECT_FALSE(delegate->DoIdleWork());
+        delegate->DoIdleWork();
         EXPECT_FALSE(
             thread_controller_.MainThreadOnlyForTesting().in_high_res_mode);
 
@@ -852,7 +852,7 @@
 
         // The timer resolution should NOT be updated during power suspend.
         task_source_.SetHasPendingHighResolutionTasks(true);
-        EXPECT_FALSE(delegate->DoIdleWork());
+        delegate->DoIdleWork();
         EXPECT_FALSE(
             thread_controller_.MainThreadOnlyForTesting().in_high_res_mode);
 
@@ -860,7 +860,7 @@
         thread_controller_.ThreadControllerPowerMonitorForTesting()->OnResume();
 
         // Ensures timer resolution is set to high resolution.
-        EXPECT_FALSE(delegate->DoIdleWork());
+        delegate->DoIdleWork();
         EXPECT_TRUE(
             thread_controller_.MainThreadOnlyForTesting().in_high_res_mode);
 
@@ -977,7 +977,7 @@
                       OnPhaseRecorded(ThreadController::kIdleWork));
           EXPECT_CALL(*thread_controller_.trace_observer_,
                       OnThreadControllerActiveEnd);
-          EXPECT_FALSE(thread_controller_.DoIdleWork());
+          thread_controller_.DoIdleWork();
 
           testing::Mock::VerifyAndClearExpectations(
               &*thread_controller_.trace_observer_);
@@ -1031,7 +1031,7 @@
                     OnPhaseRecorded(ThreadController::kIdleWork));
         EXPECT_CALL(*thread_controller_.trace_observer_,
                     OnThreadControllerActiveEnd);
-        EXPECT_FALSE(thread_controller_.DoIdleWork());
+        thread_controller_.DoIdleWork();
       }));
 
   RunLoop().Run();
@@ -1081,7 +1081,7 @@
                       OnPhaseRecorded(ThreadController::kIdleWork));
           EXPECT_CALL(*thread_controller_.trace_observer_,
                       OnThreadControllerActiveEnd);
-          EXPECT_FALSE(thread_controller_.DoIdleWork());
+          thread_controller_.DoIdleWork();
 
           testing::Mock::VerifyAndClearExpectations(
               &*thread_controller_.trace_observer_);
@@ -1206,7 +1206,7 @@
                 // E:
                 EXPECT_CALL(*thread_controller_.trace_observer_,
                             OnThreadControllerActiveEnd);
-                EXPECT_FALSE(thread_controller_.DoIdleWork());
+                thread_controller_.DoIdleWork();
                 testing::Mock::VerifyAndClearExpectations(
                     &*thread_controller_.trace_observer_);
 
@@ -1260,7 +1260,7 @@
                     OnPhaseRecorded(ThreadController::kIdleWork));
         EXPECT_CALL(*thread_controller_.trace_observer_,
                     OnThreadControllerActiveEnd);
-        EXPECT_FALSE(thread_controller_.DoIdleWork());
+        thread_controller_.DoIdleWork();
         testing::Mock::VerifyAndClearExpectations(
             &*thread_controller_.trace_observer_);
 
@@ -1283,7 +1283,7 @@
                     OnPhaseRecorded(ThreadController::kIdleWork));
         EXPECT_CALL(*thread_controller_.trace_observer_,
                     OnThreadControllerActiveEnd);
-        EXPECT_FALSE(thread_controller_.DoIdleWork());
+        thread_controller_.DoIdleWork();
         testing::Mock::VerifyAndClearExpectations(
             &*thread_controller_.trace_observer_);
       }));
@@ -1360,7 +1360,7 @@
           // F:
           EXPECT_CALL(*thread_controller_.trace_observer_,
                       OnThreadControllerActiveEnd);
-          EXPECT_FALSE(thread_controller_.DoIdleWork());
+          thread_controller_.DoIdleWork();
           testing::Mock::VerifyAndClearExpectations(
               &*thread_controller_.trace_observer_);
 
@@ -1393,7 +1393,7 @@
                     OnPhaseRecorded(ThreadController::kIdleWork));
         EXPECT_CALL(*thread_controller_.trace_observer_,
                     OnThreadControllerActiveEnd);
-        EXPECT_FALSE(thread_controller_.DoIdleWork());
+        thread_controller_.DoIdleWork();
         testing::Mock::VerifyAndClearExpectations(
             &*thread_controller_.trace_observer_);
       }));
@@ -1469,7 +1469,7 @@
                     OnPhaseRecorded(ThreadController::kIdleWork));
         EXPECT_CALL(*thread_controller_.trace_observer_,
                     OnThreadControllerActiveEnd);
-        EXPECT_FALSE(thread_controller_.DoIdleWork());
+        thread_controller_.DoIdleWork();
         testing::Mock::VerifyAndClearExpectations(
             &*thread_controller_.trace_observer_);
       }));
@@ -1554,7 +1554,7 @@
                     OnPhaseRecorded(ThreadController::kIdleWork));
         EXPECT_CALL(*thread_controller_.trace_observer_,
                     OnThreadControllerActiveEnd);
-        EXPECT_FALSE(thread_controller_.DoIdleWork());
+        thread_controller_.DoIdleWork();
         testing::Mock::VerifyAndClearExpectations(
             &*thread_controller_.trace_observer_);
       }));
@@ -1642,7 +1642,7 @@
                     OnPhaseRecorded(ThreadController::kIdleWork));
         EXPECT_CALL(*thread_controller_.trace_observer_,
                     OnThreadControllerActiveEnd);
-        EXPECT_FALSE(thread_controller_.DoIdleWork());
+        thread_controller_.DoIdleWork();
         testing::Mock::VerifyAndClearExpectations(
             &*thread_controller_.trace_observer_);
       }));
@@ -1747,7 +1747,7 @@
                     OnPhaseRecorded(ThreadController::kIdleWork));
         EXPECT_CALL(*thread_controller_.trace_observer_,
                     OnThreadControllerActiveEnd);
-        EXPECT_FALSE(thread_controller_.DoIdleWork());
+        thread_controller_.DoIdleWork();
         testing::Mock::VerifyAndClearExpectations(
             &*thread_controller_.trace_observer_);
       }));
@@ -1834,7 +1834,7 @@
                     OnPhaseRecorded(ThreadController::kIdleWork));
         EXPECT_CALL(*thread_controller_.trace_observer_,
                     OnThreadControllerActiveEnd);
-        EXPECT_FALSE(thread_controller_.DoIdleWork());
+        thread_controller_.DoIdleWork();
         testing::Mock::VerifyAndClearExpectations(
             &*thread_controller_.trace_observer_);
       }));
@@ -1866,7 +1866,7 @@
                     OnPhaseRecorded(ThreadController::kIdleWork));
         EXPECT_CALL(*thread_controller_.trace_observer_,
                     OnThreadControllerActiveEnd);
-        EXPECT_FALSE(thread_controller_.DoIdleWork());
+        thread_controller_.DoIdleWork();
         testing::Mock::VerifyAndClearExpectations(
             &*thread_controller_.trace_observer_);
 
@@ -1919,7 +1919,7 @@
                     OnPhaseRecorded(ThreadController::kIdleWork));
         EXPECT_CALL(*thread_controller_.trace_observer_,
                     OnThreadControllerActiveEnd);
-        EXPECT_FALSE(thread_controller_.DoIdleWork());
+        thread_controller_.DoIdleWork();
         testing::Mock::VerifyAndClearExpectations(
             &*thread_controller_.trace_observer_);
       }));
@@ -1954,7 +1954,7 @@
                     OnPhaseRecorded(ThreadController::kIdleWork));
         EXPECT_CALL(*thread_controller_.trace_observer_,
                     OnThreadControllerActiveEnd);
-        EXPECT_FALSE(thread_controller_.DoIdleWork());
+        thread_controller_.DoIdleWork();
         testing::Mock::VerifyAndClearExpectations(
             &*thread_controller_.trace_observer_);
 
@@ -2020,7 +2020,7 @@
                     OnPhaseRecorded(ThreadController::kIdleWork));
         EXPECT_CALL(*thread_controller_.trace_observer_,
                     OnThreadControllerActiveEnd);
-        EXPECT_FALSE(thread_controller_.DoIdleWork());
+        thread_controller_.DoIdleWork();
         testing::Mock::VerifyAndClearExpectations(
             &*thread_controller_.trace_observer_);
       }));
@@ -2048,7 +2048,7 @@
                     OnPhaseRecorded(ThreadController::kIdleWork));
         EXPECT_CALL(*thread_controller_.trace_observer_,
                     OnThreadControllerActiveEnd);
-        EXPECT_FALSE(thread_controller_.DoIdleWork());
+        thread_controller_.DoIdleWork();
         testing::Mock::VerifyAndClearExpectations(
             &*thread_controller_.trace_observer_);
 
@@ -2093,7 +2093,7 @@
                     OnPhaseRecorded(ThreadController::kIdleWork));
         EXPECT_CALL(*thread_controller_.trace_observer_,
                     OnThreadControllerActiveEnd);
-        EXPECT_FALSE(thread_controller_.DoIdleWork());
+        thread_controller_.DoIdleWork();
 
         testing::Mock::VerifyAndClearExpectations(
             &*thread_controller_.trace_observer_);
diff --git a/base/test/test_support_android.cc b/base/test/test_support_android.cc
index e1c110a..53699e3 100644
--- a/base/test/test_support_android.cc
+++ b/base/test/test_support_android.cc
@@ -141,7 +141,7 @@
       if (more_work_is_plausible)
         continue;
 
-      more_work_is_plausible = g_state->delegate->DoIdleWork();
+      g_state->delegate->DoIdleWork();
       if (g_state->should_quit)
         break;
 
diff --git a/base/trace_event/memory_usage_estimator_unittest.cc b/base/trace_event/memory_usage_estimator_unittest.cc
index 8ec9fd3..799608f 100644
--- a/base/trace_event/memory_usage_estimator_unittest.cc
+++ b/base/trace_event/memory_usage_estimator_unittest.cc
@@ -2,6 +2,11 @@
 // Use of this source code is governed by a BSD-style license that can be
 // found in the LICENSE file.
 
+#ifdef UNSAFE_BUFFERS_BUILD
+// TODO(crbug.com/341324165): Fix and remove.
+#pragma allow_unsafe_buffers
+#endif
+
 #include "base/trace_event/memory_usage_estimator.h"
 
 #include <stdlib.h>
diff --git a/components/policy/core/common/schema.cc b/components/policy/core/common/schema.cc
index 59d65ba..a7b2fa4 100644
--- a/components/policy/core/common/schema.cc
+++ b/components/policy/core/common/schema.cc
@@ -1435,17 +1435,6 @@
 }
 
 // static
-Schema Schema::Parse(const std::string& content, std::string* error) {
-  base::expected<Schema, std::string> result = Schema::Parse(content);
-
-  if (!result.has_value()) {
-    *error = result.error();
-    return Schema();
-  }
-  return result.value();
-}
-
-// static
 base::expected<base::Value::Dict, std::string> Schema::ParseToDictAndValidate(
     const std::string& schema,
     int validator_options) {
diff --git a/components/policy/core/common/schema.h b/components/policy/core/common/schema.h
index 67d3f93..accb3c9 100644
--- a/components/policy/core/common/schema.h
+++ b/components/policy/core/common/schema.h
@@ -124,12 +124,6 @@
   // for the failure.
   static base::expected<Schema, std::string> Parse(const std::string& content);
 
-  // Parses the JSON schema in |schema| and returns a Schema that owns
-  // the internal representation. If |schema| is invalid then an invalid Schema
-  // is returned and |error| contains a reason for the failure.
-  // TODO(b/341876066): Migrate all callers to use the base::expected function.
-  static Schema Parse(const std::string& schema, std::string* error);
-
   // Verifies if |schema| is a valid JSON v3 schema. When this validation passes
   // then |schema| is valid JSON that can be parsed into a Value::Dict which can
   // be used to build a |Schema|. Returns the parsed Value::Dict when |schema|
diff --git a/components/policy/core/common/schema_fuzzer.cc b/components/policy/core/common/schema_fuzzer.cc
index 04bc2b6..bd7063b 100644
--- a/components/policy/core/common/schema_fuzzer.cc
+++ b/components/policy/core/common/schema_fuzzer.cc
@@ -31,8 +31,7 @@
 
 // Test schema parsing.
 void TestParsing(const Environment& env, const std::string& data) {
-  std::string error;
-  Schema::Parse(data, &error);
+  std::ignore = Schema::Parse(data);
 }
 
 // Test validation and normalization against the Chrome policy schema.
diff --git a/mojo/public/tools/bindings/generators/cpp_templates/module.cc.tmpl b/mojo/public/tools/bindings/generators/cpp_templates/module.cc.tmpl
index 287ca57..edd41b4 100644
--- a/mojo/public/tools/bindings/generators/cpp_templates/module.cc.tmpl
+++ b/mojo/public/tools/bindings/generators/cpp_templates/module.cc.tmpl
@@ -150,11 +150,7 @@
   base::RunLoop loop;
   proxy_->{{method.name}}(
 {%-   for param in method.parameters -%}
-{%- if param.kind|is_non_const_ref_kind %}
-      {{param.name}},
-{%- else %}
       std::move({{param.name}}),
-{%- endif %}
 {%-   endfor %}
       base::BindOnce(
           [](base::RunLoop* loop
diff --git a/mojo/public/tools/bindings/generators/mojolpm_templates/mojolpm.cc.tmpl b/mojo/public/tools/bindings/generators/mojolpm_templates/mojolpm.cc.tmpl
index 52b62ad..24e4dd7 100644
--- a/mojo/public/tools/bindings/generators/mojolpm_templates/mojolpm.cc.tmpl
+++ b/mojo/public/tools/bindings/generators/mojolpm_templates/mojolpm.cc.tmpl
@@ -367,11 +367,7 @@
 {%-       for param in method.parameters -%}
 {%-         set name = param.name|camel_to_under %}
 {%-         set kind = param.kind %}
-{%- if kind|is_non_const_ref_kind %}
-      local_{{name}}{{ ',' if not loop.last }}
-{%- else %}
       std::move(local_{{name}}){{ ',' if not loop.last }}
-{% endif %}
 {%-       endfor -%}
 {%-       if method.response_parameters != None -%}
 {{ ',' if method.parameters }}
diff --git a/mojo/public/tools/bindings/generators/mojom_mojolpm_generator.py b/mojo/public/tools/bindings/generators/mojom_mojolpm_generator.py
index 8edf715..955b996 100644
--- a/mojo/public/tools/bindings/generators/mojom_mojolpm_generator.py
+++ b/mojo/public/tools/bindings/generators/mojom_mojolpm_generator.py
@@ -256,7 +256,6 @@
         "is_hashable": self._IsHashableKind,
         "is_map_kind": mojom.IsMapKind,
         "is_move_only_kind": self._IsMoveOnlyKind,
-        "is_non_const_ref_kind": self._IsNonConstRefKind,
         "is_nullable_kind": mojom.IsNullableKind,
         "is_object_kind": mojom.IsObjectKind,
         "is_reference_kind": mojom.IsReferenceKind,
@@ -363,11 +362,6 @@
       return True
     return False
 
-  def _IsNonConstRefKind(self, kind):
-    if self._IsTypemappedKind(kind):
-      return self.typemap[self._GetFullMojomNameForKind(kind)]["non_const_ref"]
-    return False
-
   def _GetCppWrapperProtoType(self, kind, add_same_module_namespaces=False):
     if (mojom.IsEnumKind(kind) or mojom.IsStructKind(kind)
         or mojom.IsUnionKind(kind)):
