cef/patch/patches/content_main_654986.patch
Marshall Greenblatt 5ef0fb8ac8 Update to Chromium version 89.0.4389.0 (#843830)
- SSE3 is now required on x86 processors (see https://crbug.com/1123353).
2021-02-08 14:15:38 -05:00

208 lines
7.7 KiB
Diff

diff --git content/app/content_main.cc content/app/content_main.cc
index 2aba28d210db..5413f08af93d 100644
--- content/app/content_main.cc
+++ content/app/content_main.cc
@@ -205,15 +205,10 @@ void InitializeMojo(mojo::core::Configuration* config) {
} // namespace
-int RunContentProcess(const ContentMainParams& params,
- ContentMainRunner* content_main_runner) {
- ContentMainParams content_main_params(params);
-
+int ContentMainInitialize(ContentMainParams& params,
+ ContentMainRunner* content_main_runner) {
int exit_code = -1;
base::debug::GlobalActivityTracker* tracker = nullptr;
-#if defined(OS_MAC)
- std::unique_ptr<base::mac::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
@@ -299,8 +294,7 @@ int RunContentProcess(const ContentMainParams& params,
// 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.
- autorelease_pool = std::make_unique<base::mac::ScopedNSAutoreleasePool>();
- content_main_params.autorelease_pool = autorelease_pool.get();
+ params.autorelease_pool = std::make_unique<base::mac::ScopedNSAutoreleasePool>();
InitializeMac();
#endif
@@ -310,7 +304,7 @@ int RunContentProcess(const ContentMainParams& params,
ui::RegisterPathProvider();
tracker = base::debug::GlobalActivityTracker::Get();
- exit_code = content_main_runner->Initialize(content_main_params);
+ exit_code = content_main_runner->Initialize(params);
if (exit_code >= 0) {
if (tracker) {
@@ -369,8 +363,16 @@ int RunContentProcess(const ContentMainParams& params,
if (IsSubprocess())
CommonSubprocessInit();
- exit_code = content_main_runner->Run(params.minimal_browser_mode);
+ return exit_code;
+}
+
+int ContentMainRun(ContentMainParams& params,
+ ContentMainRunner* content_main_runner) {
+ int exit_code = content_main_runner->Run(params.minimal_browser_mode);
+
+ base::debug::GlobalActivityTracker* tracker =
+ base::debug::GlobalActivityTracker::Get();
if (tracker) {
if (exit_code == 0) {
tracker->SetProcessPhaseIfEnabled(
@@ -381,19 +383,33 @@ int RunContentProcess(const ContentMainParams& params,
tracker->process_data().SetInt("exit-code", exit_code);
}
}
+
+ return exit_code;
+}
+void ContentMainShutdown(ContentMainParams& params,
+ ContentMainRunner* content_main_runner) {
#if defined(OS_MAC)
- autorelease_pool.reset();
+ params.autorelease_pool.reset();
#endif
#if !defined(OS_ANDROID)
content_main_runner->Shutdown();
#endif
+}
+
+int RunContentProcess(ContentMainParams& params,
+ ContentMainRunner* content_main_runner) {
+ int exit_code = ContentMainInitialize(params, content_main_runner);
+ if (exit_code >= 0)
+ return exit_code;
+ exit_code = ContentMainRun(params, content_main_runner);
+ ContentMainShutdown(params, content_main_runner);
return exit_code;
}
-int ContentMain(const ContentMainParams& params) {
+int ContentMain(ContentMainParams& params) {
auto runner = ContentMainRunner::Create();
return RunContentProcess(params, runner.get());
}
diff --git content/app/content_main_runner_impl.cc content/app/content_main_runner_impl.cc
index 811017f5d455..00e4020dea17 100644
--- content/app/content_main_runner_impl.cc
+++ content/app/content_main_runner_impl.cc
@@ -48,6 +48,7 @@
#include "base/task/post_task.h"
#include "base/task/thread_pool/thread_pool_instance.h"
#include "base/threading/hang_watcher.h"
+#include "base/threading/thread_restrictions.h"
#include "base/trace_event/trace_event.h"
#include "components/discardable_memory/service/discardable_shared_memory_manager.h"
#include "components/download/public/common/download_task_runner.h"
@@ -629,7 +630,7 @@ int ContentMainRunnerImpl::Initialize(const ContentMainParams& params) {
#else // !OS_WIN
#if defined(OS_MAC)
- autorelease_pool_ = params.autorelease_pool;
+ autorelease_pool_ = params.autorelease_pool.get();
#endif // defined(OS_MAC)
#if defined(OS_ANDROID)
@@ -1089,6 +1090,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 86c624e53cf9..090171f7db22 100644
--- content/app/content_main_runner_impl.h
+++ content/app/content_main_runner_impl.h
@@ -39,7 +39,7 @@ class ContentMainDelegate;
class MojoIpcSupport;
struct ContentMainParams;
-class ContentMainRunnerImpl : public ContentMainRunner {
+class CONTENT_EXPORT ContentMainRunnerImpl : public ContentMainRunner {
public:
static std::unique_ptr<ContentMainRunnerImpl> Create();
@@ -53,6 +53,8 @@ class ContentMainRunnerImpl : public ContentMainRunner {
int Run(bool start_minimal_browser) 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 8b829a488773..a69a08869728 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 defined(OS_LINUX) || defined(OS_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 97aac3d0c758..4e7baa790252 100644
--- content/public/app/content_main.h
+++ content/public/app/content_main.h
@@ -5,6 +5,7 @@
#ifndef CONTENT_PUBLIC_APP_CONTENT_MAIN_H_
#define CONTENT_PUBLIC_APP_CONTENT_MAIN_H_
+#include <memory>
#include <stddef.h>
#include "base/callback_forward.h"
@@ -64,11 +65,20 @@ struct ContentMainParams {
#if defined(OS_MAC)
// The outermost autorelease pool to pass to main entry points.
- base::mac::ScopedNSAutoreleasePool* autorelease_pool = nullptr;
+ std::unique_ptr<base::mac::ScopedNSAutoreleasePool> autorelease_pool;
#endif
};
-CONTENT_EXPORT int RunContentProcess(const ContentMainParams& params,
+// Split RunContentProcess() into separate stages.
+CONTENT_EXPORT int ContentMainInitialize(
+ ContentMainParams& params,
+ ContentMainRunner* content_main_runner);
+CONTENT_EXPORT int ContentMainRun(ContentMainParams& params,
+ ContentMainRunner* content_main_runner);
+CONTENT_EXPORT void ContentMainShutdown(ContentMainParams& params,
+ ContentMainRunner* content_main_runner);
+
+CONTENT_EXPORT int RunContentProcess(ContentMainParams& params,
ContentMainRunner* content_main_runner);
#if defined(OS_ANDROID)
@@ -91,7 +101,7 @@ ContentMainDelegate* GetContentMainDelegate();
// initial setup for every process. The embedder has a chance to customize
// startup using the ContentMainDelegate interface. The embedder can also pass
// in null for |delegate| if they don't want to override default startup.
-CONTENT_EXPORT int ContentMain(const ContentMainParams& params);
+CONTENT_EXPORT int ContentMain(ContentMainParams& params);
#endif
} // namespace content