mirror of
				https://bitbucket.org/chromiumembedded/cef
				synced 2025-06-05 21:39:12 +02:00 
			
		
		
		
	
		
			
				
	
	
		
			185 lines
		
	
	
		
			7.1 KiB
		
	
	
	
		
			Diff
		
	
	
	
	
	
			
		
		
	
	
			185 lines
		
	
	
		
			7.1 KiB
		
	
	
	
		
			Diff
		
	
	
	
	
	
diff --git base/process/set_process_title.cc base/process/set_process_title.cc
 | 
						|
index edd8c78fb1537..49622b9c05dc0 100644
 | 
						|
--- base/process/set_process_title.cc
 | 
						|
+++ base/process/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/app/content_main.cc content/app/content_main.cc
 | 
						|
index 54dfbaa6df693..b3a4093c076a3 100644
 | 
						|
--- content/app/content_main.cc
 | 
						|
+++ content/app/content_main.cc
 | 
						|
@@ -198,16 +198,10 @@ 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.
 | 
						|
-NO_STACK_PROTECTOR int RunContentProcess(
 | 
						|
-    ContentMainParams params,
 | 
						|
-    ContentMainRunner* content_main_runner) {
 | 
						|
+int ContentMainInitialize(ContentMainParams params,
 | 
						|
+                          ContentMainRunner* content_main_runner) {
 | 
						|
   base::FeatureList::FailOnFeatureAccessWithoutFeatureList();
 | 
						|
   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
 | 
						|
@@ -286,7 +280,9 @@ NO_STACK_PROTECTOR int RunContentProcess(
 | 
						|
     // default, "C", locale.
 | 
						|
     setlocale(LC_NUMERIC, "C");
 | 
						|
 
 | 
						|
-    SetupSignalHandlers();
 | 
						|
+    if (!params.disable_signal_handlers) {
 | 
						|
+      SetupSignalHandlers();
 | 
						|
+    }
 | 
						|
 #endif
 | 
						|
 
 | 
						|
 #if BUILDFLAG(IS_WIN)
 | 
						|
@@ -294,14 +290,6 @@ NO_STACK_PROTECTOR int RunContentProcess(
 | 
						|
 #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(crbug.com/40260311): 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
 | 
						|
 
 | 
						|
@@ -350,12 +338,44 @@ NO_STACK_PROTECTOR int RunContentProcess(
 | 
						|
 
 | 
						|
   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.
 | 
						|
+NO_STACK_PROTECTOR int 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.
 | 
						|
+NO_STACK_PROTECTOR int 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 93cbe4e3b64d4..a4356c3ccf4eb 100644
 | 
						|
--- content/app/content_main_runner_impl.cc
 | 
						|
+++ content/app/content_main_runner_impl.cc
 | 
						|
@@ -48,6 +48,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"
 | 
						|
@@ -1329,6 +1330,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 cbbc2f3ec12fa..f097b3cdded2f 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/public/app/content_main.h content/public/app/content_main.h
 | 
						|
index 7f9b515297357..5606867e43780 100644
 | 
						|
--- content/public/app/content_main.h
 | 
						|
+++ content/public/app/content_main.h
 | 
						|
@@ -66,6 +66,11 @@ struct CONTENT_EXPORT ContentMainParams {
 | 
						|
   // are left uninitialized.
 | 
						|
   bool minimal_browser_mode = false;
 | 
						|
 
 | 
						|
+#if BUILDFLAG(IS_POSIX) && !BUILDFLAG(IS_ANDROID)
 | 
						|
+  // Indicates whether to disable signal handlers
 | 
						|
+  bool disable_signal_handlers = false;
 | 
						|
+#endif
 | 
						|
+
 | 
						|
 #if BUILDFLAG(IS_MAC)
 | 
						|
   // The outermost autorelease pool to pass to main entry points.
 | 
						|
   STACK_ALLOCATED_IGNORE("https://crbug.com/1424190")
 | 
						|
@@ -94,6 +99,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);
 | 
						|
 
 |