diff options
author | Allan Sandfeld Jensen <allan.jensen@qt.io> | 2019-02-07 11:35:08 +0100 |
---|---|---|
committer | Allan Sandfeld Jensen <allan.jensen@qt.io> | 2019-03-23 00:24:54 +0000 |
commit | ce6a1a74d16deecf0c150aa1f5bae2cc6a95e7b1 (patch) | |
tree | e1ce3f92b50c0c0e5140019134e70e70a1ddb88d /src/core/content_utility_client_qt.cpp | |
parent | 5c6201f6c393967e9284bb9841281d286126541d (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.cpp | 40 |
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 |