diff --git content/app/content_main_runner_impl.cc content/app/content_main_runner_impl.cc index 3b37ef6a284e..466c0331311e 100644 --- content/app/content_main_runner_impl.cc +++ content/app/content_main_runner_impl.cc @@ -43,6 +43,7 @@ #include "base/strings/stringprintf.h" #include "base/task/post_task.h" #include "base/task/thread_pool/thread_pool_instance.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" @@ -1001,6 +1002,11 @@ void ContentMainRunnerImpl::Shutdown() { is_shutdown_ = true; } +void ContentMainRunnerImpl::ShutdownOnUIThread() { + base::ScopedAllowBaseSyncPrimitivesForTesting allow_wait; + discardable_shared_memory_manager_.reset(); +} + // static ContentMainRunner* ContentMainRunner::Create() { return ContentMainRunnerImpl::Create(); diff --git content/app/content_main_runner_impl.h content/app/content_main_runner_impl.h index 72098b4d06f8..2c2091576aa8 100644 --- content/app/content_main_runner_impl.h +++ content/app/content_main_runner_impl.h @@ -50,6 +50,8 @@ class ContentMainRunnerImpl : public ContentMainRunner { int Run(bool start_service_manager_only) override; void Shutdown() override; + void ShutdownOnUIThread(); + private: #if !defined(CHROME_MULTIPLE_DLL_CHILD) int RunServiceManager(MainFunctionParams& main_function_params, diff --git content/app/content_service_manager_main_delegate.cc content/app/content_service_manager_main_delegate.cc index 86d0a470a7c2..5e4b91d31e3f 100644 --- content/app/content_service_manager_main_delegate.cc +++ content/app/content_service_manager_main_delegate.cc @@ -130,4 +130,8 @@ void ContentServiceManagerMainDelegate::SetStartServiceManagerOnly( start_service_manager_only_ = start_service_manager_only; } +void ContentServiceManagerMainDelegate::ShutdownOnUIThread() { + content_main_runner_->ShutdownOnUIThread(); +} + } // namespace content diff --git content/app/content_service_manager_main_delegate.h content/app/content_service_manager_main_delegate.h index 0b4042aec2ae..b8643b10a02e 100644 --- content/app/content_service_manager_main_delegate.h +++ content/app/content_service_manager_main_delegate.h @@ -18,7 +18,8 @@ namespace content { class ContentMainRunnerImpl; -class ContentServiceManagerMainDelegate : public service_manager::MainDelegate { +class CONTENT_EXPORT ContentServiceManagerMainDelegate : + public service_manager::MainDelegate { public: explicit ContentServiceManagerMainDelegate(const ContentMainParams& params); ~ContentServiceManagerMainDelegate() override; @@ -46,6 +47,8 @@ class ContentServiceManagerMainDelegate : public service_manager::MainDelegate { // full browser. void SetStartServiceManagerOnly(bool start_service_manager_only); + void ShutdownOnUIThread(); + private: ContentMainParams content_main_params_; std::unique_ptr content_main_runner_;