diff --git content/app/content_main.cc content/app/content_main.cc
index f70a103a45c6d..e880a7ec4b26c 100644
--- content/app/content_main.cc
+++ content/app/content_main.cc
@@ -174,11 +174,8 @@ ContentMainParams::~ContentMainParams() = default;
 ContentMainParams::ContentMainParams(ContentMainParams&&) = default;
 ContentMainParams& ContentMainParams::operator=(ContentMainParams&&) = default;
 
-// This function must be marked with NO_STACK_PROTECTOR or it may crash on
-// return, see the --change-stack-guard-on-fork command line flag.
-int NO_STACK_PROTECTOR
-RunContentProcess(ContentMainParams params,
-                  ContentMainRunner* content_main_runner) {
+int ContentMainInitialize(ContentMainParams params,
+                          ContentMainRunner* content_main_runner) {
   base::FeatureList::FailOnFeatureAccessWithoutFeatureList();
 #if BUILDFLAG(IS_CHROMEOS_LACROS)
   // Lacros is launched with inherited priority. Revert to normal priority
@@ -186,9 +183,6 @@ RunContentProcess(ContentMainParams params,
   base::PlatformThread::SetCurrentThreadType(base::ThreadType::kDefault);
 #endif
   int exit_code = -1;
-#if BUILDFLAG(IS_MAC)
-  base::apple::ScopedNSAutoreleasePool autorelease_pool;
-#endif
 
   // A flag to indicate whether Main() has been called before. On Android, we
   // may re-run Main() without restarting the browser process. This flag
@@ -274,14 +268,6 @@ RunContentProcess(ContentMainParams params,
 #endif
 
 #if BUILDFLAG(IS_MAC)
-    // We need this pool for all the objects created before we get to the event
-    // loop, but we don't want to leave them hanging around until the app quits.
-    // Each "main" needs to flush this pool right before it goes into its main
-    // event loop to get rid of the cruft. TODO(https://crbug.com/1424190): This
-    // is not safe. Each main loop should create and destroy its own pool; it
-    // should not be flushing the pool at the base of the autorelease pool
-    // stack.
-    params.autorelease_pool = &autorelease_pool;
     InitializeMac();
 #endif
 
@@ -331,12 +317,46 @@ RunContentProcess(ContentMainParams params,
 
   if (IsSubprocess())
     CommonSubprocessInit();
-  exit_code = content_main_runner->Run();
 
+  return exit_code;
+}
+
+// This function must be marked with NO_STACK_PROTECTOR or it may crash on
+// return, see the --change-stack-guard-on-fork command line flag.
+int NO_STACK_PROTECTOR
+ContentMainRun(ContentMainRunner* content_main_runner) {
+  return content_main_runner->Run();
+}
+
+void ContentMainShutdown(ContentMainRunner* content_main_runner) {
 #if !BUILDFLAG(IS_ANDROID) && !BUILDFLAG(IS_IOS)
   content_main_runner->Shutdown();
 #endif
+}
+
+// This function must be marked with NO_STACK_PROTECTOR or it may crash on
+// return, see the --change-stack-guard-on-fork command line flag.
+int NO_STACK_PROTECTOR
+RunContentProcess(ContentMainParams params,
+                  ContentMainRunner* content_main_runner) {
+#if BUILDFLAG(IS_MAC)
+  // We need this pool for all the objects created before we get to the event
+  // loop, but we don't want to leave them hanging around until the app quits.
+  // Each "main" needs to flush this pool right before it goes into its main
+  // event loop to get rid of the cruft. TODO(https://crbug.com/1424190): This
+  // is not safe. Each main loop should create and destroy its own pool; it
+  // should not be flushing the pool at the base of the autorelease pool
+  // stack.
+  base::apple::ScopedNSAutoreleasePool autorelease_pool;
+  params.autorelease_pool = &autorelease_pool;
+#endif
+
+  int exit_code = ContentMainInitialize(std::move(params), content_main_runner);
+  if (exit_code >= 0)
+    return exit_code;
+  exit_code = ContentMainRun(content_main_runner);
 
+  ContentMainShutdown(content_main_runner);
   return exit_code;
 }
 
diff --git content/app/content_main_runner_impl.cc content/app/content_main_runner_impl.cc
index 965b07bc43847..89da1178ca765 100644
--- content/app/content_main_runner_impl.cc
+++ content/app/content_main_runner_impl.cc
@@ -46,6 +46,7 @@
 #include "base/task/thread_pool/thread_pool_instance.h"
 #include "base/threading/hang_watcher.h"
 #include "base/threading/platform_thread.h"
+#include "base/threading/thread_restrictions.h"
 #include "base/time/time.h"
 #include "base/trace_event/trace_event.h"
 #include "build/build_config.h"
@@ -1338,6 +1339,11 @@ void ContentMainRunnerImpl::Shutdown() {
   is_shutdown_ = true;
 }
 
+void ContentMainRunnerImpl::ShutdownOnUIThread() {
+  base::ScopedAllowBaseSyncPrimitivesForTesting allow_wait;
+  discardable_shared_memory_manager_.reset();
+}
+
 // static
 std::unique_ptr<ContentMainRunner> ContentMainRunner::Create() {
   return ContentMainRunnerImpl::Create();
diff --git content/app/content_main_runner_impl.h content/app/content_main_runner_impl.h
index da60e9346b283..c36effdd7e5ee 100644
--- content/app/content_main_runner_impl.h
+++ content/app/content_main_runner_impl.h
@@ -27,7 +27,7 @@ class DiscardableSharedMemoryManager;
 namespace content {
 class MojoIpcSupport;
 
-class ContentMainRunnerImpl : public ContentMainRunner {
+class CONTENT_EXPORT ContentMainRunnerImpl : public ContentMainRunner {
  public:
   static std::unique_ptr<ContentMainRunnerImpl> Create();
 
@@ -46,6 +46,8 @@ class ContentMainRunnerImpl : public ContentMainRunner {
   int Run() override;
   void Shutdown() override;
 
+  void ShutdownOnUIThread();
+
  private:
   int RunBrowser(MainFunctionParams main_function_params,
                  bool start_minimal_browser);
diff --git content/common/set_process_title.cc content/common/set_process_title.cc
index 283161145d792..9f3f635abdd1c 100644
--- content/common/set_process_title.cc
+++ content/common/set_process_title.cc
@@ -54,7 +54,7 @@ void SetProcessTitleFromCommandLine(const char** main_argv) {
   bool have_argv0 = false;
 
 #if BUILDFLAG(IS_LINUX) || BUILDFLAG(IS_CHROMEOS)
-  DCHECK_EQ(base::PlatformThread::CurrentId(), getpid());
+  // DCHECK_EQ(base::PlatformThread::CurrentId(), getpid());
 
   if (main_argv)
     setproctitle_init(main_argv);
diff --git content/public/app/content_main.h content/public/app/content_main.h
index 44d9aa44ae430..47f916f566696 100644
--- content/public/app/content_main.h
+++ content/public/app/content_main.h
@@ -96,6 +96,13 @@ struct CONTENT_EXPORT ContentMainParams {
   }
 };
 
+// Split RunContentProcess() into separate stages.
+CONTENT_EXPORT int ContentMainInitialize(
+    ContentMainParams params,
+    ContentMainRunner* content_main_runner);
+CONTENT_EXPORT int ContentMainRun(ContentMainRunner* content_main_runner);
+CONTENT_EXPORT void ContentMainShutdown(ContentMainRunner* content_main_runner);
+
 CONTENT_EXPORT int RunContentProcess(ContentMainParams params,
                                      ContentMainRunner* content_main_runner);
 
