summaryrefslogtreecommitdiffstats
path: root/src/core/content_utility_client_qt.cpp
diff options
context:
space:
mode:
authorAllan Sandfeld Jensen <allan.jensen@qt.io>2019-02-07 11:35:08 +0100
committerAllan Sandfeld Jensen <allan.jensen@qt.io>2019-03-23 00:24:54 +0000
commitce6a1a74d16deecf0c150aa1f5bae2cc6a95e7b1 (patch)
treee1ce3f92b50c0c0e5140019134e70e70a1ddb88d /src/core/content_utility_client_qt.cpp
parent5c6201f6c393967e9284bb9841281d286126541d (diff)
Adaptations for Chromium 73
Change-Id: I565d1e327852110a5abebed3388d7cd6986bef06 Reviewed-by: Michal Klocek <michal.klocek@qt.io>
Diffstat (limited to 'src/core/content_utility_client_qt.cpp')
-rw-r--r--src/core/content_utility_client_qt.cpp40
1 files changed, 35 insertions, 5 deletions
diff --git a/src/core/content_utility_client_qt.cpp b/src/core/content_utility_client_qt.cpp
index f49fa6386..0b2dbd08e 100644
--- a/src/core/content_utility_client_qt.cpp
+++ b/src/core/content_utility_client_qt.cpp
@@ -39,6 +39,7 @@
#include "content_utility_client_qt.h"
+#include "base/bind.h"
#include "content/public/utility/utility_thread.h"
#include "services/proxy_resolver/proxy_resolver_service.h"
@@ -50,12 +51,41 @@ ContentUtilityClientQt::ContentUtilityClientQt()
ContentUtilityClientQt::~ContentUtilityClientQt() = default;
-void ContentUtilityClientQt::RegisterServices(ContentUtilityClient::StaticServiceMap *services)
+namespace {
+
+std::unique_ptr<service_manager::Service> CreateProxyResolverService(service_manager::mojom::ServiceRequest request)
{
- service_manager::EmbeddedServiceInfo proxy_resolver_info;
- proxy_resolver_info.task_runner = content::ChildThread::Get()->GetIOTaskRunner();
- proxy_resolver_info.factory = base::BindRepeating(&proxy_resolver::ProxyResolverService::CreateService);
- services->emplace(proxy_resolver::mojom::kProxyResolverServiceName, proxy_resolver_info);
+ return std::make_unique<proxy_resolver::ProxyResolverService>(std::move(request));
+}
+
+using ServiceFactory = base::OnceCallback<std::unique_ptr<service_manager::Service>()>;
+void RunServiceOnIOThread(ServiceFactory factory)
+{
+ base::OnceClosure terminate_process = base::BindOnce(
+ base::IgnoreResult(&base::SequencedTaskRunner::PostTask),
+ base::SequencedTaskRunnerHandle::Get(), FROM_HERE,
+ base::BindOnce([] { content::UtilityThread::Get()->ReleaseProcess(); }));
+ content::ChildThread::Get()->GetIOTaskRunner()->PostTask(
+ FROM_HERE,
+ base::BindOnce(
+ [](ServiceFactory factory, base::OnceClosure terminate_process) {
+ service_manager::Service::RunAsyncUntilTermination(
+ std::move(factory).Run(), std::move(terminate_process));
+ },
+ std::move(factory), std::move(terminate_process)));
+}
+
+} // namespace
+
+bool ContentUtilityClientQt::HandleServiceRequest(const std::string &service_name,
+ service_manager::mojom::ServiceRequest request)
+{
+ if (service_name == proxy_resolver::mojom::kProxyResolverServiceName) {
+ RunServiceOnIOThread(base::BindOnce(&CreateProxyResolverService, std::move(request)));
+ return true;
+ }
+
+ return false;
}
} // namespace