mirror of
https://bitbucket.org/chromiumembedded/cef
synced 2025-03-04 03:47:41 +01:00
- Windows: VS2015 Update 2 is now the minimum version requirement for linking cef_sandbox from official build binary distributions.
216 lines
8.1 KiB
Diff
216 lines
8.1 KiB
Diff
diff --git content/app/content_main.cc content/app/content_main.cc
|
|
index e463c4d677b1..5fbc0a732dee 100644
|
|
--- content/app/content_main.cc
|
|
+++ content/app/content_main.cc
|
|
@@ -206,15 +206,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
|
|
@@ -300,8 +295,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
|
|
|
|
@@ -311,7 +305,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) {
|
|
@@ -370,8 +364,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(
|
|
@@ -382,19 +384,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 a85c25303dfc..8fdc214608fc 100644
|
|
--- content/app/content_main_runner_impl.cc
|
|
+++ content/app/content_main_runner_impl.cc
|
|
@@ -45,6 +45,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"
|
|
@@ -571,7 +572,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)
|
|
@@ -1010,6 +1011,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 3eb986f3c7d4..58d1883f7948 100644
|
|
--- content/app/content_main_runner_impl.h
|
|
+++ content/app/content_main_runner_impl.h
|
|
@@ -13,6 +13,7 @@
|
|
#include "base/threading/hang_watcher.h"
|
|
#include "build/build_config.h"
|
|
#include "content/browser/startup_data_impl.h"
|
|
+#include "content/common/content_export.h"
|
|
#include "content/public/app/content_main.h"
|
|
#include "content/public/app/content_main_runner.h"
|
|
#include "content/public/common/main_function_params.h"
|
|
@@ -37,7 +38,7 @@ class ContentMainDelegate;
|
|
struct ContentMainParams;
|
|
class ServiceManagerEnvironment;
|
|
|
|
-class ContentMainRunnerImpl : public ContentMainRunner {
|
|
+class CONTENT_EXPORT ContentMainRunnerImpl : public ContentMainRunner {
|
|
public:
|
|
static std::unique_ptr<ContentMainRunnerImpl> Create();
|
|
|
|
@@ -51,6 +52,8 @@ class ContentMainRunnerImpl : public ContentMainRunner {
|
|
int Run(bool start_service_manager_only) override;
|
|
void Shutdown() override;
|
|
|
|
+ void ShutdownOnUIThread();
|
|
+
|
|
private:
|
|
int RunServiceManager(MainFunctionParams& main_function_params,
|
|
bool start_service_manager_only);
|
|
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 7384f3276f38..b84127a62b81 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)
|
|
@@ -88,7 +98,7 @@ CONTENT_EXPORT ContentMainDelegate* GetContentMainDelegateForTesting();
|
|
// 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
|