| diff --git content/app/content_main_runner_impl.cc content/app/content_main_runner_impl.cc |
| index bb72915a26e2..9fbafc0643e1 100644 |
| --- content/app/content_main_runner_impl.cc |
| +++ content/app/content_main_runner_impl.cc |
| @@ -44,6 +44,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" |
| @@ -1016,6 +1017,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 4632e35eaf65..c74d9ca750c7 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: |
| #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<ContentMainRunnerImpl> content_main_runner_; |