cef/patch/patches/content_main_654986.patch

192 lines
7.3 KiB
Diff

diff --git base/process/set_process_title.cc base/process/set_process_title.cc
index 79ba3ac1913f8..46bcb4366d2f8 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 c37f18d794ae2..6d64483992d0c 100644
--- content/app/content_main.cc
+++ content/app/content_main.cc
@@ -194,11 +194,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.
-NO_STACK_PROTECTOR int 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
@@ -206,9 +203,6 @@ NO_STACK_PROTECTOR int RunContentProcess(
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
@@ -287,7 +281,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)
@@ -295,14 +291,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
@@ -353,12 +341,46 @@ 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.
+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 8fdd8d02e6496..436fbbdc4e4eb 100644
--- content/app/content_main_runner_impl.cc
+++ content/app/content_main_runner_impl.cc
@@ -52,6 +52,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"
@@ -1351,6 +1352,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);