blob: faa1c9d3f78c821794082d1d90d98ecb08bb0dec [file] [log] [blame]
// Copyright 2025 The Chromium Authors
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#include "content/browser/shape_detection/shape_detection_service_host.h"
#include "base/no_destructor.h"
#include "build/branding_buildflags.h"
#include "build/build_config.h"
#include "services/shape_detection/public/mojom/shape_detection_service.mojom.h"
#if BUILDFLAG(IS_WIN) && BUILDFLAG(GOOGLE_CHROME_BRANDING)
#include "content/public/browser/service_process_host_passkeys.h"
#include "services/shape_detection/shape_detection_library_holder.h"
#endif
#if BUILDFLAG(IS_WIN) || (BUILDFLAG(GOOGLE_CHROME_BRANDING) && \
(BUILDFLAG(IS_CHROMEOS) || BUILDFLAG(IS_LINUX)))
#include "content/public/browser/service_process_host.h"
#else
#include "content/browser/gpu/gpu_process_host.h"
#endif
namespace content {
shape_detection::mojom::ShapeDetectionService* GetShapeDetectionService() {
static base::NoDestructor<
mojo::Remote<shape_detection::mojom::ShapeDetectionService>>
remote;
if (!*remote) {
#if BUILDFLAG(IS_WIN) || (BUILDFLAG(GOOGLE_CHROME_BRANDING) && \
(BUILDFLAG(IS_CHROMEOS) || BUILDFLAG(IS_LINUX)))
ServiceProcessHost::Launch<shape_detection::mojom::ShapeDetectionService>(
remote->BindNewPipeAndPassReceiver(),
ServiceProcessHost::Options()
.WithDisplayName("Shape Detection Service")
#if BUILDFLAG(IS_WIN) && BUILDFLAG(GOOGLE_CHROME_BRANDING)
.WithPreloadedLibraries(
{shape_detection::GetChromeShapeDetectionPath()},
ServiceProcessHostPreloadLibraries::GetPassKey())
#endif // BUILDFLAG(IS_WIN) && BUILDFLAG(GOOGLE_CHROME_BRANDING)
.Pass());
#else
auto* gpu = GpuProcessHost::Get();
if (gpu) {
gpu->RunService(remote->BindNewPipeAndPassReceiver());
}
#endif
remote->reset_on_disconnect();
}
return remote->get();
}
} // namespace content