diff --git content/app/content_main_runner_impl.cc content/app/content_main_runner_impl.cc index 1dec904333df..e1f2ec06d93f 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" @@ -1028,6 +1029,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 50797fdcea18..33acf1f35429 100644 --- content/app/content_main_runner_impl.h +++ content/app/content_main_runner_impl.h @@ -51,6 +51,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/app/content_service_manager_main_delegate.cc content/app/content_service_manager_main_delegate.cc index 1e6ad316bc67..e11e443ae694 100644 --- content/app/content_service_manager_main_delegate.cc +++ content/app/content_service_manager_main_delegate.cc @@ -174,4 +174,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 ae9796957e51..f26a578d60ed 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_;