blob: 3ed48d5113e29b95111e6677a732a5ae5a83949c [file] [log] [blame]
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_;