blob: 27725212485b537d58e5775c833a3761d720fd3d [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 "services/shape_detection/shape_detection_sandbox_hook.h"
#include <dlfcn.h>
#include "build/branding_buildflags.h"
#if BUILDFLAG(GOOGLE_CHROME_BRANDING)
#include "services/shape_detection/shape_detection_library_holder.h"
#endif // BUILDFLAG(GOOGLE_CHROME_BRANDING)
namespace shape_detection {
bool ShapeDetectionPreSandboxHook(
sandbox::policy::SandboxLinux::Options options) {
#if BUILDFLAG(GOOGLE_CHROME_BRANDING)
// Ensure the shape_detection_internal shared library is loaded before the
// sandbox is initialized.
const auto path = shape_detection::GetChromeShapeDetectionPath();
// We don't want to unload the library so not using
// `ShapeDetectionLibraryHolder` here.
void* dl =
dlopen(path.value().c_str(), RTLD_NOW | RTLD_GLOBAL | RTLD_NODELETE);
if (!dl) {
LOG(ERROR) << "Failed to open Chrome Shape Detection shared library!";
return false;
} else {
DVLOG(1) << "Successfully opened Chrome Shape Detection shared library.";
}
#endif // BUILDFLAG(GOOGLE_CHROME_BRANDING)
auto* instance = sandbox::policy::SandboxLinux::GetInstance();
instance->EngageNamespaceSandboxIfPossible();
return true;
}
} // namespace shape_detection